control doublons ne marche pas.

Eléphanteau du PHP | 23 Messages

18 déc. 2011, 19:02

bonjour ;)
j'ai un petit script qui me permet d'alimenter deux tables en méme temps.
le probléme qu je rencontre c'est que avant d'accepter l'insertion je voudrais verifier si il n'y a pas de doublon a partir du file_name
mais pour l'instant cela ne marche pas ,rien ne m'empéche de reposter les méme liens.
voici mon script si quelqu'un a une idée de mon erreur.
petite precision je débute ^^.
 mysql_select_db("Base de donnée" );
	 { 				
$nom = $_SESSION ['username'];
// on regarde dans la table lien si le nom du fichier existe déjà 
$sql = "SELECT id FROM liens WHERE file_name='$filename'";
$req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
$res= mysql_num_rows($req);

if($res!=0)  // l'url existe déjà, on affiche un message d'erreur
    {
    echo '<font color="red">Désolé, mais ce fichier existe déjà dans notre base.</font>';
    }

  // L'url n'existe pas, on insère d'abord les infos dans TABLES "liens".
     
$sql="INSERT INTO liens (id_lie, user_name, user_link, file_name, file_size)VALUES('',  '$nom', '$link', '$filename', '$filesize')";
 // on récupère l'id_lie qui vient d'être généré 
 mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 
$id_lie = mysql_insert_id(); 
 // puis on insère les infos dans la table post_liens
$sql="INSERT INTO  post_liens (id_lie, user_name, user_link, file_name, nb_post_link, date)VALUES('$id_lie', '$nom', '$link', '$filename', '', '')"; 
 
mysql_query($sql) or die(mysql_error());
 mysql_close();
structure de la table liens

Image

structure de la table post_liens

Image

merci a vous d'avance ;)

Mammouth du PHP | 672 Messages

20 déc. 2011, 18:41

Bonjour.

Le problème vient donc de la partie qui vérifie l'existence dans ta table :
 $sql = "SELECT id FROM liens WHERE file_name='$filename'";
$req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
$res= mysql_num_rows($req);
if($res!=0)  // l'url existe déjà, on affiche un message d'erreur {
    echo '<font color="red">Désolé, mais ce fichier existe déjà dans notre base.</font>';
}
1. En regardant la suite, je vois que tu utilises id_lie, et pas id...
Il n'y a pas un problème ?

2. Affiche la requête, histoire de voir la tête qu'elle a...

3. Tu ne pourrais pas utiliser les fonctionnalités de ton SGBD ?
- En général, il y a moyen de déclarer un champ comme unique :roll:
=> Une fois fait, tu n'as plus qu'à passer la requête d'insertion dans ta première table, et gérer l'éventuel erreur (en cas de violation de la contrainte d'unicité)...

- Je ne sais pas à quoi correspondent tes deux tables, mais tu ne devrais pas avoir à "recopier" les informations comme ça...
En clair, le modèle relationnel est a priori foireux. Pourquoi ne pas faire une seule table avec l'ensemble des infos ?