Comment savoir quelle case sont cochées ?

Comment savoir quelle case sont cochées ? - PHP - Programmation

Marsh Posté le 16-11-2003 à 16:10:58    

Bonjour,
 
Etant enièrement débuttant en php, ma question risque de paraitre simple (voir simpliste).
 
J'ai fait un query me renvoyant une liste de nom.  J'affiche cette liste dans une page(via un FORM), et à coté de chaque nom, je met une case à cocher.  en dessous se trouve un bouton 'supprimer'.
 
Lorsque l'on clique sur le bouton, ca doit supprimer les enregistrement qui sont coché.  
Ma question est la suivante:  Comment faire pour connaitre les élément coché ?
 
Mon query avec l'affichage du tableau(en résumé)
 
 

Code :
  1. ...
  2. <FORM ACTION="delete.php" METHOD=POST>
  3. ...
  4. <?
  5. while($row = mysql_fetch_array($result)){
  6.         echo $row['id'];
  7.   echo '<td><input name="evenement" type=checkbox value "0">';
  8.   }
  9. ?>
  10. <br>
  11. <center><input name="submit" type=submit value="Supprimer"></center>
  12. </FORM>


 
 
Un lien vers une page qui fait ça simplement devrait déjà m'aider largement.


Message édité par Michrone le 16-11-2003 à 16:13:10
Reply

Marsh Posté le 16-11-2003 à 16:10:58   

Reply

Marsh Posté le 16-11-2003 à 16:13:56    

Michrone a écrit :

Bonjour,
 
Etant enièrement débuttant en php, ma question risque de paraitre simple (voir simpliste).
 
J'ai fait un query me renvoyant une liste de nom.  J'affiche cette liste dans une page(via un FORM), et à coté de chaque nom, je met une case à cocher.  en dessous se trouve un bouton 'supprimer'.
 
Lorsque l'on clique sur le bonton, ca doit supprimer les enregistrement qui sont coché.  
Ma question est la suivante:  Comment faire pour connaitre les élément coché ?
 
Mon query avec l'affichage du tableau(en résumé)
 
 

Code :
  1. ...
  2. <FORM ACTION="delete.php" METHOD=POST>
  3. ...
  4. <?
  5. while($row = mysql_fetch_array($result)){
  6.              echo $row['id'];
  7.   echo '<td><input name="evenement" type=checkbox value "0">';
  8.   }
  9. ?>
  10. <br>
  11. <center><input name="submit" type=submit value="Supprimer"></center>
  12. </FORM>


 


 
Imaginons que tu aies 10 cases à cocher.
 
Elles ont pour name="case1", name="case2" etc...
 
Pour récupérer les valeurs, tu fais donc une boucle qui va lister la récupération de chaque $_POST[case1] $_POST[case2] etc...
 
Donc, tu vas devoir utiliser une variable dynamique. genre : ${"case".$i} ou $i représente le compteur dans ta boucle.

Reply

Marsh Posté le 16-11-2003 à 16:15:23    

Ok.  J'avais essayer cela, mais j'obtenais toujours une erreur PHP.  J'ai dû mal m'y prendre.  

Reply

Marsh Posté le 16-11-2003 à 16:32:50    

n'oublie pas que si une checkbox est cochée, la variable $_POST['caseX'] aura comme valeur "on". Sinon elle sera vide.

Reply

Marsh Posté le 16-11-2003 à 16:46:06    

Ayuget a écrit :

n'oublie pas que si une checkbox est cochée, la variable $_POST['caseX'] aura comme valeur "on". Sinon elle sera vide.


 
elle aura surtout la valeur qu'il aura indiqué avec value...  :whistle:

Reply

Marsh Posté le 16-11-2003 à 16:48:44    

Décidément, je pige rien..
Au moment de la cr&ation de mon tableau, j'ai donc ajouter ceci
 
$num = $row['id'];
echo '<td><input name=${"evenement".$num} type=checkbox value "0">';  
 
Je suppose que X case à cocher sont créées, et qu'elle s'appelle evenementX  (X représente un nombre)
 
Je ne connais pas ce nombre à l'avance.
 
Ensuite, quand je fais un
 
echo $_POST["evenement46"]; je reçois:
Notice: Undefined index: evenement46 in ...  
 
Je sais que l'élément 46 a dû être créer(puisque $row['id'] 46 existe)
 
Si je fais  
echo $evenement46;
Là, c'est  
Notice: Undefined variable: evenement46;
 

Reply

Marsh Posté le 16-11-2003 à 16:52:03    

fais :
 
$a = "evenement"."$num";
$b = ${$a};
 
pour voir...

Reply

Marsh Posté le 16-11-2003 à 16:54:25    

Pareil:
 
Undefined variable: evenement2
 
Pourtant, l'indice 2 est bien le dernier élément de mon tableau.
 


Message édité par Michrone le 16-11-2003 à 16:57:47
Reply

Marsh Posté le 16-11-2003 à 17:24:41    

Si c'est pas coché, il me semble que la case du tableau est pas créé.

Reply

Marsh Posté le 16-11-2003 à 17:43:56    

Hermes le Messager a écrit :


 
elle aura surtout la valeur qu'il aura indiqué avec value...  :whistle:  


mouais :D

Reply

Marsh Posté le 16-11-2003 à 17:43:56   

Reply

Marsh Posté le 16-11-2003 à 18:27:13    

Y a une "astuce" avec les cases à cocher.
Pour une case ayant le nom nom_case et la valeur value_case :
- si elle est cochée -> il existe un $_POST['nom_case'], qui a la valeur 'value_case'
- si elle n'est pas cochée, il n'y a rien
 
if (isset($_POST['nom_case'])) {
    echo "case cochée, avec la valeur " . $_POST['nom_case'];
} else {
    echo "la case n'était pas cochée";
}


Message édité par mrbebert le 16-11-2003 à 18:27:46
Reply

Marsh Posté le 16-11-2003 à 18:42:21    

Rien à faire.
 
Visiblement, c'est à la création de ma variable que ça nje va pas.
 
Je dois donc créer x checkbox.
 
Il a l'air de le faire, mais quand j'essaie de "lire" leur valeur, il considère toujours qu'elles sont "pas cochée".
 
A mon avis, elles sont "pas cochées" parce qu'elles n'existent pas...
 
J'ai fait(entre autre)
 
echo '<td><input name=${"evenement".$num} type=checkbox value "0">';  
 
J'espèrais avoir  
 
evenment1
evenment2
evenement46
 
Mais apparement, ce n'est pas le cas.
 
Existe-til une possibilité pour voir ce qui est créé ?

Reply

Marsh Posté le 16-11-2003 à 18:45:53    

Déja, vérifie que le code HTML du formulaire est bon. (dans le navigateur, affichage->source)

Reply

Marsh Posté le 16-11-2003 à 18:46:23    

Michrone a écrit :


 

Code :
  1. echo '<td><input name=${"evenement".$num} type=checkbox value "0">';


 


 
N'importe quoi franchement.  :pfff:  
 
 

Code :
  1. echo "<td><input name=\"".${"evenement".$num}."\" type=\"checkbox\"  value \"0\">";


 
Essayes ça déjà...

Reply

Marsh Posté le 16-11-2003 à 18:49:17    

value=\"0\", non ? :??: Paske sans le =, j'sais pas si le browser va être hyper d'accord :o


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 16-11-2003 à 18:49:25    

J'avais dit que j'y connaissais rien...
Sinon, ça fait ça quand je tape ton code:
Notice: Undefined variable: evenement47
etc etc pour les autres numéros.
 
Ils doivent servirent à quoi les \ et "" que tu as ajouter ?


Message édité par Michrone le 16-11-2003 à 18:54:30
Reply

Marsh Posté le 16-11-2003 à 18:55:49    

Version corrigée :
 
 

Code :
  1. $var_inter = "evenement"."$num";
  2. echo "<td><input name=\"".${$var_inter}."\" type=\"checkbox\"  value=\"0\">";


 
Et maintenant ?

Reply

Marsh Posté le 16-11-2003 à 18:59:32    

Tu as vérifié que le code HTML du formaulaire était bon ?
Ca ne sert à rien de tester la réception si le formulaire n'est pas correct [:proy]

Reply

Marsh Posté le 16-11-2003 à 19:02:26    

Tiens oui d'ailleurs... Poste nous le code complet pour une fois, parce que je sens que sinon, demain on sera toujours là...

Reply

Marsh Posté le 17-11-2003 à 17:13:11    

Voilà le code complet de la page:
 

Code :
  1. <HTML>
  2. <HEAD>
  3. <TITLE> Supprimer des anniversaires enregistrés </TITLE>
  4. </HEAD>
  5. <BODY>
  6. <FORM ACTION="delete.php" METHOD=POST>
  7. <?
  8.    include ( './include/mysql.inc.php' );
  9.    $link = mysql_connect ($host, $user, $pass) or die ('Erreur : ' . mysql_error());
  10.    mysql_select_db($db) or die ('Erreur :' . mysql_error());
  11.    $select = "SELECT id, event, naissance FROM  mich_anniversaire where specialevent = '0' ORDER BY naissance DESC";
  12.    $result = mysql_query($select, $link) or die ('Erreur SQL: ' . mysql_error());
  13.    $total = mysql_num_rows($result);
  14.    if ($total != 0){     
  15.       echo '<strong><font color="#CC0000" size="1" face="Verdana, Arial, Helvetica, sans-serif">';
  16.   echo "Voici la liste des personnes qui sont inscrites dans la liste";
  17.   echo '</font></strong>';
  18.   echo '<br>';
  19.   echo '<br>';
  20.   echo '<font color="#CC0000" size="1" face="Verdana, Arial, Helvetica, sans-serif">';
  21.   echo '<table width="50%" height="100%" border="2" cellpadding="1" cellspacing="1" bordercolor="#FF3300">';
  22.       while($row = mysql_fetch_array($result)){
  23.          $compteur = $row['id'];
  24.   $year  = substr($row['naissance'], 0, 4);
  25.   $month = substr($row['naissance'], 5, 2);
  26.          $day   = substr($row['naissance'], 8, 2);
  27.   $anniversaire = $day.'/'.$month.'/'.$year;
  28.   echo '<tr>';
  29.   echo '<td>';
  30.   echo '<font color="#CC0000" size="1" face="Verdana, Arial, Helvetica, sans-serif">';
  31.          echo $row['id'];
  32.   echo '</font>';
  33.   echo '</td>';
  34.   echo '<td>';
  35.   echo '<font color="#CC0000" size="1" face="Verdana, Arial, Helvetica, sans-serif">';
  36.          echo $row['event'];
  37.   echo '</font>';
  38.   echo '</td>';
  39.   echo '<td>';
  40.   echo '<font color="#CC0000" size="1" face="Verdana, Arial, Helvetica, sans-serif">';
  41.   echo " est né le " .$anniversaire;
  42.   echo '</font>';
  43.   echo '</td>';
  44.   $num = $row['id'];
  45.   $var_inter = "evenement".$num;
  46.          echo "<td><input name=\"".${$var_inter}."\" type=\"checkbox\"  value=\"0\">";
  47.   echo '<br>';
  48.   echo '</td>';
  49.   echo '</tr>';
  50.   }
  51.   echo '</table>';
  52.    }
  53.    echo ;
  54.   
  55. ?>
  56. <br>
  57. <center><input name="submit" type=submit value="Supprimer"></center>
  58. </FORM>
  59. </body>
  60. </html>


 
Le formulaire est affiché correctement avec ce code.(enfin, en apparence, j'obtiens bien ce que je veux)


Message édité par Michrone le 17-11-2003 à 17:14:08
Reply

Marsh Posté le 17-11-2003 à 21:01:23    

Personne ne sait ?

Reply

Marsh Posté le 17-11-2003 à 22:31:24    

Ayuget a écrit :

n'oublie pas que si une checkbox est cochée, la variable $_POST['caseX'] aura comme valeur "on". Sinon elle sera vide.


 
pour utiliser comme variable $_POST['caseX'] il faut que le php.ini  soit sur "off" dans register_globals  nan  :heink:  
 
parcque sur ovh par ex c'est "on" alors que quand t'installe easyphp 1.7 c'est sur "off"
 
combien ça ma fait perdre du temps ça  :fou:


Message édité par noizing le 17-11-2003 à 22:34:45
Reply

Marsh Posté le 17-11-2003 à 22:37:38    

noizing a écrit :


 
pour utiliser comme variable $_POST['caseX'] il faut que le php.ini  soit sur "off" dans register_globals  nan  :heink:  

Tu peux utiliser $_POST que ce soit on ou off, mais si c'est off, c'est le seul moyen (en dehors de $HTTP_POST_VARS) de récupérer les donné passé en post.

Reply

Marsh Posté le 18-11-2003 à 10:01:01    

Tu peux faire comme ça sinon =>
 

Code :
  1. ...
  2. if (!isset($_POST['id']))
  3. {
  4.     header('Location: validate.php');
  5.     exit;
  6. }
  7. foreach($_POST['id'] as $Id)
  8. {
  9.     ...
  10. }
  11. ...


 
et :
 

Code :
  1. ...
  2. <tr>
  3. <td class="validate"><input class="validate" type="checkbox" name="id[]" value="1" /></td>
  4. <td class="validate">Validate.jpg</td>
  5. </tr>
  6. <tr>
  7. <td class="validate"><input class="validate" type="checkbox" name="id[]" value="2" /></td>
  8. <td class="validate">ValidateAll.jpg</td>
  9. </tr>
  10. <tr>
  11. <td class="validate"><input class="validate" type="checkbox" name="id[]" value="3" /></td>
  12. <td class="validate">ValidateAllDisabled.jpg</td>
  13. </tr>
  14. ...


 
En gros tu donnes le meme nom a toutes tes checkboxes => checkbox_name[] et ensuite tu utilises un foreach pour recuperer toutes les values. Dans ton cas c'est surement plus pratique d'utiliser un array html pour recuperer ta liste de noms.

Reply

Marsh Posté le 18-11-2003 à 10:57:27    

+1, c'est comme çà qu'il faut faire avec les checkbox/radio !


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 18-11-2003 à 17:50:24    

Ok, un grand merci.

Reply

Marsh Posté le 18-11-2003 à 20:54:21    

impulse a écrit :

...
 
En gros tu donnes le meme nom a toutes tes checkboxes => checkbox_name[] et ensuite tu utilises un foreach pour recuperer toutes les values. Dans ton cas c'est surement plus pratique d'utiliser un array html pour recuperer ta liste de noms.

intéressant :)  :jap:

Reply

Marsh Posté le 18-11-2003 à 22:58:22    

Intéressant et surtout ça marche :-)

Reply

Marsh Posté le 18-11-2003 à 22:58:50    

Michrone a écrit :

Intéressant et surtout ça marche :-)

c'est un plus appréciable :lol:

Reply

Marsh Posté le 19-11-2003 à 13:12:43    

mrBebert a écrit :

c'est un plus appréciable :lol:  


 
Surtout que quand le nombre de case à cocher n'est jamais le meme (formulaire généré dynamiquemen), ca doit etre une galere pas possible car le script de traitement du formulaire ne sait pas combien il doit tester de valeurs, alors qu'avec un tableau c tout bete :)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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