checkbox permettant d effacer les donnees de db

iruka
Invité n'ayant pas de compte PHPfrance

24 mai 2006, 12:39

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

Eléphanteau du PHP | 14 Messages

24 mai 2006, 13:11

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

Mammouth du PHP | 1353 Messages

24 mai 2006, 13:14

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

iruka
Invité n'ayant pas de compte PHPfrance

24 mai 2006, 13:17

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.

Eléphanteau du PHP | 14 Messages

24 mai 2006, 13:21

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

iruka
Invité n'ayant pas de compte PHPfrance

24 mai 2006, 13:23

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

iruka
Invité n'ayant pas de compte PHPfrance

24 mai 2006, 13:24

à 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 ?

Eléphanteau du PHP | 14 Messages

24 mai 2006, 13:25

exact.ta variable i elle déclarée où?

iruka
Invité n'ayant pas de compte PHPfrance

24 mai 2006, 13:30

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

Eléphanteau du PHP | 14 Messages

24 mai 2006, 13:30

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

Eléphanteau du PHP | 14 Messages

24 mai 2006, 13:32

les variables id, nomecole, degree, eductionannee

iruka
Invité n'ayant pas de compte PHPfrance

24 mai 2006, 13:35

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

Eléphanteau du PHP | 14 Messages

24 mai 2006, 13:36

une erreur dans le foreach

Code : Tout sélectionner

name=\"aeffacer[]\"
et

Code : Tout sélectionner

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

iruka
Invité n'ayant pas de compte PHPfrance

24 mai 2006, 13:37

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.

Eléphanteau du PHP | 14 Messages

24 mai 2006, 13:40

&& $i==1

celle là par contre...