DELETE et l'ordre d'éxecution de requêtes SQL

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : DELETE et l'ordre d'éxecution de requêtes SQL

Re: DELETE et l'ordre d'éxecution de requêtes SQL

par macgawel » 29 mars 2010, 16:34

PHP est un langage séquentiel.
Ca veut dire que les instructions sont traitées ligne à ligne.
Ca veut dire que normalement ton script fait le SELECT, récupère $titre, puis fais le DELETE.

Ca veut dire qu'il y a un bug :mrgreen:

=> Le temps du débuggage :
- Faire des echo de tes requêtes, pour les tester sous phpMyAdmin
- rajouter un or die ("Erreur lors de tel traitement SQL : ".mysql_error()); à la fin de chaque fonction mysql.
- Dans ton echo pour confirmer la suppression, rajoute le nombre de lignes affectées : mysql_affected_rows().

Re: DELETE et l'ordre d'éxecution de requêtes SQL

par Invité » 29 mars 2010, 16:11

En effet, Genova.
C'est une erreur de ma part au moment de simplifier mon code pour le poster ici.
Mais le problème ne vient pas de là.

Considérez que le code est bien :
   
$result_affiche = mysql_query("SELECT * FROM `actualites` WHERE id='".$_GET['id']."'");
$row_affiche = mysql_fetch_array($result_affiche);
Si je mets ma requête DELETE en commentaire, le titre s'affiche bien.
Dès que le DELETE est effectif, le titre ne s'affiche pas.

Re: DELETE et l'ordre d'éxecution de requêtes SQL

par Genova » 29 mars 2010, 15:41

   $result = mysql_query("SELECT * FROM `actualites` WHERE id='".$_GET['id']."'");
   $row_affiche = mysql_fetch_array($result_affiche);
Tu te trompes de variable ($result à la première ligne, $result_affiche à la seconde).

DELETE et l'ordre d'éxecution de requêtes SQL

par Invité » 29 mars 2010, 11:13

Bonjour à tous,

Je suis confronté à un phénomène quelque peu bizarre depuis vendredi.
Je cherche à en comprendre la cause.

Dans un module d'administration j'effectue une action destinée à supprimer un élément de ma base de données.
Petit plus facultatif, j'aurai souhaité qu'un message de confirmation indique "L'élément xxx a bien été supprimé".
Pour afficher xxx, j'effectue donc dans un premier temps une requête SELECT classique pour récupérer les informations de l'élément destiné à être supprimer. Je stocke le nom de l'élément dans une variable $titre, puis j'effectue ma requête DELETE pour supprimer mon élément.

Mais à ma grande surprise, $titre est vide. Comme si mon DELETE passait avant mon SELECT.
J'ai tenté de tourner mon code de différentes manières sans jamais arriver à, à la fois afficher le titre de l'élément, et supprimer ce même élément ensuite.

Si quelqu'un a des infos sur l'ordre des requêtes SQL dans un fichier PHP pour essayer de m'éclairer sur ce phénomène que je ne m'explique pas.

Code : Tout sélectionner

if(isset($_GET['id']) && is_numeric($_GET['id'])){ //vérifie que je lui passe bien une id numérique en paramètre d'url $result = mysql_query("SELECT * FROM `actualites` WHERE id='".$_GET['id']."'"); $row_affiche = mysql_fetch_array($result_affiche); $titre = $row_affiche['titre']; //sensé stocker le titre de l'élément à supprimer echo $titre; //sans exécuter le DELETE ci-dessous, il m'affiche bien le titre. Dès que le DELETE est actif, alors $titre retourne une chaîne vide. } $result_suppr = mysql_query("DELETE FROM `actualites` WHERE id='".$_GET['id']."'"); if ($result_suppr){ echo "L'élément '".$titre."' a bien été supprimé."; //Même constat que plus haut : sans exécuter le DELETE ci-dessus, il m'affiche bien le titre. Dès que le DELETE est actif, alors $titre retourne une chaîne vide. }else{ echo "Problème."; }
Pour info, je n'ai pas testé en ligne, je suis encore en local avec EasyPHP, est-ce que cela aurait une conséquence ? Je ne pense pas.

Merci d'avoir pris le temps de lire mon problème et merci pour votre contribution.

Pixéo.