Vérification d'une donnée de BDD

FireHunter
Invité n'ayant pas de compte PHPfrance

22 oct. 2005, 22:26

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

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

22 oct. 2005, 22:37

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']."')";

FireHunter
Invité n'ayant pas de compte PHPfrance

22 oct. 2005, 22:47

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 ) :mrgreen:

Mammouth du PHP | 1311 Messages

22 oct. 2005, 22:55

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)

Invité
Invité n'ayant pas de compte PHPfrance

22 oct. 2005, 22:58

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 ;)

Mammouth du PHP | 1311 Messages

22 oct. 2005, 23:12

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

Invité
Invité n'ayant pas de compte PHPfrance

22 oct. 2005, 23:16

T'aurais pas oublié des accolades à la fin ? OO
else 
echo 'refus'; 
Serait pas plutôt ? :
else 
{
echo 'refus'; 
}

Mammouth du PHP | 1311 Messages

22 oct. 2005, 23:17

non si tu une seule instruction tu n'est pas obligé de les mettre

FireHnter
Invité n'ayant pas de compte PHPfrance

22 oct. 2005, 23:18

Ah ok j'ai encore beaucoup à apprendre....

Mais sa change quelque chose si je les mets ?

Mammouth du PHP | 1311 Messages

22 oct. 2005, 23:19

non c'est mieux de les mettre des foi que cette regle change un jour :?

FireHunter
Invité n'ayant pas de compte PHPfrance

22 oct. 2005, 23:22

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 ? :mrgreen:

_________________

The newbie

Mammouth du PHP | 1311 Messages

22 oct. 2005, 23:26

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

FireHunter
Invité n'ayant pas de compte PHPfrance

22 oct. 2005, 23:34

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';
		}
?>
?

Mammouth du PHP | 1311 Messages

22 oct. 2005, 23:39

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

FireHunter
Invité n'ayant pas de compte PHPfrance

22 oct. 2005, 23:42

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