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

Eléphanteau du PHP | 41 Messages

01 mars 2006, 21:38

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

Mammouth du PHP | 768 Messages

01 mars 2006, 21:43

$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.
M A R I O
Si une patte de lapin porte bonheur, qu'a-t-il bien pu arriver au lapin ?

Eléphanteau du PHP | 41 Messages

01 mars 2006, 21:51

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é :?

Mammouth du PHP | 768 Messages

01 mars 2006, 21:58

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

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

   // SALUT

}
else
{
   // INSERT
}
M A R I O
Si une patte de lapin porte bonheur, qu'a-t-il bien pu arriver au lapin ?

ViPHP
ViPHP | 2144 Messages

01 mars 2006, 22:04

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

Eléphanteau du PHP | 41 Messages

01 mars 2006, 22:20

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

ViPHP
ViPHP | 2144 Messages

01 mars 2006, 23:55

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.

ViPHP
ViPHP | 2144 Messages

02 mars 2006, 00:12

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