Récuperer des selections en checkbox avec une requete SQL

Récuperer des selections en checkbox avec une requete SQL - SQL/NoSQL - Programmation

Marsh Posté le 14-05-2006 à 13:13:54    

Bonjour, je suis en train de créer un forum en php et sql et j'ai un probleme.
Je souhaite pouvoir effacer des messages privés en les selectionant avec des checkbox.
Les checkbox sont créés en php. Chaques checkbox recoit pour nom l'id du mesage privé.
 
"
$requete="select id,auteur,message,date from mp where destinataire='$login' ORDER BY date DESC";
$resultat=mysql_query($requete);
while ($ligne=mysql_fetch_array($resultat))
{
 $auteur = $ligne['auteur'];
// $destinataire=$ligne['destinataire'];
 $id=$ligne['id'];
 $message=$ligne['message'];
 $date=$ligne['date'];
 $resultat3 = str_replace($smiley, $image, $message);
 
 
echo"<tr><td class=\"col1\">$auteur</td><td class=\"col2\">$resultat3</td><td class=\"col3\">$date</td><td class=\"col4\"><input type=\"checkbox\" name=\"$id\" value=\"checkbox\"></tr>
  <tr><td class=\"vide\" colspan=\"3\"></tr>";
}
"
 
je souhaite ensuite créer une requete qui va supprimer de la table MP les messages qui seront cochés.
 
Comment créer ma requete ?  
Merci.

Reply

Marsh Posté le 14-05-2006 à 13:13:54   

Reply

Marsh Posté le 14-05-2006 à 13:42:26    

tibere a écrit :

echo"<tr><td class=\"col1\">$auteur</td><td class=\"col2\">$resultat3</td><td class=\"col3\">$date</td><td class=\"col4\"><input type=\"checkbox\" name=\"$id\" value=\"checkbox\"></tr>
  <tr><td class=\"vide\" colspan=\"3\"></tr>";


C'est dommage, en mettant "name=$id" tu obtiens une variable impossible à retrouver ensuite. Tu peux pas, dans ton script php, retrouver les valeurs de cette variable car tu ne connais pas son nom (il est lui-même variable)
Il serait plus fin de mettre name="checkbox[]" => ce qui te donne un tableau et value="$id" comme cela tu obtiens l'identifiant dans chaque case du tableau "checkbox"
 
Ensuite, dans ton script php qui est appelé par ce formulaire et qui récupère donc les valeurs de ses input, tu fais
$tabID=$_POST["checkbox"] si le formulaire est en méthode "post"
$tabID=$_GET["checkbox"] si le formulaire est en méthode "get"
et tu récupères ton tableau dans "$tabID"
 
Ensuite, avec une simple boucle, tu balayes chaque id qui aura été sélectionnée
foreach ($tabID as $id)
{
     $query=sprintf("delete from mp where id=%d", $id);
     mysql_query($query);
}


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 14-05-2006 à 14:37:31    

Je vais essayer ca merci beaucoup :)
 
Bon j'ai essayer ca marche niquel :)
Merci beaucoup pour la rapidité de reponse


Message édité par tibere le 14-05-2006 à 15:31:22
Reply

Marsh Posté le 14-05-2006 à 15:56:30    

Une autre question si possible.
J'aimerai maintenant pouvoir supprimer tous les messages privés avec une condition.
A savoir tout supprimer de la table MP la ou le destinataire du mp est l'utilisateur en cours.
La requete suivant ne fonctionne pas :
$requete= "delete * from mp where destinataire='$_SESSION[login]";
$sql=mysql_query($requete) or die ('Erreur SQL !'.sql.'<br>'.mysql_error());
 
J'ai une erreur et je ne vois pas trop comment faire.
 
Voila l'ereur :
 
Notice: Use of undefined constant sql - assumed 'sql' in c:\program files\easyphp1-8\www\suprmp.php on line 28
Erreur SQL !sql
Table inconnue 'id' dans MULTI DELETE
 
 
Si quelqu'un peu m'aider merci :)

Reply

Marsh Posté le 14-05-2006 à 21:10:32    

tibere a écrit :

$requete= "delete * from mp where destinataire='$_SESSION[login]";


 
3 erreurs

  • C'est "delete from" et non "delete * from"
  • C'est $_SESSION["login"] et non $_SESSION[login]
  • on concatène des chaînes avec "." =>

$requete= "delete from mp where destinataire='".$_SESSION["login"]."'"
ou bien (ce que je préfère)
$requete=sprintf("delete from mp where destinataire='%s'", $_SESSION["login"]);
 
 

tibere a écrit :


$sql=mysql_query($requete) or die ('Erreur SQL !'.sql.'<br>'.mysql_error());
Notice: Use of undefined constant sql - assumed 'sql' in c:\program files\easyphp1-8\www\suprmp.php on line 28
Erreur SQL !sql


C'est quoi ce ".sql." ??? entre le "Erreur" et le "<br>" ???


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 14-05-2006 à 23:14:20    

Ok pour * je pensais que le delete marchais comme le select.
Il me semble que avec $_SESSION[login] il recupere la valeur stocké non ?
 
Tu peux m'expliquer ta methode de requete ?
Merci.
Heu pour le .sql. c'est l'explication de l'erreur non ?
 
Je viens de tester mais rien n'est supprimer.

Message cité 1 fois
Message édité par tibere le 14-05-2006 à 23:25:34
Reply

Marsh Posté le 15-05-2006 à 10:37:31    

tibere a écrit :

Ok pour * je pensais que le delete marchais comme le select.


Ben non
 

tibere a écrit :

Il me semble que avec $_SESSION[login] il recupere la valeur stocké non ?


oui, mais avec des guillemets autour de l'index => $_SESSION["login"]
 

tibere a écrit :

Tu peux m'expliquer ta methode de requete ?


De quelle méthode parles-tu ???
 

tibere a écrit :

Heu pour le .sql. c'est l'explication de l'erreur non ?


"chaine1".sql."chaine2" => tu concatènes à "chaine1" un truc nommé "sql" (kekcékça ???) auquel tu concatènes "chaine2"

  • Soit tu veux y mettre une variable => "chaine1".$sql."chaine2"
  • Soit tu veux y mettre une fonction => "chaine1".sql()."chaine2"

Personnellement je préfère le sprintf où on arrive à mieux contrôler ce qui est fixe de ce qui est expression
 
Sinon, la chaîne renvoyant la cause de l'erreur sql est donnée par la fonction "mysql_error()" => conclusion "sql" est totalement inconnu !!!!
 

tibere a écrit :

Je viens de tester mais rien n'est supprimer.


probablement à cause de [login] au lieu de ["login"]. Sinon essaye à la main
tu tapes "mysql ta_bdd" => tu entres en session sql et là tu tapes  

  • delete from machin where truc = chose;

puis

  • select * from machin;

histoire de voir si le delete fonctionne bien
 
Ensuite, dans ton script php, tu affiches ce fameux $_SESSION["login"] voir s'il a la bonne valeur. Bref, tu essayes un peu de te débrouiller par toi-même à débugger la cause de l'erreur...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 16-05-2006 à 13:09:24    

J'ai trouver la ligne de code :p
 
$requete=" DELETE from mp where destinataire= '$_SESSION[login] ' ";
 
$_SESSION["login"] dans une requete SQL ne marche pas, une erreur de code est retourner disant qu'une variable de type string est attendu.
 
Enfin bon mon probleme est resolu merci beaucoup :)

Reply

Sujets relatifs:

Leave a Replay

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