Array et formulaire - PHP - Programmation
Marsh Posté le 12-11-2006 à 18:45:21
tu devrai utiliser un tableau de variable :
tu appelle ta variable saisie_article[] au lieu de saisie_article
et quand tu traite les resultats, tu aura bien u ntableau
Marsh Posté le 12-11-2006 à 19:17:07
J'ai renommé les saisie_article en saisie_article[] :
les variables passent, comme auparavent - je les vois dans l'url en les passant en get - mais aucune n'est reconnue : réaffichage du formulaire vide, avec le bon nombre de lignes.
idem avec saisie_article[$i] .
Par rapport à mon code ci - dessus, initialiser $saisie_article = array(); afin que cette variable soit bien reconnue comme étant un tableau ne change rien à l'affaire.
La boucle est - elle OK, dans le traitement?
Marsh Posté le 12-11-2006 à 19:35:22
Page de saisie du formulaire
Code :
|
traitement des variable
Code :
|
Marsh Posté le 13-11-2006 à 19:49:11
Merci ! Sur le principe ça roule.
Une ou deux bricoles à régler mais je devrais m'en sortir :
au premier affichage, saisie_article[] est vide et le foreach - ds formulaire - il aime pââs - warning ...
Conditionner le foreach au fait que cette variable existe et soit non vide enlève le warning mais du coup le bouton d'ajout n'est plus précédé d'une ligne de saisie vide.
Ajouter ensuite ds traitement en initialisation "" $saisie_article[] = ""; " m'affiche une première page nickel, à savoir champ vide à saisir suivi du bouton d'ajout, mais en validant ce dernier j'ajoute deux nouvelles lignes vides et non pas une seule.
Des broutilles quoi :-) ...
Marsh Posté le 14-11-2006 à 00:48:57
Pbm. résolu :-).
Sans rentrer ds les détails code ci - dessous pour ceux intéressés, suite à qques modifs et la contribution essentielle de flo850.
Rappel :
Formulaire - affichage d'un champ de saisie avec après validation affichage du formulaire avec champs précédemment remplis et ligne supplémentaire vide pour nouvelle saisie.
Affichage pour tests de la valeur et du nombre des saisies effectuées.
dev4.php:
<?php
// initialise les variables
$article = array(); // vide, destiné à recevoir les saisies
$saisie_article[] = ""; // saisies postées via formulaire
$nb_art = 0; // compteur sur nombre de saisie
// Récup variables formulaire
$ajout_art = $_REQUEST['ajout_art']; // recup nom bouton de validation
switch ($ajout_art){ // si validation
case "Ajout": // Réferencer article supplémentaire
// test affichage variables postées
foreach ($_POST['saisie_article'] as $article){
echo 'ajout de '.$article.'<br><br>';
}
$nb_art = $_REQUEST['nb_art'];
$nb_art++; // incrémentation compteur nombre de saisie
break;
default:
}
// Afficher formulaire
include('affich4.php');
echo $nb_art; // test affichage compteur
?>
----------------------------------
affich4.php:
<table>
<form name="devis_modif" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<tr>
<td>Article :</td>
</tr>
<?php if (isset($saisie_article)& !empty($saisie_article)){
foreach($saisie_article as $article){ ?>
<tr>
<td><input type="text" name="saisie_article[]" value="<?php echo $article; ?>" size="30" maxlength="35"></td>
</tr>
<?php }
} ?>
<tr>
<td>Ajouter un article</td>
<!-- Référencer un autre article -->
<td>
<input type="hidden" name="nb_art" value="<?php echo $nb_art; ?>">
<input type="submit" name="ajout_art" value="Ajout">
</td>
</tr>
</form>
</table>
Marsh Posté le 12-11-2006 à 17:44:22
Bonjour,
Je cherche à réaliser un formulaire avec un champ de saisie unique et un bouton "Ajouter".
A la validation - appui sur "Ajouter" - je veux réafficher le formulaire avec la ligne précédemment saisie et une nouvelle ligne vide de saisie.
Et ainsi de suite.
Je passe par un tableau indexé de dimension 1 pour récupérer les saisies.
Le but est par la suite d'étendre cette application à une ligne de formulaire composée de plusieurs champs et traitée avec un tableau associatif multidimensionnel.
Pour l'instant seule est prise en compte la dernière ligne saisie, les autres variables postées ne sont pas reconnues. Elles sont écrasées, en cause sans doute la syntaxe de l'attribut name ( saisie_article ), et peut être bien la boucle aussi.
Ci - dessous mon code.
Auriez - vous une idée? Merci!
Commencer par appeler dev3.php :
dev3.php:
<?php
// initialise les variables
$article = array(); // vide, destiné à recevoir les saisies
$nb_art = 0; // compteur sur nombre de saisie
// Récup variables formulaire
$ajout_art = $_REQUEST['ajout_art']; // recup nom bouton de validation
switch ($ajout_art){ // si validation
case "Ajout": // Réferencer article supplémentaire
if (isset($_REQUEST['saisie_article'])){
for($i=0;$i<=$nb_art;$i++){
// recopie saisie dans tableau
$article[$i]= $_REQUEST['saisie_article'];
}
foreach ($article as $valeur){ // test affichage saisies formulaire
echo $valeur.'<br>';
}
}
$nb_art = $_REQUEST['nb_art'];
$nb_art++; // incrémentation compteur nombre de saisie
break;
default:
}
// Afficher formulaire
include('affich3.php');
echo $nb_art; // test affichage compteur
?>
affich3.php:
<table>
<form name="devis_modif" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<tr>
<td>Article :</td>
</tr>
<?php for($i=0;$i<=$nb_art;$i++){ ?>
<tr>
<td><input type="text" name="saisie_article" value="<?php echo $article[$i]; ?>" size="30" maxlength="35"></td>
</tr>
<?php } ?>
<tr>
<td>Ajouter un article</td>
<!-- Référencer un autre article -->
<td>
<input type="hidden" name="nb_art" value="<?php echo $nb_art; ?>">
<input type="submit" name="ajout_art" value="Ajout">
</td>
</tr>
</form>
</table>