[aide] voir si une variable exsite dans une table

Petit nouveau ! | 8 Messages

02 oct. 2009, 02:43

Salut,
avant tout je tient a vous dire queje suis vraiment très débutant en php ...
j'ai une table membres avec 2 colonne , nom et password , le nom et la clé primaire.
j'ai 2 variable $nom et $password.
je veut vérifier que $nom existe dans cette table et que si il existe , le password et correcte " c'est comme une authentification"
il y a une autre table avec 2 colonne , nom et commentaire
si le membre existe, je voudrai afficher tout ses commentaire dans la deuxième table.
Mais jai bloqué sur la 1ère partie :cry:
j'ai même pas encore utiliser where password==$password et j'ai une erreur , appache se plante

Code : Tout sélectionner

<?php $nom = $_POST['noml']; $password = $_POST['password']; $con = mysql_connect("localhost","root","root"); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("test", $con); $sql= "SELECT * FROM membres"; if (!mysql_query($sql,$con)) { die('Error: ' . mysql_error()); } mysql_close(); ?>
merci d'avance pour votre aide

ViPHP
ViPHP | 1136 Messages

02 oct. 2009, 08:09

Salut ,

je te conseil de bien de renseigner sur mysql , pas pour devenir expert , mais savoir utiliser les principaux mots clef ( WHERE , LEF JOIN , DISTINCT ... )

Exemple de site tres bien fait : ici

Car ton problème est un manque dans ta requete ..
$rq = "SELECT * FROM membres WHERE nom = '.mysql_real_escape_string($nom).' AND password = '.mysql_real_escape_string($password).' LIMIT 1";
[php]

Note : je te conseil fortement de chiffrer tes mots de passes en base ( ils ne doivent pas être en clair ) , pour cela utilise sha1() par exemple 
Note2 : dans l'exemple ci-dessus , j'ai utilisé la fonction mysql_real_escape_string() , cette fonction permet d'eviter toute injection sql , c'est tres important de bien se méfier sur ce point . 

Bonne continuation , 
cdt,

Ch.

Petit nouveau ! | 8 Messages

02 oct. 2009, 12:58

Salut , merci beaucoup
pour ce qui est du cryptage des mot de passe et les manœuvre contre les injection je compté le faire après.La je fait que " le noyeau " :wink:
Sa marche :D

Code : Tout sélectionner

<?php $nom = $_POST['nom']; $password = $_POST['pw']; $con = mysql_connect("localhost","root","root"); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("links_db", $con); $query = "SELECT * FROM membres WHERE nom = '.mysql_real_escape_string($nom).' AND password = '.mysql_real_escape_string($password).' LIMIT 1"; $result = mysql_query($query); if (!$result) { $message = 'Requête invalide : ' . mysql_error() . "\n"; $message .= 'Requête complète : ' . $query; die($message); } while ($row = mysql_fetch_assoc($result)) { echo $row['nom']; echo $row['password']; } mysql_free_result($result); ?>


Mais comment je peut enlever se bou de code d'affichage

Code : Tout sélectionner

while ($row = mysql_fetch_assoc($result)) { echo $row['nom']; echo $row['password'];
et faire juste le test pour voir si il a trouver une personne avec u nom et un password valide .
merci

ViPHP
ViPHP | 1136 Messages

02 oct. 2009, 14:07

Et bien tu comptes le nombres de champs trouvé ( qui ne peut être que 0 ou 1 ).

pour faire simple , u petit exemple :
$query = "SELECT count(id) AS nbmatch,nom,prenom FROM membres WHERE nom = '.mysql_real_escape_string($nom).' AND password = '.mysql_real_escape_string($password).' LIMIT 1";
ensuite , vient les résultats
$row = mysql_fetch_array($result,MYSQL_ASSOC);

if($row[0]['nbmatch']){
     echo $row['nom'];
     echo $row['password'];
}else{
     echo "Compte introuvable !";
}
Ch.

Petit nouveau ! | 8 Messages

02 oct. 2009, 18:29

merci énormément pour ton aide , je vais essayer sa .Il a l'aire d'être trop puissant le php je commence à vrément l'aimer :roll: