champ identique

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 : champ identique

par Ryle » 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

re

par knops » 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','')"); 
}  

par Ryle » 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 ;)

par jojolapine » 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:

champ identique

par knops » 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','')");
}