Page 1 sur 1

if ($nom==$donnees['nom'])

Posté : 01 mars 2006, 21:38
par gaet666
salut,
j'ai un petit probleme. Comme vous pouvez le voir dans le titre, mon but est de vérifier si une donnée est déja dans la table avant de l'ajouter.

Voici mon code:
if (isset($_POST["envoi"])) {
	$nom=$_POST["nom"];
	$url=$_POST["url"];
	$lien=$_POST["lien"];

$resultat = mysql_query("SELECT * FROM referer WHERE nom='$nom'");
while ($donnees = mysql_fetch_array($resultat)){
 
if ($nom==$donnees['nom']){
echo 'salut' ;
}
else{

	$sql= "INSERT INTO referer SET ";
	$sql.="nom=$nom, ";
	$sql.="nb_enregistrement='1', ";
	$sql.="referer='http://". $nom ."', ";
	$sql.="lien='$lien', ";
	$sql.="url='$url'";

	$res=mysql_query($sql);  
}
}	
}	
Je tente de vérifier si la variable $nom se trouve deja dans la table et si non, il faut l'ajouter. Mon code ne fonctionne pas, ca n'affiche pas mon "salut", donc le if ne fonctionne pas...

Que dois-je changer ???

Ciao et merci d'avance.

Gaetan

Re: if ($nom==$donnees['nom'])

Posté : 01 mars 2006, 21:43
par mario
$resultat = mysql_query("SELECT * FROM referer WHERE nom='$nom'");
Que dois-je changer ???
juste après celle ligne, tu peux utiliser mysql_num_rows pour connaitre le nombre de résultat.

si le nombre de résultat est égal à 1, tu affiches 'salut'
sinon tu fais l'INSERT.

Posté : 01 mars 2006, 21:51
par gaet666
SAlut,

Tu sais pas un peu plus m'éclairer sur le mysql_num_rows plz, je comprends pas trop le lien que tu m'a donné :?

Posté : 01 mars 2006, 21:58
par mario
exemple:
$resultat = mysql_query("SELECT * FROM referer WHERE nom='$nom'"); 

if (mysql_num_rows($resultat) === 1) {

   // SALUT

}
else
{
   // INSERT
}

Posté : 01 mars 2006, 22:04
par iclo
Il vaudrait mieux éviter de soliciter inutilement le serveur de base de donnée avec un select inutile.
Il vaut mieux définir dans la structure de la table le champ concerné comme unique. Et faire directement l'insertion en testant le code retourné par le "mysql_query()" pour voir si il y a une duplication de clé ou si tout c'est bien déroulé.
Tu trouveras plus d'info dans la doc, notamment dans la liste de code d'erreur. de mémoire c'est le code 1022

Posté : 01 mars 2006, 22:20
par gaet666
Salut,

Ca fait quoi si on solicite la bd ?

Sinon, voici le code que j'ai essayé et qui ne fonctionne pas :? :?
if (isset($_POST["envoi"])) {
	$nom=$_POST["nom"];
	$url=$_POST["url"];
	$lien=$_POST["lien"];

$resultat = mysql_query("SELECT * FROM referer WHERE nom='$nom'");

if (mysql_num_rows($resultat) == 1) { 
}
else
{ 

	$sql= "INSERT INTO referer SET ";
	$sql.="nom='$nom', ";
	$sql.="nb_enregistrement='1', ";
	$sql.="referer='http://". $nom ."', ";
	$sql.="lien='$lien', ";
	$sql.="url='$url'";

	$res=mysql_query($sql);  
}
}	
What's the problem ?

Ciao,

Gaetan

Posté : 01 mars 2006, 23:55
par iclo
Si tu sollicites la Db ? Tu as un serveur qui pédale pour rien. Bien-sûr un petit select inutile, ce n'est pas un drame, mais il faut quand même toujours avoir l'optimisation à l'esprit.
(Si tout le monde avait cette démarche, les hébergements grands publiques rameraient moins)
En soignant ses scripts, on arrive facilement à réduire de manière significative le nombre d'appel à la base de donnée.

Posté : 02 mars 2006, 00:12
par iclo
En gros ça donnerait :
$sql= "INSERT INTO referer SET ";
    $sql.="nom='$nom', ";
    $sql.="nb_enregistrement='1', ";
    $sql.="referer='http://". $nom ."', ";
    $sql.="lien='$lien', ";
    $sql.="url='$url'";

    $res=mysql_query($sql);  
 if (mysql_errno() == 0)
   print "Insertion Effectuée";
else {
   if (mysql_errno() == 1062)
       print "Duplication";
    else
       print "Autre erreur: ".mysql_error();
}


Quelques liens pour la route :
http://be.php.net/mysql_errno
http://dev.mysql.com/doc/refman/5.0/en/ ... erver.html