Problème requete delete en php

Résolu/Fermé
MimiWoOlf Messages postés 22 Date d'inscription mardi 3 janvier 2012 Statut Membre Dernière intervention 1 novembre 2014 - 10 janv. 2012 à 14:57
 le père - 10 janv. 2012 à 16:56
Bonjour,

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:

7 réponses

vordano Messages postés 1682 Date d'inscription mardi 12 juillet 2011 Statut Membre Dernière intervention 20 juillet 2012 316
Modifié par vordano le 10/01/2012 à 15:07
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).
0
Le requête n'a pas d'erreur de syntaxe, sinon il y aurait un message d'erreur. Il doit s'agir d'apostrophes inversées utilisées en mysql pour délimiter les noms de champs et de table, mais sur ce site on ne les distingue pas des simples quotes.


En espérant que c'est aussi le cas autour de 'N°Sortie', sinon effectivement ça explique le comportement
0
vordano Messages postés 1682 Date d'inscription mardi 12 juillet 2011 Statut Membre Dernière intervention 20 juillet 2012 316
10 janv. 2012 à 15:12
il n'y as peut être pas de problème de syntaxe pour 'sortie' et 'N°Sortie', mais en tout cas selon moi le $num n'est pas interpreté et est ajouté tel quel dans la requète (pas envi de tester ça, mais les guillemets empeche d'interpreter le php et le manque de concaténation ne provoque pas forcément une erreur).
0
MimiWoOlf Messages postés 22 Date d'inscription mardi 3 janvier 2012 Statut Membre Dernière intervention 1 novembre 2014 1
10 janv. 2012 à 15:21
- $requete1 ="DELETE FROM sortie WHERE N°Sortie =$num"; me renvoie => erreur dans la requete1Erreur de syntaxe près de '°Sortie = 1' à la ligne 1

- $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. :(
0
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 ?
0
MimiWoOlf Messages postés 22 Date d'inscription mardi 3 janvier 2012 Statut Membre Dernière intervention 1 novembre 2014 1
10 janv. 2012 à 15:30
- $requete2= " SELECT * FROM sortie WHERE 'N°Sortie'='$num' ";
-$result2= mysql_query($requete2,$db) or die ("erreur dans la requete2".mysql_error());
echo "$result2";

=> Resource id #6 Je comprends pas le résultats
0
$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);
0
MimiWoOlf Messages postés 22 Date d'inscription mardi 3 janvier 2012 Statut Membre Dernière intervention 1 novembre 2014 1
10 janv. 2012 à 15:45
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?
0
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
0
MimiWoOlf Messages postés 22 Date d'inscription mardi 3 janvier 2012 Statut Membre Dernière intervention 1 novembre 2014 1
Modifié par MimiWoOlf le 10/01/2012 à 16:07
$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   
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vordano Messages postés 1682 Date d'inscription mardi 12 juillet 2011 Statut Membre Dernière intervention 20 juillet 2012 316
10 janv. 2012 à 16:17
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...
0
MimiWoOlf Messages postés 22 Date d'inscription mardi 3 janvier 2012 Statut Membre Dernière intervention 1 novembre 2014 1
10 janv. 2012 à 16:25
Oui c'est ce que je pensais, j'ai regarder notamment pour N°Sortie mais aucune erreur ici. La prochaine fois je changerai quand même merci =)
0
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?
0
MimiWoOlf Messages postés 22 Date d'inscription mardi 3 janvier 2012 Statut Membre Dernière intervention 1 novembre 2014 1
10 janv. 2012 à 16:22
echo $num,$requete1; => 4 ,DELETE FROM sortie WHERE 'N°Sortie' = 4

4 car j'ai bien choisis la sortie avec comme identifiant pour N°Sortie 4 dans ma liste déroulante
0
Es-tu bien sûr que ça affiche 4 ,DELETE FROM sortie WHERE 'N°Sortie' = 4 ? Ce n'est pas possible. Tu as dû faire une erreur de recopie, fais un copier-coller.
0
MimiWoOlf Messages postés 22 Date d'inscription mardi 3 janvier 2012 Statut Membre Dernière intervention 1 novembre 2014 1
Modifié par MimiWoOlf le 10/01/2012 à 16:32
SI je t'assure, j'ai mis l'écho =echo $num,$requete1; j'ai sélectionné ma 4ème sortie et sur mon navigateur j'ai bien eu ça => 4 DELETE FROM sortie WHERE 'N°Sortie' = 4 c'est logique car $requete1 = DELETE FROM sortie WHERE 'N°Sortie' = $num et $num vaut 4 car j'ai cliqué sur la sortie n°4
0
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 ?
0
MimiWoOlf Messages postés 22 Date d'inscription mardi 3 janvier 2012 Statut Membre Dernière intervention 1 novembre 2014 1
10 janv. 2012 à 16:44
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)
0
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.
0