Vérifier si un lien existe déjà dans une BDD

Répondre
Also know as
le 16/02/2007 à 21:35
Also know as
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 ?

@+
i M@N
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.
jocker
le 17/02/2007 à 11:08
jocker
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 :)
LA GLOBULE
le 17/02/2007 à 11:53
LA GLOBULE
Le select count est à déconseillé si ta table est en innodb.
En myisam, peu importe la méthode.
Also know as
le 17/02/2007 à 11:56
Also know as
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 !

@+
LA GLOBULE
le 17/02/2007 à 12:00
LA GLOBULE
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).
jocker
le 17/02/2007 à 14:42
jocker
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.
jocker
le 18/02/2007 à 12:21
jocker
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 ?
LA GLOBULE
le 18/02/2007 à 12:28
LA GLOBULE
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.
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours