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

Répondre
Also know as
Also know as
Déconnecté
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
i M@N
Déconnecté
One Love, One Heart, One Unity.
Hello !

Comme ça p'tet :
  1. <?php  
  2. /*on récupère notre variable $lien issue de $_POST et on l'initialise*/  
  3. if (isset($_POST['lien'])) $lien = $_POST['lien']; else $lien = '';  
  4. /*on prépare notre requête*/  
  5.  
  6. $sql = 'SELECT liens from table WHERE lien="'.mysql_escape_string($lien).'"';  
  7.  
  8. /*on exécute la requête*/  
  9.  
  10. $result = mysql_query($sql);  
  11. /*on regarde si la requête renvoie un enregistrement (tulpe)*/  
  12.  
  13. $tuple = mysql_num_rows($result);  
  14.  
  15. /*si oui*/  
  16.  
  17. if ($tuple) {  
  18.  
  19. /*on n'ajoute pas $lien*/  
  20.  
  21. }  
  22.  
  23. /*si non*/  
  24.  
  25. else {  
  26. /*on ajoute $lien*/  
  27. }  
  28. ?> 


@+...
jocker
jocker
Déconnecté
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
LA GLOBULE
Déconnecté
111 111 111 x 111 111 111 = 12 345 678 987 654 321
Le select count est à déconseillé si ta table est en innodb.
En myisam, peu importe la méthode.
Also know as
Also know as
Déconnecté
Merci beaucoup I m@n pour ton exemple.

Par contre il serait conseillé de changer :

  1. $sql = 'SELECT liens from table WHERE lien="'.mysql_escape_string($lien).'"'; 


par

[code]$sql = 'SELECT liens from table WHERE lien="'.mysql_real_escape_string($lien).'"';[code]

Merci beaucoup les gars !

@+
LA GLOBULE
LA GLOBULE
Déconnecté
111 111 111 x 111 111 111 = 12 345 678 987 654 321
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
jocker
Déconnecté
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.
LA GLOBULE
LA GLOBULE
Déconnecté
111 111 111 x 111 111 111 = 12 345 678 987 654 321
Oui, en MyISAM, c'est beaucoup plus rapide.
Pas en InnoDB.
jocker
jocker
Déconnecté
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
LA GLOBULE
Déconnecté
111 111 111 x 111 111 111 = 12 345 678 987 654 321
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
Accès rapide :

Remonter Remonter
L'éditeur javascript - CSS - Gentoo - Tutoriaux PHP - Tutoriels PHP - Php - Breizh Blog