Problème requete delete en php
Résolu
MimiWoOlf
Messages postés
22
Date d'inscription
Statut
Membre
Dernière intervention
-
le père -
le père -
Bonjour,
Voici mon code :
Ma requete ne revoie aucune erreur mais la suppression ne se fait pas et je ne comprends pas ( Je parle bine de la requete Delete en bas du code ). Je sature complètement donc si vous avez une idée je vous en remercie !
Voici mon code :
<form action="supr_sortie.php" method="post" > <SELECT name="sortie"> <?php $db = mysql_connect("localhost","root","")or die("erreur de connexion au serveur".mysql_error()); mysql_select_db("ccc",$db) or die ("erreur de connexion à la base ccc"); $requete =" select * from sortie"; $result = mysql_query($requete,$db) or die ("erreur dans la requete".mysql_error()); while ($ligne = mysql_fetch_array($result)) { ?> <OPTION VALUE="<?php echo " ".$ligne['N°Sortie']." ";?>"><?php echo " ".$ligne['N°Sortie']." ";?></OPTION> <?php } ?> </SELECT> <input type="submit" value="Supprimer" name="supr"> </form> <?php if(isset($_POST['supr'])) { echo "$_POST['sortie']"; /* Pour vérifier si je récupère bien la variable */ $num = $_POST['sortie'] ; echo "$num"; /* Pour vérifier si je récupère bien la variable */ $requete1 ="DELETE FROM 'sortie' WHERE 'N°Sortie' = '$num'"; mysql_query($requete1,$db) or die ("erreur dans la requete1".mysql_error()); } mysql_close($db); ?>
Ma requete ne revoie aucune erreur mais la suppression ne se fait pas et je ne comprends pas ( Je parle bine de la requete Delete en bas du code ). Je sature complètement donc si vous avez une idée je vous en remercie !
A voir également:
- Problème requete delete en php
- Hiberfil.sys delete - Guide
- Juste delete me - Guide
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- *#9900# delete dumpstate/logcat - Forum Samsung
7 réponses
ta requète est fausse, pourquoi tu met des apostrophes autour du nom de ta table et du nom de ton champ ????
en plus je crois que ta variable $num ne s'interprète pas et il manque la concaténation de chaine autour de ton $num.
et juste pour l'esthétique, met le code pour la connexion à la db en dehors de ton <select></select> (en html t'es pas sensé refermer une balise père tant que les balises fils ne sont pas fermé, donc ne prend pas cette mauvaise habitude avec le php). imagine une porte qui est la balise père et tes jambes sont la balise fils, là t'es en t'as fermé la balise père (la porte) sur la balise fils (tes jambes).
en plus je crois que ta variable $num ne s'interprète pas et il manque la concaténation de chaine autour de ton $num.
et juste pour l'esthétique, met le code pour la connexion à la db en dehors de ton <select></select> (en html t'es pas sensé refermer une balise père tant que les balises fils ne sont pas fermé, donc ne prend pas cette mauvaise habitude avec le php). imagine une porte qui est la balise père et tes jambes sont la balise fils, là t'es en t'as fermé la balise père (la porte) sur la balise fils (tes jambes).
Question bête : su tu fais un "SELECT * FROM sortie WHERE N°Sortie=$num", est-ce que tu récupères bien au moins un enregistrement ?
Autre suggestion : as-tu fait un echo $requete1 ?
Autre suggestion : as-tu fait un echo $requete1 ?
$requete2= " SELECT * FROM sortie WHERE 'N°Sortie'='$num' ";
Pourquoi $requete1 est-il devenu $requete2 ?
Et ne me dis pas que tu as obtenu ça en faisant un echo $requete1, tu t'e contenté de recopier ton code
=> Resource id #6 Je comprends pas le résultats
Ce résultat est normal, une requête renvoie une ressource.
Pour voir s'il y a quelque chose dedans, tu peux faire echo mysql_num_rows($result2);
Pourquoi $requete1 est-il devenu $requete2 ?
Et ne me dis pas que tu as obtenu ça en faisant un echo $requete1, tu t'e contenté de recopier ton code
=> Resource id #6 Je comprends pas le résultats
Ce résultat est normal, une requête renvoie une ressource.
Pour voir s'il y a quelque chose dedans, tu peux faire echo mysql_num_rows($result2);
Il est devenu 2 car j'ai recréée une requete pour tester ^^
echo mysql_num_rows($num); = >Warning: mysql_num_rows() expects parameter 1 to be resource, string given
Si je comprends bien ça trouve un caractère et comme N°String est un int dans ma base de donnée c'est pour ça que la ligne ne se supprime pas? Si c'est la cas comment changer le caractère en entier?
echo mysql_num_rows($num); = >Warning: mysql_num_rows() expects parameter 1 to be resource, string given
Si je comprends bien ça trouve un caractère et comme N°String est un int dans ma base de donnée c'est pour ça que la ligne ne se supprime pas? Si c'est la cas comment changer le caractère en entier?
1 - echo mysql_num_rows($num); tu as été trop rapide, j'avais corrigé en echo mysql_num_rows($result2);
2 - As-tu bien fait un echo de $requete2, et non pas une simple recopie de ta ligne de code ?
3 - Ça ne dérange pas mysql de comparer une colonne int avec un nombre écrit entre quotes, ce n'est pas le problème
2 - As-tu bien fait un echo de $requete2, et non pas une simple recopie de ta ligne de code ?
3 - Ça ne dérange pas mysql de comparer une colonne int avec un nombre écrit entre quotes, ce n'est pas le problème
$num = $_POST['sortie'] ; $requete1 ="DELETE FROM sortie WHERE 'N°Sortie' = ".$num." "; $requete2= "SELECT * FROM sortie WHERE 'N°Sortie'=$num"; $result1= mysql_query($requete1,$db) or die ("erreur dans la requete".mysql_error()); $result2= mysql_query($requete2,$db) or die ("erreur dans la requete".mysql_error()); echo "$requete2"; => renvoie SELECT * FROM sortie WHERE 'N°Sortie'=$num mysql_query($requete1,$db) or die ("erreur dans la requete1".mysql_error()); $test=mysql_num_rows($result2); echo "$test"; => Me renvoie 0
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
juste un ptit commentaire:
tu devrais éviter d'utiliser des caractère spéciaux/lettres avec accent dans le nom de tes colonnes
et pense a sortir de ta chaine quand tu ajoute la valeur d'une variable dans ta requète, c'est pas forcément grave si tu utilise la quote qui permet d'interpreter le php (faut juste pas se tromper, moi je me trompe toujours).
seulement si tu fait la même chose dans un autre language, ça ne passeras pas car la variable ne seras pas interprété par le compilateur ou l'interpreteur...
tu devrais éviter d'utiliser des caractère spéciaux/lettres avec accent dans le nom de tes colonnes
et pense a sortir de ta chaine quand tu ajoute la valeur d'une variable dans ta requète, c'est pas forcément grave si tu utilise la quote qui permet d'interpreter le php (faut juste pas se tromper, moi je me trompe toujours).
seulement si tu fait la même chose dans un autre language, ça ne passeras pas car la variable ne seras pas interprété par le compilateur ou l'interpreteur...
echo "$requete2"; => renvoie SELECT * FROM sortie WHERE 'N°Sortie'=$num
Ça j'avoue que je ne comprends pas du tout...$num devrait être remplacé par sa valeur dans une chaine entre doubles quotes.
Que dit un echo $num,$requete1?
Ça j'avoue que je ne comprends pas du tout...$num devrait être remplacé par sa valeur dans une chaine entre doubles quotes.
Que dit un echo $num,$requete1?
Dans ta première réponse, tu avais une virgule en trop entre 4 et DELETE, elle n'y est plus. Tu as une explication ?
Maintenant, tu as toujours un espace en trop entre 4 et DELETE, ce n'est pas normal.
Il n'est pas facile d'interpréter les informations que tu fournis si elles ne sont qu'à peu près bonnes : la moindre virgule compte en informatique.
Ceci dit, en exécutant la requête1 qui a bien un 4 à la place de $num, ça devrait marcher, non ?
Maintenant, tu as toujours un espace en trop entre 4 et DELETE, ce n'est pas normal.
Il n'est pas facile d'interpréter les informations que tu fournis si elles ne sont qu'à peu près bonnes : la moindre virgule compte en informatique.
Ceci dit, en exécutant la requête1 qui a bien un 4 à la place de $num, ça devrait marcher, non ?
Pour ma première réponse oui car j'ai modifié l'echo par echo "".$num.",".$requete"; tout simplement et sa revient au même =)
Oui ça devrait marcher, j'ai ajouté :
if ($result1)
{ echo " sortie supprimé " } et j'ai bien le sortie supprimé pourtant la ligne ne l'est pas dans ma base de donnée. ( Bdd sur phpmyadmin en innodb si sa peut aider)
Oui ça devrait marcher, j'ai ajouté :
if ($result1)
{ echo " sortie supprimé " } et j'ai bien le sortie supprimé pourtant la ligne ne l'est pas dans ma base de donnée. ( Bdd sur phpmyadmin en innodb si sa peut aider)
if ($result1) ne teste pas si quelque chose a été supprimé, mais seulement si la requête s'est bien déroulée. Et s'il n'y avait rien à supprimer, la requête s'est bien déroulée.
J'en reviens à ma remarque initiale : les caractères autour de N°Sortie dans ta requête sont-ils bien des accents graves (apostrophes inversés, touche 7) et surtout pas des simples quotes (touche 4)? Supprime-les.
J'en reviens à ma remarque initiale : les caractères autour de N°Sortie dans ta requête sont-ils bien des accents graves (apostrophes inversés, touche 7) et surtout pas des simples quotes (touche 4)? Supprime-les.
En espérant que c'est aussi le cas autour de 'N°Sortie', sinon effectivement ça explique le comportement
- $requete1 ="DELETE FROM sortie WHERE N°Sortie = ".$num." "; => la même chose
- $requete1 ="DELETE FROM sortie WHERE N°Sortie = .$num."; => idem
- $requete1 ="DELETE FROM sortie WHERE N°Sortie = '.$num.' "; => idem
- $requete1 ="DELETE FROM sortie WHERE N°Sortie = '$num' "; => idem
Et apparement aucun problème avec $num puisque je fais un echo pour vérifier si je le récupère bien. :(