checkbox

checkbox - PHP - Programmation

Marsh Posté le 23-11-2005 à 09:10:04    

Bonjour,
 
A l'aide de ce code je créer un formulaire pour recuperer des données et les stockées dans une table
 
cette page affiche plusieurs champs ue je souhaite valider pour le stockage, à l'aide de checkbox.
 
Mon problème est que les checkboxes ne fonctionnent pas, c'est la fonction Foreach qui ne fonctionne pas  
et que je ne sais pas programmer correctement.
 

Code :
  1. <?php
  2. // on se connecte à MySQL
  3. $db = mysql_connect('localhost', 'root', 'oups');
  4. // on sélectionne la base
  5. mysql_select_db('test',$db);
  6. // on crée la requête SQL
  7. $sql = 'SELECT id, nom_1, nom_2, nom_3, nom_4 FROM testbox';
  8. // on envoie la requête
  9. $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
  10. ?>
  11. <form method="POST" action="add_a.php">
  12. <table bgcolor='#FFFFCC' width="50%" border="1" cellspacing="1" cellpadding="1">
  13. <?php
  14. // on fait une boucle qui va faire un tour pour chaque enregistrement
  15. $alt=0;
  16. while($data = mysql_fetch_assoc($req))
  17. {
  18. $alt%=2;
  19. // on affiche les informations de l'enregistrement en cours
  20. // on traite la valeur de la case cochée
  21.  $tab = array('ok');
  22.        foreach($tab as $val)
  23.    {
  24. ?>
  25.   <tr>
  26.     <td><input type="text" name="id" size="6" value="<?php echo $data['id']; ?>" /></td>
  27.     <td><input type="text" name="nom_1" size="6" value="<?php echo $data['nom_1']; ?>" /></td>
  28.     <td><input type="text" name="nom_2" size="6" value="<?php echo $data['nom_2']; ?>" /></td>
  29.     <td><input type="text" name="nom_3" size="6" value="<?php echo $data['nom_3']; ?>" /></td>
  30.     <td><input type="text" name="nom_4" size="6" value="<?php echo $data['nom_4']; ?>" /></td>
  31. <td><input type="checkbox" name="tab[]" value="<?php echo $val; ?> " /><?php echo $val; ?><br /></td>
  32.   </tr>
  33.  
  34.    <?php     
  35.              $alt++;
  36.             }//end while
  37.   }// end foreach
  38.          mysql_close();// on ferme la connexion à mysql
  39.         //end if
  40. ?>
  41. </table>
  42. <input type="submit" value="Envoyer" name="envoyer">


 
 
La, c'est le code de traitement du formulaire si dessus.
 

Code :
  1. <?php
  2. // On commence par récupérer les champs
  3. if(isset($_POST['id']))      $id=$_POST['id'];
  4. else      $id="";
  5. if(isset($_POST['nom_1']))      $nom_1=$_POST['nom_1'];
  6. else      $nom_1="";
  7. if(isset($_POST['nom_2']))      $nom_2=$_POST['nom_2'];
  8. else      $nom_2="";
  9. if(isset($_POST['nom_3']))      $nom_3=$_POST['nom_3'];
  10. else      $nom_3="";
  11. if(isset($_POST['nom_4']))      $nom_4=$_POST['nom_4'];
  12. else      $nom_4="";
  13. if(isset($_POST['val']))      $val=$_POST['val'];
  14. else      $val="";
  15.        // connexion à la base
  16.  $db = mysql_connect('localhost', 'root', 'maelle')  or die('Erreur de connexion '.mysql_error());
  17.  // sélection de la base   
  18.     mysql_select_db('test',$db)  or die('Erreur de selection '.mysql_error());
  19.    
  20.     // on écrit la requête sql
  21.     $sql = "INSERT INTO testboxrecept (id, nom_1, nom_2, nom_3, nom_4) VALUES('', '$nom_1', '$nom_2', '$nom_3', '$nom_4')";
  22.    
  23.     // on insère les informations du formulaire dans la table
  24.     mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
  25.     // on affiche le résultat pour le visiteur
  26.     echo 'Vos infos on été ajoutées.';
  27.     mysql_close();  // on ferme la connexion
  28. ?>

Reply

Marsh Posté le 23-11-2005 à 09:10:04   

Reply

Marsh Posté le 23-11-2005 à 11:31:01    

Le problème se situe probablement sur la ligne 34 :

Citation :

<td><input type="checkbox" name="tab[]" value="<?php echo $val; ?> " /><?php echo $val; ?><br /></td>

Il faut choisir un meilleur nom pour la checkbox que "tab[]", par exemple name="<?php echo 'chkbox_'.$i; ?>" et il faudrait avoir $i= 0; au début de la boucle, et $i++; dans la boucle.

Reply

Marsh Posté le 23-11-2005 à 11:55:01    

Son tab[] il est trés bien, le systéme renvéra un tableau de valeur à php taandisque toi, avec ton systéme, tu te complique énormément la vie : obligé de tester toutes les variables pouvant exister afin de voir si elles existent ou pas et obligé de tester le contenu.
Avec un tab[] on aura directement un tableau contenant les valeur des case à coché qui ont été coché. C'est beaucoup plus propre.
 
secur_b > Tu te rends comptes que ton tableau $tab n'est initialisé nulle part? :o Rien que pour ça, tu ne devrais en avoir aucun d'afficher au premier accés à cette page. Et tu te rends compte que même s'il est initialisé par envoie d'un formulaire, tu n'auras jamais que les cases coché la fois précédente qui réaparaitront? Un navigateur n'envoie les valeurs des cases à coché et des checkbox que si ils sont coché.
 
Quand à ta validation du formulaire, vu que tu ne traites pas le tableau de résultat des checkbox (ton tableau s'apelle $tab) et que tu traites une variable jamais envoyé par le navigateur ($_POST['val'] n'existe pas, vu qu'il n'y a aucun élément du formulaire dont le nom est "val" ), tu ne risques pas de retrouver la moindre case à coché dfans ton résultat.

Reply

Marsh Posté le 23-11-2005 à 12:16:58    

Citation :

Tu te rends comptes que ton tableau $tab n'est initialisé nulle part?


il doit s'initialise a l'envoie puisque les infos stockées dans ma table s'affichent...

Citation :

Un navigateur n'envoie les valeurs des cases à coché et des checkbox que si ils sont coché


si je comprends bien, je dois rajouter le parametre "checked" a ma checkbox ! et ma selection se fera par decochage'!

Citation :

vu que tu ne traites pas le tableau de résultat des checkbox...


je ne sais pas faire !
 
Ps ma table, s'incremente bien, mais toujours de la derniere ligne.
 
merci de votre aide


Message édité par secur_b le 23-11-2005 à 12:19:07
Reply

Marsh Posté le 23-11-2005 à 13:13:13    

Merci pour l'info omega2. Je ne savais pas. Je testerais ça un jour, parce que c'est une technique qui a l'air intéressante.

Reply

Marsh Posté le 23-11-2005 à 14:12:33    

J'aurais pas mal de remarques, mais j'ai la flemme de tout lister, alors je balance la première :
 
Mettre

Code :
  1. <input type="text" name="nom_1" ...

dans une boucle ça te paraît pas poser un léger problème ?


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Sujets relatifs:

Leave a Replay

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