[php/sql] Vérifier si une entrée à insérer existe déjà dans la base

Vérifier si une entrée à insérer existe déjà dans la base [php/sql] - PHP - Programmation

Marsh Posté le 28-05-2005 à 14:34:27    

Bonjour à tous !  
J'ai un petit script avec deux champs : un "mot1" et un "mot2"
 
J'ai fait un formulaire pour que les visiteurs puissent envoyer "mot1" et "mot2" via $_POST['mot1'] et $_POST['mot2']
 
Maintenant, j'ai un problème :
 
Comment puis-je faire pour savoir si le mot1 entré est déjà dans la base ? ( pas besoin de savoir pour le mot2, il peut y avoir des duplicatas, ce n'est pa^s un problème ) mais pour le mot1 c'est important :)
 
Merci !


---------------
Hello hello super jello
Reply

Marsh Posté le 28-05-2005 à 14:34:27   

Reply

Marsh Posté le 28-05-2005 à 14:54:50    

ben un select ou le champ ou tu mets mot1 est égal à mot1.
 
Mais juste pour info, t'es dans la rubrique php, c'est un problème sql que tu as :D

Reply

Marsh Posté le 28-05-2005 à 15:17:59    

Pas forcément problème SQL c'est couplé à du PHP :)
Merci pour ta réponse, mais j'ai déjà essayé ..  
 
J'ai essayé ceci aussi :  
 

Code :
  1. $res = mysql_query ($req, $idConnexion);
  2.   $nb = mysql_num_row ($res);
  3.  
  4.   if($nb != 0)


 
En faisant une requete de select ou mot1 = $_POST['mot1'] mais il n'y a pas de réaction du script, les données sont quand même entrées :/
 
Quelqu'un a une idée ? :)
 
Merci


---------------
Hello hello super jello
Reply

Marsh Posté le 28-05-2005 à 15:28:36    

Montre nous la requête et le résultat de celle-ci.

Reply

Marsh Posté le 28-05-2005 à 15:38:24    

Bah dans ta table, tu mets ton champs contenant 'mot1' en unique

Reply

Marsh Posté le 28-05-2005 à 15:39:49    

Je vois pas d'autre moyen de faire une requete identique à ce que tu veux insérer.

Reply

Marsh Posté le 28-05-2005 à 16:10:22    

yoyo354 a écrit :

Montre nous la requête et le résultat de celle-ci.


 
 

Code :
  1. $req = "SELECT sms FROM aido_traduc WHERE sms = ".$_POST['MotSMS'];
  2.   $res = mysql_query ($req, $idConnexion);
  3.   $nb = mysql_num_row ($res);


 
Bin je ne connais pas son résultat, j'ai l'impression qu'il n'y a rien qui se passe .. Je vous C/C toute la partie du code en question :  
 

Code :
  1. if ($_POST['MotSMS'] && $_POST['MotFra'])
  2. {
  3.   $req = "SELECT sms FROM aido_traduc WHERE sms = ".$_POST['MotSMS'];
  4.   $res = mysql_query ($req, $idConnexion);
  5.   $nb = mysql_num_row ($res);
  6.  
  7.   if($nb != 0)
  8.   {
  9.   echo 'Le mot que vous avez entré est déjà présent dans la base de données !';
  10.   }
  11.  
  12.   else {
  13. $sms = AddSlashes (htmlspecialchars($_POST['MotSMS']));
  14. $fra = AddSlashes (htmlspecialchars($_POST['MotFra']));
  15.  
  16.   $requete = "INSERT INTO aido_traduc (id,sms,fra,actif) VALUES ('','$sms','$fra',0)";
  17. $result = mysql_query ($requete, $idConnexion);
  18.  if (!$result)
  19.    {
  20.     echo "<div align=\"center\">Erreur lors de l'envoi. Veuillez réitérer. Le mot proposé est peut-être déjà présent dans notre base de données.</div>";
  21.    }
  22.    else
  23.    {
  24.    echo '<div align="center"><br />Nous vous remercions de votre contribution à l\'amélioration du traducteur, votre mot sera vérifié par notre équipe et validé dans la journée<br /></div>';
  25.    }
  26.   }
  27. }


 
Vous pouvez voir ce que ça donne ici : http://www.aidoforum.com/traducteur-sms.php
 
Merci
 
GasPaRD77 : unique ou primaire ?


---------------
Hello hello super jello
Reply

Marsh Posté le 28-05-2005 à 16:11:22    

Teste aussi le retour de mysql_query au cas où il y ait un problème de connexion ou que la requète est erronée (retour FALSE en cas d'échec).

Reply

Marsh Posté le 28-05-2005 à 16:17:17    

Tentacle : Comment ( je débute pas mal en Php :/ ) un echo ?
 
Comment faire un retour false ?  
 
Gaspard : Impossible de la mettre en unique, il me trouve des duplicate entry de partout .. Il doit prendre des bouts de mots , deux lettres, et voir que ces deux lettres sont présentes dans un autre mot, non ?


---------------
Hello hello super jello
Reply

Marsh Posté le 28-05-2005 à 16:47:05    

oui ... en tout cas pour le moment :
du genre


if ($idConnexion = mysql_connect("server", "username", "password" ))
{
  if ($res = mysql_query($req, $idConnexion))
  {
    // Tes trucs à faire
  }  
  else
    echo mysql_error();
}
else
  echo mysql_error();


 
De toute façon ta méthode ne marchera pas dans tout les cas et il serait peut-être plus judicieux de trouver un moyen de déclarer ce champ comme unique. Ensuite après une insertion, tu peux utiliser mysql_affected_rows pour savoir si le mot a été inséré ou non (ce qui pourrait dire qu'il existait déjà)

Reply

Marsh Posté le 28-05-2005 à 16:47:05   

Reply

Marsh Posté le 28-05-2005 à 16:48:57    

Le idConnexion est déjà vérifié dans un common.php :)  
 
C'est surtout la requête que je devrais vérifier non ?  
 
Erf, je me sens perdu la .. :/


---------------
Hello hello super jello
Reply

Marsh Posté le 28-05-2005 à 16:50:17    

pouzy a écrit :

Tentacle : Comment ( je débute pas mal en Php :/ ) un echo ?
 
Comment faire un retour false ?  
 
Gaspard : Impossible de la mettre en unique, il me trouve des duplicate entry de partout .. Il doit prendre des bouts de mots , deux lettres, et voir que ces deux lettres sont présentes dans un autre mot, non ?


 
Bah non, une unicité c'est une unicité sur tout le mot, pas juste sur une partie, t'imagine une clé numérique qui ne pourrait pas aller plus loin que 0..9 ? :D
 
Sinon, puisque ton champs a l'air d'être un mot, colle le entre ' dans la requête :)

Reply

Marsh Posté le 28-05-2005 à 16:51:32    

oui alors au cas où.
 
Qu'est que tu as fais pour essayer la proposition de Gaspard ? Ca devrait fonction normalement. (il faut que les entrées soient identiques, et non juste des parties)

Reply

Marsh Posté le 28-05-2005 à 16:54:32    

Erf, je suis blamâble : faute de frappe ... j'avais oublié un "s" a mysql_num_rows .. Merci à tous, ça a l'air de fonctionner ;)


---------------
Hello hello super jello
Reply

Marsh Posté le 28-05-2005 à 18:17:25    

Tu aurais dû mettre unique à la creation de ta table, et comme ça tu aurais été sûr de ne pas avoir 2 fois la même entrée


Message édité par GaSPaRD77 le 28-05-2005 à 18:17:59
Reply

Sujets relatifs:

Leave a Replay

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