requete imbriquée insoluble !!!

Nouveau WRInaute
Bonsoir à tous,

J'ai problème insoluble pour mon petit niveau.
Je m'explique, j'ai une table avec un champ qui contient des id séparés par un caractère et une deuxième table avec des enregistrements qui ont un id qui peut être identique à ceux du résultat de la première requète.
Ma recherche c'est de lister les résultats uniques

première requete
$req1=mysql_db_query($db,"SELECT liste FROM table1 WHERE id1='$_GET[id1]'");
$res1=mysql_fetch_assoc($req1);
$resultat1=explode('|', $res1['liste']);

J'obtiens bien la liste des id dans un tableau.
Ensuite je souhaite dans une autre table trouver les id différent du premier résultat.

$req2=mysql_db_query($db,"SELECT id2,nom FROM table2 WHERE NOT IN $resultat1");
while($res2=mysql_fetch_assoc($req2))
{echo $id";}

La deuxieme requete n'est pas bonne mais c'est pour vous montrer ou je veux en venir.

J'espère avoir été assez clair pour que vous compreniez.


Merci d'avance à ceux qui répondront.

Patrick
 
WRInaute impliqué
En fesant
$req2=mysql_db_query($db,"SELECT id2,nom FROM table2 WHERE id2 != $resultat1");
ca marcherait pas ?
 
Nouveau WRInaute
Non ça peut pas marcher car $resultat1 est un tableau avec plusieurs id

$resultat1[0]=1;
$resultat1[1]=3;
$resultat1[2]=7;
$resultat1[3]=24;
etc...
 
WRInaute occasionnel
et sinon peut etre ca :


Code:
$req1=mysql_db_query($db,"SELECT liste FROM table1 WHERE id1='$_GET[id1]'"); 
$res1=mysql_fetch_assoc($req1); 
$resultat1=str_replace("|", ",", $res1['liste']); 

$req2=mysql_db_query($db,"SELECT id2,nom FROM table2 WHERE id2 NOT IN ('$resultat1')"); 
while($res2=mysql_fetch_assoc($req2)) 
{echo $id";}
 
Nouveau WRInaute
Super ça marche ;-)

Voici le code corrigé

$req1=mysql_db_query($db,"SELECT liste FROM table1 WHERE id1='$_GET[id1]'");
$res1=mysql_fetch_assoc($req1);
$resultat1=str_replace("|", ",", $res1['liste']);

$req2=mysql_db_query($db,"SELECT id2,nom FROM table2 WHERE id2 NOT IN ($resultat1)");
while($res2=mysql_fetch_assoc($req2))
{echo $res2[nom];}

Merci pour ton aide et viva corsica
 
WRInaute passionné
Code:
WHERE id1='$_GET[id1]'");

ça c'est une faute professionnelle grave

rog
 
WRInaute discret
DoubleClic a dit:
Moi je ne suis pas au top, mais si tu le dis, je veux bien une explication.

Merci

Prenons ta requête:
Code:
"SELECT liste FROM table1 WHERE id1='$_GET[id1]'"

Imaginons qu'un utilisateur tape ?1' OR '1'='1 à la fin de l'url de ton script

la variable $_GET[id1] va contenir
Code:
1' OR '1'='1

Ta requête va devenir
Code:
"SELECT liste FROM table1 WHERE id1='1' OR '1'='1'"

Et ça va te retourner toutes les lignes de ta table...

Probablement qu'il n'y aura aucune conséquences et probablement que le magic_quotes sera activé sur ton serveur ce qui va empêcher de réaliser une telle requête, mais même avec ça, tu peux pas prendre une variable brute et la mettre dans ta requête.

La règle de sécurité #1 en PHP: ne JAMAIS faire confiance à du contenu externe.
 
Nouveau WRInaute
OK, j'ai compris mais vaut-il mieux utiliser des variables POST ou des variables enregistrée en session ?
 
WRInaute discret
tu peux utiliser GET mais il faut que tu traite ta variable avant de l'utiliser dans une requête mysql.
Par exemple tu peux verifier que id est bien numeric (is_numeric), qu'il n'est pas vide (empty).
Pour finir un coup de mysql_real_espace_string sur ta variable et tu es tranquille!
 
Discussions similaires
Haut