Problème authentification SQL & PhP

Fermé
wars77 Messages postés 50 Date d'inscription samedi 10 février 2007 Statut Membre Dernière intervention 25 avril 2011 - Modifié par wars77 le 24/04/2011 à 20:18
 le père - 26 avril 2011 à 11:48
Bonjour,

Actuellement en terminale de GSI je dois terminer mon projet (qui est, pour moi et trois autres camarades avec qui je suis sur le projet, de réaliser un site internet pour une boîte d'intérim.
Le site est presque terminé puisqu'il ne nous reste en grande partie que le côté css du projet, hors je cale sur la page php d'authentification:

<?php 
$connexion=Mysql_connect('127.0.0.1', 'root',''); 
Mysql_select_db('aib',$connexion); 

$Id = $_POST['Id']; 
$MDP = $_POST['MDP']; 

$requete = "select id, MDP from idclient, idcandidat where Id='$Id'"; 
$resultat = Mysql_query($requete); 
$ligne = Mysql_fetch_array($resultat); 

if ($ligne['MDP'] == $MDP) 
  {echo 'Bienvenue sur le site !' ; }                                                                  
Else {echo 'Identifiant ou mot de passe incorrect!' ; } 
?>


J'obtiens ce message d'erreur : Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in F:\Program Files (x86)\EasyPHP-5.3.5.0\www\Authentification.php on line 10

Les tables utilisées sont :
-Idcandidat (Id, MDP, Mail, Nom, Prenom)
-Idclient (Id, MDP, Mail)
(Elles sont peuplées.)

J'ai donc testé ma requête SQL, qui donne donne donc :

Select Id,MDP from Idclient, Idcandidat where Id='$Id'

mais la => Champ: 'Id' dans field list est ambigu


Je pense que le problème Mysql_fetch_array vient de mon problème sql, mais après 15h de travail sur le site en deux jours les neurones commencent un peu à saturer (Qu'est ce que c'est chiant le php...) même pour une requête qui me paraît pourtant très simple.

En espérant que quelqu'un ai la réponse à mon problème,
merci d'avance.

EDIT : j'allais oublié, la protection importe peu puisque ce n'est pas un site qui sera utilisé plus tard.



A voir également:

3 réponses

Bonjour

Tu as ce message parce que ta requête a un problème -> Mysql_query rend False (un booléen) au d'une d'une ressource (quand tout va bien)
Le problème de ta requête, c'est qu'elle est ambiguë. Quand tu fais un select from idclient, idcandidat, tu récupères le produit cartésien des deux tables. Il y a donc dans chaque ligne de réponse deux Id, deux MDP, deux Mail, un nom et un prenom. Le Id et MDP qui apparaissent dans ta requête, on ne sait si tu parles du client ou du candidat
Que cherches-tu à faire avec cette requête ?
0
wars77 Messages postés 50 Date d'inscription samedi 10 février 2007 Statut Membre Dernière intervention 25 avril 2011 1
25 avril 2011 à 19:56
En fait, je voudrais que le script demander à la DB si les logins entrés en $Id et $MDP sont présent dans l'une des deux tables.
0
Bonjour

Effectivement, ça peut se faire en une seule requête avec UNION, je ne connais pas la syntaxe par coeur et je te laisse la chercher dans le doc mysql. Personnellement, je ferais la recherche dans une table puis, en cas d'échec, dans l'autre.

Pourquoi fais-tu une recherche sur $Id pour ensuite vérifier si MDP est bon ? tu peux tout vérifier en une seule fois, et même savoir combien il y en a dans ta base (c'est ça qui t'intéresse. Il y en a 0 ou 1 ; s'il y en a plus, c'est que tu surveilles mal les inscriptions)

"select count(*) as nb from idclient, idcandidat where Id='$Id' AND MDP='$MDP'"
Tu n'as plus qu'à tester la valeur de nb.
Tu as l'avantage que cette requête rend toujours un résultat, alors que celle que tu écrivais ne rendait rien si on ne trouvait personne dans la base, et ton script planterait encore sur le if ($ligne['MDP'] == $MDP) (puisque $ligne ne serait pas un tableau, mais la valeur booléenne false)
0