Page 1 sur 2

checkbox permettant d effacer les donnees de db

Posté : 24 mai 2006, 12:39
par iruka
bonjour,

j ai un petit souci avec une checkbox et un formulaire.

le fonctionnement est le suivant : les gens ont une ligne a remplir, ils envoient les donnees dans la bd en cliquant et en rechargeant la page, si la base contient quelque chose avec leur id, j affiche les resultats avec des checkboxs a cote de chaque ligne de donnees entree pour pouvoir les effacer mais j ai beau avoir mis ma requete dans la boucle d affichage, il n efface que la premiere ligne...

je vous mets les elements du code ou le probleme peut resider :
<?php 
include ("connexion/mysql.inc.php");

if (isset($_POST['nom2']) && $i==1){

// on insère les informations du formulaire dans la table 
$sql = "INSERT INTO education(id,schoolname,graduation,schoollevel,educationmonth,educationyear) VALUES ('$id','$nomecole','$degree','$ecolelevel','$educationmois','$educationannee')";     
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 
}

//on verifie s il y a quelque chose dans la table
	 $sql2 = mysql_query("SELECT * FROM education WHERE id=$id ORDER BY educationyear DESC"); 
$total = mysql_num_rows($sql2);

// si la requete trouve quelque chose on affiche le resultat
	if ($total !=0) {
echo "<form name=\"delete\" method=\"post\" action=\"education.php\">";
	echo"<tr>";
           echo"<td colspan=\"6\" class=\"submessage\">";
                        echo" </td>";
       echo" </tr>";
       echo"<tr>";
           echo"<td class=\"header\" align=\"center\">annee</td>";
           echo" <td class=\"header\" align=\"center\">mois</td>";
         echo"  <td class=\"header\" align=\"center\" width=\"80%\">jour</td>";
          echo"  <td class=\"header\" align=\"center\" width=\"10%\"><br/></td>";
          echo"  <td class=\"header\" align=\"center\" width=\"10%\"><br/></td>";
          echo"  <td class=\"header\" align=\"center\">";
         echo"   <input type=\"submit\" name=\"nom\" value=\"effacer\">";
         echo"   </td>";
     echo"   </tr>";
	 
// on fait une boucle pour afficher les donnees dans la table
	while ($donnees = mysql_fetch_array($sql2) )
	{
    echo"    <tr>";
      echo"     <td class=\"input1\">";
            echo    $donnees['educationyear'];
        echo "</td>";
           echo" <td class=\"input1\">";
              echo    $donnees['educationmonth'];
        echo"    </td>";
        echo"    <td class=\"input1\">";
           echo      $donnees['jour'];
       echo"    </td>";
       echo"   <td class=\"input1\" align=\"center\">";
       echo"        <input type=\"checkbox\" name=\"aeffacer\" value=\"".$donnees['auto']."\" >";
	       echo"     </td>";
    echo"   </tr>";
      echo" </tr>";	
	echo"</form>";
// on verifie que la checkbox n est pas vide	
$effacer = (isset($_POST['aeffacer']))?$_POST['aeffacer']:null; 
// si elle n est pas vide, on efface les donnees dans la table correspondant a auto, intecrement
if (!empty($effacer)) { 
    $sql2 = mysql_query("DELETE FROM education WHERE auto=".$donnees['auto'].""); 
	echo "DELETE FROM education WHERE auto=".$donnees['auto']."";}
   } 
  } 
?>
l echo c est juste pour voir ce que ca donne mais il ne m affiche qu une requete au lieu de plusieurs donc il doit y avoir un probleme mais je ne vois pas ou....

si quelqu un voyait ou se trouve l erreur, ca m aiderait beaucoup

Posté : 24 mai 2006, 13:11
par rw_cd
salut iruka

des variables non déclarées! attention...et il me semble qu'un foreach serait plus approprié.et revois le formulaire çà :

Code : Tout sélectionner

echo" <input type=\"submit\" name=\"nom\" value=\"effacer\">";
avant les checkbox, il y à un pb.et la balise table, elle est où? je te conseilles humblement de placer aussi des guillemets sur tes champs sql.j'utilise ce type de code pour les checkbox :

Code : Tout sélectionner

foreach ($choix as $choix2) { echo "<ul>"; echo "<li><span>$choix2</span></li>\n"; echo "</ul>";
ou çà :

Code : Tout sélectionner

foreach ($choix as $choix2) { echo "<input type='checkbox' name='check' value=\"$choix2\" />\n"; }

avec ce type de code pour le form :

<input type="checkbox" name="choix[]" value...

Posté : 24 mai 2006, 13:14
par guilt92
Bonjour,
ne faudrait il pas que chaque Checkbox ait un nom différent ?
Ainsi dans ta boucle d'affichage tu pourrais définir un nom du style name="check".$i ou $i serait une variable qui s'incrémente au début de ton while.

En effet avec un nom unique pour chaque checkbox je ne vois pas comment tu pourrais reconnaitre les cases cochées et non cochées...

Posté : 24 mai 2006, 13:17
par iruka
merci rw_cd

pour les declarations des variables postes et le tableau, je n ai mis qu un bout du code parce qu il ne me semble pas que le probleme vienne de la.


<input type="checkbox" name="choix[]"

en fait, je ne comprends pas a quoi serven les [] du name ? j ai vu que tout le monde en mettait mais je n ai pas compris quel en ete la fonction.

Posté : 24 mai 2006, 13:21
par rw_cd
>iruka


à fabriquer un tableau.un checkbox avec le même nom mais une donnée différente.avec un foreach, on récupére la paire.

Posté : 24 mai 2006, 13:23
par iruka
ne faudrait il pas que chaque Checkbox ait un nom différent ?
Ainsi dans ta boucle d'affichage tu pourrais définir un nom du style name="check".$i ou $i serait une variable qui s'incrémente au début de ton while.

En effet avec un nom unique pour chaque checkbox je ne vois pas comment tu pourrais reconnaitre les cases cochées et non cochées...

hum, en fait comme j ai mis la requete d effacement des donnees dans la boucle d affichage, je pensais que celle ci prendrait la valeur value=\"".$donnees['auto']."\" , ou auto est un int en autoincrement

Posté : 24 mai 2006, 13:24
par iruka
à fabriquer un tableau.un checkbox avec le même nom mais une donnée différente.avec un foreach, on récupére la paire.
donc il suffit que je mette ces crochets et le name va en plus prendre la valeur de value ?

Posté : 24 mai 2006, 13:25
par rw_cd
exact.ta variable i elle déclarée où?

Posté : 24 mai 2006, 13:30
par iruka
en fait pour le bout de code que j ai mis est vers la fin de la page et les variables sont declarees tout en haut mais peut etre que j ai effectivement oublie une variable ? tu penses a quelle variable ?

sinon j ai essaye comme ca :
<?php 
include ("connexion/mysql.inc.php");

if (isset($_POST['nom2']) && $i==1){

// on insère les informations du formulaire dans la table 
$sql = "INSERT INTO education(id,schoolname,graduation,schoollevel,educationmonth,educationyear) VALUES ('$id','$nomecole','$degree','$ecolelevel','$educationmois','$educationannee')";     
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 
}

//on affiche les resultats rentrees dans la table des que le bouton submit est appuye	
	 $sql2 = mysql_query("SELECT * FROM education WHERE id=$id ORDER BY educationyear DESC"); 
$total = mysql_num_rows($sql2);

	if ($total !=0) {
echo "<form name=\"delete\" method=\"post\" action=\"education.php\">";
	echo"<tr>";
           echo"<td colspan=\"6\" class=\"submessage\">";
              echo"  □ 追加されている学歴";
           echo" </td>";
       echo" </tr>";
       echo"<tr>";
           echo"<td class=\"header\" align=\"center\">年</td>";
           echo" <td class=\"header\" align=\"center\">月</td>";
         echo"  <td class=\"header\" align=\"center\" width=\"80%\">学校名</td>";
          echo"  <td class=\"header\" align=\"center\" width=\"10%\"><br/></td>";
          echo"  <td class=\"header\" align=\"center\" width=\"10%\"><br/></td>";
          echo"  <td class=\"header\" align=\"center\">";
         echo"   <input type=\"submit\" name=\"nom\" value=\"削除\">";
         echo"   </td>";
     echo"   </tr>";
	 
	while ($donnees = mysql_fetch_array($sql2) )
	{
    echo"    <tr>";
      echo"     <td class=\"input1\">";
            echo    $donnees['educationyear'];
        echo "</td>";
           echo" <td class=\"input1\">";
              echo    $donnees['educationmonth'];
        echo"    </td>";
        echo"    <td class=\"input1\">";
           echo      $donnees['schoolname'];
       echo"    </td>";
       echo"    <td class=\"input1\">";
              echo    $donnees['schoollevel'];
   
        echo"   </td>";
       echo"    <td class=\"input1\">";
           echo    $donnees['graduation'];
        echo"   </td>";
        echo"   <td class=\"input1\" align=\"center\">";
       echo"        <input type=\"checkbox\" name=\"aeffacer[]\" value=\"".$donnees['auto']."\" >";
	       echo"     </td>";
    echo"   </tr>";
      echo" </tr>";	
	echo"</form>";
	$effacer = (isset($_POST['aeffacer']))?$_POST['aeffacer']:null; 
if (!empty($effacer)) { 
foreach($effacer as $cle => $valeur) { 
    $sql2 = mysql_query("DELETE FROM education WHERE auto=".$valeur.""); 
	echo "DELETE FROM education WHERE auto=".$valeur."";}}
   } 
  } 
 
?>
mais ca ne marche pas plus...

Posté : 24 mai 2006, 13:30
par rw_cd
un exemple issu de mon site


<p>si guitare, votre instrument.plusieurs choix possibles :<br /><br />
<input type="checkbox" name="instru[]" value="fender" class="choix" /> Fender<br />
<input type="checkbox" name="instru[]" value="gibson" class="choix" /> Gibson<br />
<input type="checkbox" name="instru[]" value="Paul Reed Smith" class="choix" /> Paul Reed Smith<br />
<input type="checkbox" name="instru[]" value="charvel" class="choix" /> Charvel<br />
<input type="checkbox" name="instru[]" value="peavey" class="choix" /> Peavey<br />
<input type="checkbox" name="instru[]" value="ibanez" class="choix" /> Ibanez<br />
<input type="checkbox" name="instru[]" value="esp" class="choix" /> ESP<br />
<input type="checkbox" name="instru[]" value="godin" class="choix" /> Godin<br />
<input type="checkbox" name="instru[]" value="copie" class="choix" /> copie de marque<br />
<input type="checkbox" name="instru[]" value="autres" class="choix" /> autres
</p>

je récupére avec foeach

Posté : 24 mai 2006, 13:32
par rw_cd
les variables id, nomecole, degree, eductionannee

Posté : 24 mai 2006, 13:35
par iruka
en fait avec le code ci dessus, je peux enlever la premiere entree qu il trouve dans la table une par une mais pas la deuxieme et encore moins plusieurs a la fois...

du coup, le code ressemble a ton code si ce n est que mois les donnees du formulaire sont crees dans une boucle issue d une requete et j ai l impression que le probleme se situe par la...

l erreur que j obtiens :

DELETE FROM education WHERE auto=239 (ca c est juste un echo que je fais pour voir et normalement il devrait y avoir plusieurs requetes puisque plusieurs cases cochees)

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\program files\easyphp1-8\www\edu.php on line 243

la ligne 243 etant :

while ($donnees = mysql_fetch_array($sql2) )

Posté : 24 mai 2006, 13:36
par rw_cd
une erreur dans le foreach

Code : Tout sélectionner

name=\"aeffacer[]\"
et

Code : Tout sélectionner

foreach($effacer as $cle => $valeur) {

Posté : 24 mai 2006, 13:37
par iruka
id, nomecole, degree, eductionannee
y a pas de souci pour ca, elles sont declarees tout en haut de ma page et rentre dans la base sans souci.

Posté : 24 mai 2006, 13:40
par rw_cd
&& $i==1

celle là par contre...