Array et formulaire

Array et formulaire - PHP - Programmation

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>
 
 
               

Reply

Marsh Posté le 12-11-2006 à 17:44:22   

Reply

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

Reply

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?  

Reply

Marsh Posté le 12-11-2006 à 19:35:22    

Page de saisie du formulaire

Code :
  1. <form method="POST">
  2. <!-- affichage des articles saisi ->
  3.    <?
  4.    foreach($saisie_article  $article){
  5.           echo '<input name="saisie_article[]" value="'.$article.'"><br>';
  6.     }
  7.   ?>
  8. <!-- saisie d un nouvel article-->
  9. <input name="saisie_article[]" value="">
  10. <input type="submit" value
  11. </form>


 
traitement des variable
 

Code :
  1. foreach($_POST['saisiearticle'] as $article)'
  2. echo ' tu as commandé '.$article.'<br>';
  3. }


Message édité par flo850 le 12-11-2006 à 19:35:33
Reply

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 :-) ...

Reply

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>
 
 
 
   
 
 
 
 
 
 
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 
 
 
 
 
 
   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed