Page 1 sur 2
Vérification d'une donnée de BDD
Posté : 22 oct. 2005, 22:26
par FireHunter
Salut à tous,
J'ai commencé un espace perso pour mon site mais je me pose la question suivante :
Comment vérifier si le pseudo et le mot de passe entrés dans le formulaire de connexion sont corrects ?
Voici mon code :
<?php
session_start(); // On démarre la session AVANT toute chose
// Variables :
$_SESSION['pseudo'] = '$_POST['pseudo']';
$_SESSION['mdp'] = '$_POST['mdp']';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<title>Test</title>
</head>
<body>
<form action="perso.php" method="post">
<?php
//On vérifie :
if (isset($_SESSION['pseudo']) AND isset($_SESSION['mdp'])) // Si les variables existent
{
if ($_SESSION['pseudo'] != NULL AND $_SESSION['mdp'] != NULL) // Si on a quelque chose à enregistrer
{
// D'abord, on se connecte à MySQL
mysql_connect("localhost", "root", "mdp");
mysql_select_db("sessions_membres");
// On utilise la fonction PHP htmlentities pour éviter d'enregistrer du code HTML dans la table
$_SESSION['pseudo'] = htmlentities ($_SESSION['pseudo']);
$_SESSION['mdp'] = htmlentities ($_SESSION['mdp']);
// Ensuite on enregistre le message
mysql_query("[b][color=red]INSERT INTO membres VALUES('', '$_SESSION['pseudo']', '$_SESSION['mdp']')[/color][/b]");
// On se déconnecte de MySQL
mysql_close();
}
else
{
echo "Pseudonyme ou mot de passe erroné. Veillez recommencer."
}
?>
<p>
Pseudo :<br /> <input type="text" name="pseudo" /><br />
Mot de Passe :<br /> <input type="text" name="mdp" /><br />
<input type="submit" value="Envoyer" />
</p>
</form>
<a href="sinscrire.php">Pas encore inscrit? Faites-le sans tarder !</a><br /><a href="avantages.php">Découvrez les avantages !</a>
</body>
</html>
La ligne rouge gras me pose problème. Est-ce là qu'ilf aut entrer le commande ? Et existe-t-elle ?
Merci à vous
Re: Vérification d'une donnée de BDD
Posté : 22 oct. 2005, 22:37
par albat
1. Pour simplifier ton écriture et limiter les risques d'erreur, je te recommande une écriture en 2 temps :
// Ensuite on enregistre le message
$req = "INSERT INTO membres VALUES('', '".$_SESSION['pseudo']."', '".$_SESSION['mdp']."')";
$res = mysql_query($req);
2. Ensuite, tout ira beaucoup mieux en sortant tes variables PHP de ta chaîne de caractères.
3. Enfin, es-tu sûr que les valeurs que tu rentres dans cette requête correspondent au modèle de ta table ?
Ne contient-elle que 3 champs ?
Par sécurité, écris plutôt :
$req = "INSERT INTO membres(champ1, champ2) VALUES('".$_SESSION['pseudo']."', '".$_SESSION['mdp']."')";
Posté : 22 oct. 2005, 22:47
par FireHunter
Merci pour ta réponse,
Seulement commet je fais moi pour sortir mes varaiables de la chaîne de caractère ( ne pas rigoler j'ai commencé PHP lundi dernier ) ?
Ou alors je t'ai mal compris... Note que je suis aliéné sur ce point....
Pour le 2 , dans ma BDD il y a :
- ID ( INT,11 )
- pseudo ( VARCHAR,255 )
- mdp ( VARCHAR, 255 )

Posté : 22 oct. 2005, 22:55
par jeff
salut une autre precision
Code : Tout sélectionner
$_SESSION['pseudo'] = '$_POST['pseudo']';
$_SESSION['mdp'] = '$_POST['mdp']';
s'ecrit
$_SESSION['pseudo'] = $_POST['pseudo'];
$_SESSION['mdp'] = $_POST['mdp'];
y a un truc que j'ai pas saisie c'est un formulaire d'inscription ou d'authentification??
sinon quand tu fait
INSERT INTO membres VALUES('', '$_SESSION['pseudo']', '$_SESSION['mdp']')
tu inclu un champs vide qui correspond a ton id et celui ci doit etre logiquement en auto-increment. si il est auto-n de le reprendre dans ta requete(solution albat)
Posté : 22 oct. 2005, 22:58
par Invité
salut une autre precision
Code : Tout sélectionner
$_SESSION['pseudo'] = '$_POST['pseudo']';
$_SESSION['mdp'] = '$_POST['mdp']';
s'ecrit
$_SESSION['pseudo'] = $_POST['pseudo'];
$_SESSION['mdp'] = $_POST['mdp'];
y a un truc que j'ai pas saisie c'est un formulaire d'inscription ou d'authentification??
sinon quand tu fait
INSERT INTO membres VALUES('', '$_SESSION['pseudo']', '$_SESSION['mdp']')
tu inclu un champs vide qui correspond a ton id et celui ci doit etre logiquement en auto-increment. si il est auto-n de le reprendre dans ta requete(solution albat)
Merci pr l'erreur des deux lignes

Mon ID est en auto_increment...
C'est un formulaire d'identification

Posté : 22 oct. 2005, 23:12
par jeff
donc
il vaut mieux proceder en deux etapes
1 formulaire html
2 traitement de celui-ci
le formulaire(page:authentification.htm)
Code : Tout sélectionner
<form action="perso.php" method="post">
Pseudo :<br /> <input type="text" name="pseudo" /><br />
Mot de Passe :<br /> <input type="text" name="mdp" /><br />
<input type="submit" value="Envoyer" />
</p>
</form>
traitement(perso.php)
session_start(); // On démarre la session AVANT toute chose
mysql_connect("localhost", "root", "mdp");
mysql_select_db("sessions_membres");
#netoyage des variables
$pseudo= addslashes(trim($_POST['pseudo']));
$mdp = addslashes(trim($_POST['mdp']));
$req='SELECT pseudo FROM membres WHERE mdp="'.$mdp.'" and pseudo="'.$pseudo.'"';
$res=mysql_query($req) or die mysql_error();
if(mysq_num_rows($res)>0)//verifie si il existe au moins une ligne
{
session_regenrate_id();//regenration de du num° de session
#enregistrement dans le session
$_session['pseudo']=$pseudo;
$_session['auth']='oui';/*permet juste de savoir si la session en cour est valide*/
echo 'autoriser';
}
else
echo 'refus';
c'est sommaire mais le pricipale y est
Posté : 22 oct. 2005, 23:16
par Invité
T'aurais pas oublié des accolades à la fin ? OO
else
echo 'refus';
Serait pas plutôt ? :
else
{
echo 'refus';
}
Posté : 22 oct. 2005, 23:17
par jeff
non si tu une seule instruction tu n'est pas obligé de les mettre
Posté : 22 oct. 2005, 23:18
par FireHnter
Ah ok j'ai encore beaucoup à apprendre....
Mais sa change quelque chose si je les mets ?
Posté : 22 oct. 2005, 23:19
par jeff
non c'est mieux de les mettre des foi que cette regle change un jour

Posté : 22 oct. 2005, 23:22
par FireHunter
Ok :lol!:
Sinon je mets TOUT avant le
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
Ou alors je sépare ?
_________________
The newbie
Posté : 22 oct. 2005, 23:26
par jeff
le doctype tu le met dans une page ou il des sorties HTML
c'est a dire une page que vera l'utilisateur ce qui n'est pas le cas de la page perso.php
perso.php devra aller a ton espace priver si l'authentification et reussi sinon aller a ta page d'authentification.htm
mais en aucun cas l'internaut ne vera perso.php
Posté : 22 oct. 2005, 23:34
par FireHunter
Désolé j'ai rien calé...
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<title>Test</title>
</head>
<body>
<form action="perso.php" method="post">
Pseudo :<br /> <input type="text" name="pseudo" /><br />
Mot de Passe :<br /> <input type="text" name="mdp" /><br />
<input type="submit" value="Envoyer" />
</p>
</form>
</body>
</html>
Cette page a donc l'extension XHTML
Ensuite la page perso doit-elle ressembler à ça :
<?php
session_start(); // On démarre la session AVANT toute chose
mysql_connect("localhost", "root", "mdp");
mysql_select_db("sessions_membres");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<title>Test</title>
</head>
<body>
<?php
#netoyage des variables
$pseudo= addslashes(trim($_POST['pseudo']));
$mdp = addslashes(trim($_POST['mdp']));
$req='SELECT pseudo FROM membres WHERE mdp="'.$mdp.'" and pseudo="'.$pseudo.'"';
$res=mysql_query($req) or die mysql_error();
if(mysq_num_rows($res)>0)//verifie si il existe au moins une ligne
{
session_regenrate_id();//regenration de du num° de session
#enregistrement dans le session
$_session['pseudo']=$pseudo;
$_session['auth']='oui';/*permet juste de savoir si la session en cour est valide*/
echo 'autoriser';
}
else
{
echo 'refus';
}
?>
?
Posté : 22 oct. 2005, 23:39
par jeff
ok pour la bage authentitification
pour perso.php
<?php
session_start(); // On démarre la session AVANT toute chose
mysql_connect("localhost", "root", "mdp");
mysql_select_db("sessions_membres");
#netoyage des variables
$pseudo= addslashes(trim($_POST['pseudo']));
$mdp = addslashes(trim($_POST['mdp']));
$req='SELECT pseudo FROM membres WHERE mdp="'.$mdp.'" and pseudo="'.$pseudo.'"';
$res=mysql_query($req) or die mysql_error();
if(mysq_num_rows($res)>0)//verifie si il existe au moins une ligne
{
session_regenrate_id();//regenration de du num° de session
#enregistrement dans le session
$_session['pseudo']=$pseudo;
$_session['auth']='oui';/*permet juste de savoir si la session en cour est valide*/
header('location:espace.php')//on va sur l'espace securisé
}
else
{
header('location:authentification.htm');
}
?>
une foi sur l'espace securiser tu devra mettre en petit script en tete de chaque page qui verifie si les sessions sont bien valide
tu devrai demander a un modo de deplacer ton sujet dans php debutant
Posté : 22 oct. 2005, 23:42
par FireHunter
Eu sans vouloir t'offenser je ne connais pas
header:location('')
Donc..je vais aller voir la doc PHP et je reposte d'accord ?
Et tout cas merci pour ton aide