Recherche dans 4 table mysql

Résolu
laloire33150 Messages postés 94 Date d'inscription dimanche 7 octobre 2007 Statut Membre Dernière intervention 25 novembre 2009 - 21 nov. 2009 à 20:53
laloire33150 Messages postés 94 Date d'inscription dimanche 7 octobre 2007 Statut Membre Dernière intervention 25 novembre 2009 - 25 nov. 2009 à 22:48
Bonjour à tous,

j'ai 4 tables de produits, et je voudrais en trouver un grâce à la référence

voici mon code :
<?php
$reference= $_POST['ref'];
include('include/config.php');

$sql "SELECT * FROM table1, table2, table3, table4 WHERE ref ".$ref0."";
$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
if (!$req) {
   die('Échec de la requête : ' . mysql_error());
}
$data= mysql_fetch_row($req);

echo $data[1];
?>


et voici l'erreur que j'ai :

Erreur SQL !
SELECT * FROM table1, table2, table3, table4 WHERE ref =
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

pouvez vous me donner un petit coup de pouce ?

laloire

9 réponses

TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
22 nov. 2009 à 10:24
Salut,

Mettre ainsi plusieurs table revient à effectuer implicitement, pour MySQL, une jointure interne. Non seulement ce n'est pas ce que tu veux, mais surtout vu que tu n'as aucune condition de jointure c'est le produit cartésien des 4 tables qui va être utiliser, ce qui va rapidement mettre son serveur au supplice si tu as pas mal d'entrées dans chaque table. Ce que tu voulais certainement faire c'est utiliser UNION afin d'avoir le résultat de 4 requêtes (une sur chaque table) en même temps.

Je me demande bien comment sont structurés tes tables et pourquoi tu en a 4 qui semblent plus ou moins identiques.

Sinon juste comme ça, tu as un très grave problème d'injections de SQL, je te conseille de lire au plus vite ceci et d'apporter les corrections nécessaires : Injection SQL
3
laloire33150 Messages postés 94 Date d'inscription dimanche 7 octobre 2007 Statut Membre Dernière intervention 25 novembre 2009
21 nov. 2009 à 20:56
zut j'ai fait une erreur en inscrivant mon code php
voici le bon :
<?php
$reference= $_POST['ref'];
include('include/config.php');

$sql "SELECT * FROM table1, table2, table3, table4 WHERE ref ".$reference."";
$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
if (!$req) {
   die('Échec de la requête : ' . mysql_error());
}
$data= mysql_fetch_row($req);

echo $data[1];
?>



laloire
0
laloire33150 Messages postés 94 Date d'inscription dimanche 7 octobre 2007 Statut Membre Dernière intervention 25 novembre 2009
22 nov. 2009 à 20:40
Bonsoir TychoBrahe,

merci pour ta réponse, elle m'as bien aidé c'est vrai qu'avec union sa fonctionne très bien.

Je débute en php, les injections sql, première fois que j'en entend parler lol, merci de ton éclaircissement.

si je fait ceci, est-ce que c'est- bon ? je ne suis pas sur d'avoir bien compris les injections
<?php
//récupération produit 
$ref = $_POST[$reference];
$qan = $_POST[$quantite];

// la connexion
include ('config.php');

// recherche du produit
$sql "SELECT ref, nom, foto, prix, promo FROM table1 WHERE ref '$ref' UNION SELECT ref, nom, foto, prix, promo FROM table2 WHERE ref = '$ref' UNION SELECT ref, nom, foto, prix, promo FROM table3 WHERE ref = '$ref' UNION SELECT ref, nom, foto, prix, promo FROM table4 WHERE ref = '$ref'";
$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
if (!$req) {
   die('Echec de la requête : ' . mysql_error());
}
$data= mysql_fetch_row($req);
if ($data[4]=="") {
$prix = $data[3];
}
else {
$prix = $data[4];
}
$tot=$prix*$qan;

// afficher le produit
echo 'Nom du produit : ';
echo $data[1];
echo '
';
echo 'Prix : ';
echo $prix;
?>






laloire
0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
22 nov. 2009 à 21:13
Salut,

si je fait ceci, est-ce que c'est- bon ? je ne suis pas sur d'avoir bien compris les injections

Non. Tu peux essayer par toi même en utilisant ceci dans $ref :
toto' OR 1 = 2 UNION SELECT DATABASE(), USER(), CURRENT_USER(), VERSION(), SCHEMA() -- titi
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
laloire33150 Messages postés 94 Date d'inscription dimanche 7 octobre 2007 Statut Membre Dernière intervention 25 novembre 2009
23 nov. 2009 à 23:11
oki et si je fait ceci c'est ok ?

<?php
//récupération produit 
$ref = mysql_real_escape_string($_POST['reference']);
$qan = mysql_real_escape_string($_POST['quantite']);

// la connexion
include ('config.php');

// recherche du produit
$sql "SELECT ref, nom, foto, prix, promo FROM table1 WHERE ref '$ref' UNION SELECT ref, nom, foto, prix, promo FROM table2 WHERE ref = '$ref' UNION SELECT ref, nom, foto, prix, promo FROM table3 WHERE ref = '$ref' UNION SELECT ref, nom, foto, prix, promo FROM table4 WHERE ref = '$ref'";
$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
if (!$req) {
   die('Echec de la requête : ' . mysql_error());
}
$data= mysql_fetch_row($req);
if ($data[4]=="") {
$prix = $data[3];
}
else {
$prix = $data[4];
}
$tot=$prix*$qan;

// afficher le produit
echo 'Nom du produit : ';
echo $data[1];
echo '
';
echo 'Prix : ';
echo $prix;
?>



laloire
0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
23 nov. 2009 à 23:53
Salut,

C'est bien mieux comme ça oui Enfin si tu ne te sert pas de la quantité pour effectuer ta requête ça ne sert a rien de lui appliquer mysql_real_escape_string(), d'autant plus qu'avec le transtypage ce sera sa valeur numérique qui sera prise (à cause de la multiplication).
0
laloire33150 Messages postés 94 Date d'inscription dimanche 7 octobre 2007 Statut Membre Dernière intervention 25 novembre 2009
24 nov. 2009 à 15:11
Bonjour TychoBrahe,

Merci pour ton aide, et si je fais ceci : juste pour savoir ci cela fonctionnerais et surtout si c'est juste, je me doute que sa ne sert a rien puisque ce n'est pas dans ma requête sql.

<?php
//récupération produit 
$ref = mysql_real_escape_string($_POST['reference']);
$qan = $_POST['quantite'];

if (is_int($qan)) {
$qanok = $qan;
} 
// Je voudrais savoir en php, mais je ne sait pas encore faire ci-dessous
else {
echo '<script language=javascript> alert ("Vous n'avez pas choisi la quantité !");</script>';
    echo '<SCRIPT LANGUAGE="JavaScript">
document.location.href="commande.php" </SCRIPT>';
exit;
}

// la connexion
include ('config.php');

// recherche du produit
$sql "SELECT ref, nom, foto, prix, promo FROM table1 WHERE ref '$ref' UNION SELECT ref, nom, foto, prix, promo FROM table2 WHERE ref = '$ref' UNION SELECT ref, nom, foto, prix, promo FROM table3 WHERE ref = '$ref' UNION SELECT ref, nom, foto, prix, promo FROM table4 WHERE ref = '$ref'";
$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
if (!$req) {
   die('Echec de la requête : ' . mysql_error());
}
$data= mysql_fetch_row($req);
if ($data[4]=="") {
$prix = $data[3];
}
else {
$prix = $data[4];
}
$tot=$prix*$qanok;

// afficher le produit
echo 'Nom du produit : ';
echo $data[1];
echo '
';
echo 'Prix : ';
echo $prix;
?>




laloire
0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
25 nov. 2009 à 08:22
Salut,

Non ça ne fonctionnera pas, et ce pour deux raisons :
1. Tu as oublié d'échapper les simples quotes dans ton bout de JavScript.
2. $_POST['quantite'] n'est pas un entier mais une chaîne de caractère représentant un entier, il en est donc de même pour $qan. Avant un cast explicite ou implicite is_int() retournera toujours faux. À la place de is_int() tu peux cependant utiliser ctype_digit() qui fait ce que tu attends.
0
laloire33150 Messages postés 94 Date d'inscription dimanche 7 octobre 2007 Statut Membre Dernière intervention 25 novembre 2009
25 nov. 2009 à 22:48
bonsoir TychoBrahe,

Merci pour tout c'est bon conseils, c'est gentil de ta part


laloire
0
Rejoignez-nous