Select sur plusieurs tables

taratatie -  
Doctor C Messages postés 648 Statut Membre -
Bonjour,
Je débute en PHP et , j'aimerai faire une requête sql qui va aller chercher si il existe bien un password et un login dans la base de données. Actuellement mon code resseble à cela:

$sql = 'SELECT * FROM AnnonceursPublicitaires, Annonceurs, Abonnes WHERE login="'.mysql_escape_string($_POST['login']).'" AND password="'.mysql_escape_string($_POST['password']).'"';


$req = mysql_query($sql, $base) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$data = mysql_num_rows($req);


Mais cela me revoie une erreur. je ne sais pas comment faire.

HELP


2 réponses

Doctor C Messages postés 648 Statut Membre 399
 
Je suspecte 2 causes d'erreur.

1. Fait attention à tes guillemets et apostrophes. Je les ai changé ci-dessous et mettant un espace entre chacun d'eux pour la lisibilité (espace que tu peux retirer dans ton code);

2. Lorsque tu a plusieurs tables, il est bien de donner un nom court à tes tables et de faire précéder chaque champs du nom de la table à laquelle appartient ce champ.

Par exemple, si tes champs login et password se trouvent dans la table "Abonnes", je crois que cette requête SQL devrait fonctionner:

$sql = "SELECT * FROM AnnonceursPublicitaires ap, Annonceurs an, Abonnes ab WHERE ab.login=' " . mysql_escape_string($_POST['login']) . " ' AND ab.password= ' " . mysql_escape_string($_POST['password']) . " ' ";  

Donne-nous des nouvelles!
0
taratatie
 
En faite ce n'est pas exactement ce que je voudrais faire. Je voudrait que lorsque l'utilisateur essai de se connecter la requête vérifie si son non d'utilisateur et son mot de passe existent dans l'une des 3 tables.
0
Doctor C Messages postés 648 Statut Membre 399
 
Alors il existe un champ "login" et "password" dans les 3 tables mentionnées?
0
taratatie
 
Oui
0
Doctor C Messages postés 648 Statut Membre 399
 
Alors tu pourrais faire un seul select de ce genre:

$sql =
"SELECT * FROM AnnonceursPublicitaires ap, Annonceurs an, Abonnes ab WHERE (ap.login=' " . mysql_escape_string($_POST['login']) . " ' AND ap.password= ' " . mysql_escape_string($_POST['password']) . " ') OR (an.login=' " . mysql_escape_string($_POST['login']) . " ' AND an.password= ' " . mysql_escape_string($_POST['password']) . " ') OR (ab.login=' " . mysql_escape_string($_POST['login']) . " ' AND ab.password= ' " . mysql_escape_string($_POST['password']) . " ') ";

Si jamais tes 3 tables ont la même structure, tu pourrais aussi ne faire qu'une seule table avec cette structure puis ajouter un champ "TypeUtilisateur" qui pourrait posséder les valeurs "Annonceur publicitaire", "Annonceur" ou "Abonne".

Bonne chance!
0