Vérifier si un lien existe déjà dans une BDD
Bonjour,
Voilà je cherche comment faire pour vérifier si un lien entré dans un formulaire existe déjà ou non.
Je ne vois pas du tout qu'est-ce que je pourrais faire pour effectuer cela...
Une piste s'il vous plait ?
@+
le 17/02/2007 à 10:45
i M@N
Hello !
Comme ça p'tet :
<?php
/*on récupère notre variable $lien issue de $_POST et on l'initialise*/
if (isset($_POST['lien'])) $lien = $_POST['lien']; else $lien = '';
/*on prépare notre requête*/
$sql = 'SELECT liens from table WHERE lien="'.mysql_escape_string($lien).'"';
/*on exécute la requête*/
$result = mysql_query($sql);
/*on regarde si la requête renvoie un enregistrement (tulpe)*/
$tuple = mysql_num_rows($result);
/*si oui*/
if ($tuple) {
/*on n'ajoute pas $lien*/
}
/*si non*/
else {
/*on ajoute $lien*/
}
?>
@+...
One Love, One Heart, One Unity.
il me semble avoir vu il y a quelques temps un article qui expliquait que pour vérifier l'existence de qqch en DB il valait mieux utiliser un SELECT COUNT plutot que le num_rows de PHP.
Soit on teste par PHP soit par MYSQL.
Je ne sais pas ce que vous en pensez c'est juste pour soumettre cette idée :)
Le select count est à déconseillé si ta table est en innodb.
En myisam, peu importe la méthode.
Merci beaucoup I m@n pour ton exemple.
Par contre il serait conseillé de changer :
$sql = 'SELECT liens from table WHERE lien="'.mysql_escape_string($lien).'"';
par
$sql = 'SELECT liens from table WHERE lien="'.mysql_real_escape_string($lien).'"';[code]
Merci beaucoup les gars !
@+
C'est surement mieux, mais ca te coutera deux requetes SQL.
Des que tu lances mysql_real_escape_string n'importe ou dans ton code, ca fait appel à mysql pour savoir ce qui doit etre escapé en fonction de l'encodage. Bref, c'est plus couteux.
En conséquences, pour utiliser mysql_real_escape_string, il faut que ta connexion mysql soit déja établi sinon tu te manges une erreur alors qu'avec mysql_escape_string non.
Apres, c'est sur, la fonction real donne de meilleurs résultats, mais c'est pas forcemment la plus pratique à utiliser (chez moi, par exemple, quand j'ecris ma requete SQL, ma connexion à MySQL n'est pas encore faite, ma connexion se fait au moment ou je lance la query dans une fonction SQL : bref, je ne peux pas utiliser cette fonction à moins de faire des trucs crades).
http://www.clubic.com/forum/quelle-difference-entre-ces-3-methodes-t319314.html
apparemment select count utilise moins de ressources et c'est surtout pour une question de compatibilité avec les autres DB.
a vous de juger. Mais on est ok sur le fait que le résultat est identique.
Oui, en MyISAM, c'est beaucoup plus rapide.
Pas en InnoDB.
oui mais personnellement, la plupart des sites avec lesquels je bossent sont en MyISAM. Toi qui bosse en hébergement dans quels cas est ce que tu vois du INNODB stp ?
Quand tu as besoin de faire du transactionnel.
En gros, tu as besoin d'innod dès lors que tu fais une action sur plusieures tables via un seul script.
Grace à innodb, tu lances une transaction.
Tu fais ton insert dans la table 1.
Si ton insert plante, tu rollback la transation (et la, tu es sur que ton insert n'a pas été fait), sinon tu fais un autre insert dans la table 2. Si cette deuxieme requete fait du caca, tu rollback la transation (et la, en rollbackant, ce sont la requete 2 ET la requete 1 qui sont annulées), sinon, tu la commit.
Bref, ca permet de garder une base intègre.
Le cas typique d'utilisation : pour un forum, pour un nouveau sujet, souvent tu fais un insert dans une table sujet et une table message. En innodb, tu es assuré à 100% de ne pas avoir un sujet sans message.
Ecrire un message
Votre message vient d'être créé avec succès.
BB-Code
Pour insérer une URL clickable
Pour insérer une adresse E-mail
Pour annoter
Pour écrire du code
Pour faire un lien vers une fonction PHP
Pour écrire du texte préformaté
Pour écrire du texte en gras
Pour écrire du texte en italique
Pour écrire du texte souligné
Pour écrire du texte barré
Pour écrire un titre principal
Pour écrire un titre secondaire
Pour écrire une liste
Smiley
:bond:
:boxe:
:bsmile:
:bump:
:clap:
:coeur:
:cool:
:cry:
:eek:
:evil:
:fleur:
:fou2:
:fou:
:grin:
:grrr:
:hammer:
:hippy:
:hum:
:idee2:
:idee:
:kdo:
:king:
:ko:
:lol:
:love2:
:love:
:mad:
:maitre:
:noel:
:oops:
:raa:
:razz:
:roll:
:sad:
:skull:
:smile:
:timide:
:trink:
:vice:
:vomi:
:wink:
:zzz: