requete imbriquée insoluble !!!

DoubleClic
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 12
Inscription: 14 Jan 2007

requete imbriquée insoluble !!!

Message le Dim Mai 13, 2007 23:39

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


NxtGen
WRInaute impliqué
WRInaute impliqué
 
Messages: 762
Inscription: 24 Oct 2006

Message le Lun Mai 14, 2007 1:36

En fesant
$req2=mysql_db_query($db,"SELECT id2,nom FROM table2 WHERE id2 != $resultat1");
ca marcherait pas ?

DoubleClic
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 12
Inscription: 14 Jan 2007

Message le Lun Mai 14, 2007 7:02

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...


chava2b
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 263
Inscription: 5 Déc 2003

Message le Lun Mai 14, 2007 7:05

et sinon peut etre ca :


Code: Tout sélectionner
$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";}


DoubleClic
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 12
Inscription: 14 Jan 2007

Message le Lun Mai 14, 2007 7:24

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


rog
WRInaute passionné
WRInaute passionné
 
Messages: 1662
Inscription: 21 Sep 2006

Message le Mar Mai 15, 2007 17:41

Code: Tout sélectionner
WHERE id1='$_GET[id1]'");


ça c'est une faute professionnelle grave

rog

DoubleClic
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 12
Inscription: 14 Jan 2007

Message le Mar Mai 15, 2007 20:11

Moi je ne suis pas au top, mais si tu le dis, je veux bien une explication.

Merci

bigjet
WRInaute discret
WRInaute discret
 
Messages: 211
Inscription: 21 Nov 2004

Message le Mer Mai 16, 2007 0:30

DoubleClic a écrit:Moi je ne suis pas au top, mais si tu le dis, je veux bien une explication.

Merci


Prenons ta requête:
Code: Tout sélectionner
"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: Tout sélectionner
1' OR '1'='1


Ta requête va devenir
Code: Tout sélectionner
"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.

DoubleClic
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 12
Inscription: 14 Jan 2007

Message le Mer Mai 16, 2007 6:59

OK, j'ai compris mais vaut-il mieux utiliser des variables POST ou des variables enregistrée en session ?

DoubleClic
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 12
Inscription: 14 Jan 2007

Message le Mer Mai 16, 2007 6:59

OK, j'ai compris mais vaut-il mieux utiliser des variables POST ou des variables enregistrée en session ?

Popop56
WRInaute discret
WRInaute discret
 
Messages: 186
Inscription: 5 Jan 2007

Message le Mer Mai 16, 2007 10:36

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!

DoubleClic
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 12
Inscription: 14 Jan 2007

Message le Mer Mai 16, 2007 21:57

merci pour votre aide si précieuse.


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité