Vérifier si un id existe avant un DELETE?

Vérifier si un id existe avant un DELETE? - PHP - Programmation

Marsh Posté le 21-07-2003 à 15:31:54    

Salut all,
 
bah voilà, j'aurais voulu savoir comment vérifier si un id existe avant de faire un requête SQL :
 
Exemple :
$sql = DELETE FROM $tbl WHERE id='$id'
 
et quand l'id n'existe pas, bah il s'en fou, il me retourne "supprimer avec succes" (alors que quedal à été suprimer).
 
Voilà :p , et merci d'avance.


Message édité par Maxime le 24-07-2003 à 00:51:13
Reply

Marsh Posté le 21-07-2003 à 15:31:54   

Reply

Marsh Posté le 21-07-2003 à 15:39:10    

Maxime a écrit :

Salut all,
 
bah voilà, j'aurais voulu savoir comment vérifier si un id existe avant de faire un requête SQL :
 
Exemple :
$sql = DELETE FROM $tbl WHERE id='$id'
 
et quand l'id n'existe pas, bah il s'en fou, il me retourne "supprimer avec succes" (alors que quedal à été suprimer).
 
Voilà :p , et merci d'avance.


mysql_info, mysql_affected_rows en fonctions php ca devrait t'aider ....
Et ca m'etonnerait que mysql te retourne un code positif si aucune ligne n'a ete touchée, donc mysql_errno devrait te servir.   Enfin, dans la norme sql, si peu respectée par mysql, y'a un code d'erreur (plutot de retour disons) suite à une requête, quelque soit le résultat, avec un code spécifique pour aucune ligne touchée


---------------
Linux registered user #352556
Reply

Marsh Posté le 21-07-2003 à 15:49:00    

donc en gros je fait
 

Code :
  1. $sql = "DELETE FROM $tbl WHERE id='$id'";
  2. $req = @mysql_query($sql);
  3. $res = @mysql_affected_rows($req);
  4. if (empty($res))
  5. {
  6.   echo "Movais ID";
  7. }
  8. else
  9. {
  10.   echo "adieu $id";
  11. }


 
?  :D  
 
sinon cest quoi la difference entre mysql_affected_rows() et mysql_num_rows() ?


Message édité par Maxime le 21-07-2003 à 15:49:33
Reply

Marsh Posté le 21-07-2003 à 15:54:53    

Maxime a écrit :

donc en gros je fait
 

Code :
  1. $sql = "DELETE FROM $tbl WHERE id='$id'";
  2. $req = @mysql_query($sql);
  3. $res = @mysql_affected_rows($req);
  4. if (empty($res))
  5. {
  6.   echo "Movais ID";
  7. }
  8. else
  9. {
  10.   echo "adieu $id";
  11. }


 
?  :D  
 
sinon cest quoi la difference entre mysql_affected_rows() et mysql_num_rows() ?

Le premier donne le nombre de lignes modifié par la requête (insert, update) tandis que le second donne le nombre de valeurs retournées par la requête (select).

Reply

Marsh Posté le 21-07-2003 à 15:56:39    

Maxime a écrit :

donc en gros je fait
 

Code :
  1. $sql = "DELETE FROM $tbl WHERE id='$id'";
  2. $req = @mysql_query($sql);
  3. $res = @mysql_affected_rows($req);
  4. if (empty($res))
  5. {
  6.   echo "Movais ID";
  7. }
  8. else
  9. {
  10.   echo "adieu $id";
  11. }


?  :D  
sinon cest quoi la difference entre mysql_affected_rows() et mysql_num_rows() ?


 
la doc sur php.net pour t'aider. Bon en gros et c le principal num_rows ca marche qu'avec select, affected_rows c pour insert, update, delete. Sachant que si y'a pas de clause where, affected_rows te renvoie zero. C'est pour cela que je t'ai parlé de code de retour suite à un ordre sql. A ce nivo la, la doc mysql devrait etre parlante (ca fe un moment que j'ai plonge la dedans dc jpeux pas plus t'aider pour le code si aucune ligne affectée, mais il me semble que c 100). Pour ton code, faut tester avec des petits echos si ca marche. A priori, je dirais que ca passe.
 
 


---------------
Linux registered user #352556
Reply

Marsh Posté le 21-07-2003 à 16:01:41    

donc dans la théorie, avec ce que j'ai écrit, si l'id nest pas bon ( donc rien na été affecter ), ca me revoie 0
 
sinon je testerais avec un
$erreur = mysql_errno();
echo $erreur;
 
Merci pour votre aide  :hello:  :hello:  :jap:  
 
PS : je peut pas tester ici, pour ca je dit pas si ca marche ou pas  :o  :D

Reply

Marsh Posté le 21-07-2003 à 16:02:14    

omega2 a écrit :

Le premier donne le nombre de lignes modifié par la requête (insert, update) tandis que le second donne le nombre de valeurs retournées par la requête (select).


 :pfff:  
attention, num_rows retourne aussi un nombre de lignes. Tout dépend si tu considères une "valeur" comme étant un champ d'une table de ta bd ou une ligne ...


---------------
Linux registered user #352556
Reply

Marsh Posté le 21-07-2003 à 16:03:19    

Maxime a écrit :

donc dans la théorie, avec ce que j'ai écrit, si l'id nest pas bon ( donc rien na été affecter ), ca me revoie 0
 
sinon je testerais avec un
$erreur = mysql_errno();
echo $erreur;
 
Merci pour votre aide  :hello:  :hello:  :jap:  
 
PS : je peut pas tester ici, pour ca je dit pas si ca marche ou pas  :o  :D  


Ah mais de rien. C kler, essayes ta requete sur une valeur dont tu sais qu'aucune ligne sera affectee et tu auras le code d'erreur.


---------------
Linux registered user #352556
Reply

Marsh Posté le 21-07-2003 à 16:07:17    

Je doit format, pour ca je peut pas tester :o
Bon allé a dans 1-2 jours pour le rapport :D
 
Merci encore :hello:


Message édité par Maxime le 23-07-2003 à 23:18:13
Reply

Marsh Posté le 23-07-2003 à 23:15:34    

bon ca ne fonctionne pas :/
j'ai fait :
 

Code :
  1. $sql = "DELETE FROM $tbl WHERE id='$id'";
  2. $req = @mysql_query($sql);
  3. $res = @mysql_num_rows($req);
  4. $rff = @mysql_affected_rows($req);
  5. $erreur = mysql_errno();
  6. echo $erreur;
  7. echo $res;
  8. echo $rff;


 
$erreur reste à 0 et $res et $rff dont vide (que l'id soit valid ou inéxistant) :/


Message édité par Maxime le 23-07-2003 à 23:18:46
Reply

Marsh Posté le 23-07-2003 à 23:15:34   

Reply

Marsh Posté le 23-07-2003 à 23:29:20    

Maxime a écrit :

bon ca ne fonctionne pas :/
j'ai fait :
 

Code :
  1. $sql = "DELETE FROM $tbl WHERE id='$id'";
  2. $req = @mysql_query($sql);
  3. $res = @mysql_num_rows($req);
  4. $rff = @mysql_affected_rows($req);
  5. $erreur = mysql_errno();
  6. echo $erreur;
  7. echo $res;
  8. echo $rff;


 
$erreur reste à 0 et $res et $rff dont vide (que l'id soit valid ou inéxistant) :/

Heu, comment tu sais que c'est $erreur qu'est a zéro?
Ca pourait très bien être n'importe laquelle des trois variables vu que les deux autres seraient vide.  ;)
Met un retour a la ligne a la fin de chaque echo comme ça, tu sauras vraiment d'où viens le 0. ;)

Reply

Marsh Posté le 23-07-2003 à 23:33:05    

Si id est un entier, ne le met pas entre ' ' ;)  
 
Sinon, c'est normal que tu n'ais pas d'erreur puisque ta requête est bonne. Il y a une différence entre une requête incorrecte et une requête correcte qui ne fait rien :)

Reply

Marsh Posté le 23-07-2003 à 23:37:02    

omega2 a écrit :

Heu, comment tu sais que c'est $erreur qu'est a zéro?
Ca pourait très bien être n'importe laquelle des trois variables vu que les deux autres seraient vide.  ;)
Met un retour a la ligne a la fin de chaque echo comme ça, tu sauras vraiment d'où viens le 0. ;)


 
je vien de faire
 

Code :
  1. echo "erreur : $erreur";
  2.     echo "<br />";
  3.     echo "res : $res";
  4.     echo "<br />";
  5.     echo "rff : $rff";


 
Et je puis donc confirmer que c'est bien erreur qui reste à 0 :D

Reply

Marsh Posté le 23-07-2003 à 23:37:28    

mrBebert a écrit :

Si id est un entier, ne le met pas entre ' ' ;)  
 
Sinon, c'est normal que tu n'ais pas d'erreur puisque ta requête est bonne. Il y a une différence entre une requête incorrecte et une requête correcte qui ne fait rien :)  


 
c'est les '' qui font que ca foire?

Reply

Marsh Posté le 23-07-2003 à 23:40:51    

Au faite, ceci fonctionne nikel :

Code :
  1. $sql = "SELECT * FROM $tbl WHERE id='$id'";
  2. $req = @mysql_query($sql);
  3. $res = @mysql_num_rows($req);
  4. if (empty($res))
  5. {
  6.   echo "Mauvais ID";
  7. }
  8. else
  9. {
  10. // affichage
  11. }


Message édité par Maxime le 25-07-2003 à 19:59:14
Reply

Marsh Posté le 23-07-2003 à 23:44:21    

Maxime a écrit :

c'est les '' qui font que ca foire?

Je sais pas mais dans le doute ... :D  
En tout cas, sans les quotes, ca marche c'est sur :)  
(et au moins, ca te fait une erreur si ta variable $id n'est pas initialisée)

Reply

Marsh Posté le 23-07-2003 à 23:49:22    

mrBebert a écrit :

Je sais pas mais dans le doute ... :D  
En tout cas, sans les quotes, ca marche c'est sur :)  
(et au moins, ca te fait une erreur si ta variable $id n'est pas initialisée)


Je confirme que ca ne change rien :D

Reply

Marsh Posté le 25-07-2003 à 19:03:38    

up :bounce:

Reply

Marsh Posté le 25-07-2003 à 19:07:23    

Pourquoi "UP!"?
Le problème n'est toujous pas réglé?

Reply

Marsh Posté le 25-07-2003 à 19:58:48    

bah nan c pas regler  :heink:

Reply

Sujets relatifs:

Leave a Replay

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