champ identique

Eléphant du PHP | 113 Messages

04 sept. 2006, 15:05

Bonjour, voila sur une de mes pages j'ai un formulaire de commentaires et pour qu'il n'y est pas 2 posts avec le même titre j'ai fait ca ( script en dessous) donc je lance une requéte qui cherche si il y'a une titre identique mais ca marche pas il insére toujours.
$query="SELECT * FROM ma_table WHERE titre LIKE '$titre'" or die(mysql_error());

$result=@mysql_query($query);
$num=@mysql_num_rows($result);


if($num ==1 )
   {
echo "kkechose";
$result=@mysql_query($query);
} 
 
 else 
   { 
mysql_query("INSERT INTO ma_table VALUES('', '$pseudo', '$titre', '$email', '$comment', '$date','')");
}

ViPHP
ViPHP | 3607 Messages

04 sept. 2006, 15:13

Il y a plusieurs "coquilles" dans ton code,
Premièrement, je te conseil fortement d'éviter les @ durant les dévellopements, car ils cachent les erreurs éventuelles et donc tu ne peux pas les localisé ensuite, deuxièmement, le "or die(mysql_error())" ne sert à rien içi, c'est au moment d'éxécuter la requête qu'il faut le mettre, c'est à dire après mysl_query().
Commence déja par modifier tout ça et revient nous voir :wink:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

04 sept. 2006, 15:20

Enlève les @ devant tes appels aux fonction, tu ne peux pas savoir s'il y a des erreurs ou non. Ajoute par contre des "or die (mysql_error())" pour savoir s'il n'y a pas eu d'erreur sql...

Juste quelques remarques :

- Sans les pourcentages "%" pour échapper les parties inconnues de la chaines, la commande LIKE n'a aucun intérêt, et il vaut mieux utiliser le égal "=" :)
- Si $num est supérieur à 1 (pour une raison ou pour une autre), tu vas aller dans le else et faire l'insert malgré tout.
- Pourquoi refaire le mysql_query une fois dans le if puisque tu as déjà récupéré le résultat avant ? Par ailleurs si tu n'utilises pas les données, fais plutôt un " SELECT COUNT(*) " pour savoir combien il y en a :)

Edit : Damned ! I've been grilled ;)

Eléphant du PHP | 113 Messages

04 sept. 2006, 15:47

j'ai corrigé comme ceci mais ca m'affiche ce message d'erreur:


Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource

en plus il m'affiche le echo du if toujours....!!!
<?php $query="SELECT * FROM ma_table WHERE titre LIKE '%$titre%'" ; 

$result=mysql_query($query); 
$num=mysql_num_rows($result); 


if($num =1 ) 
   { 
echo "kkechose"; 
$result=@mysql_query($query); 
}  
  
 else  
   {  
mysql_query("INSERT INTO ma_table VALUES('', '$pseudo', '$titre', '$email', '$comment', '$date','')"); 
}  

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

04 sept. 2006, 16:00

D'où l'importance de ne pas mettre de @ :)

Ajoute également un or die : mysql_query(...) or die (mysql_error());
Cela te permettra de voir s'il n'y a pas une erreur dans ton code SQL (ta table s'appelle-t-elle vraiment "ma_table" ? :))

Par ailleurs tu as perdu un égal dans le if(), du coup c'est comme si tu affectais la valeur (ce qui sera toujours vrai) au lieu de la comparer