Page 1 sur 1

Code de [CONNEXION ESPACE MEMBRE]

Posté : 26 déc. 2007, 00:13
par zaknaou
Bonjour et joyeux noël à vous.

Quelqu'un peut t-il me dire comment on crée un script permétant de connecté un membre à l'espace membre ?

Bon j'ai fait de mon mieu mais ya quelque incertitudes :
<?php

//-->> DEMMARRAGE D'UNE SESSION
session_start();

//-->> INCLUDE
include('ip.php');
include('../include/mysql.php');

//-->> RECEPTION DES CHAMPS
$mot_de_passe_champs 	= $_POST['mot_de_passe'];
$identifiant_champs 	= $_POST['identifiant'];

//-->> SELECTION DU CHAMPS MOT DE PASSE DE TOUT LES IDENTIFIANT
$mot_de_passe_req = mysql_query("SELECT mot_de_passe,identifiant FROM inscription") or die (''.mysql_error());

while($mot_de_passe_data = mysql_fetch_assoc($mot_de_passe_req))
    {
$mot_de_passe_base 					= $mot_de_passe_data['mot_de_passe'];
$identifiant_base 					= $identifiant_data['identifiant'];
	}

//-->> CONSEQUENCE
if($mot_de_passe_base == $mot_de_passe_champs AND $identifiant_base == $identifiant_champs)
{
//-->> Redirection ver scompte
}
else
{
//-->> Erreur
}

?>
Merci beaucoup.

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Posté : 26 déc. 2007, 01:02
par AB
Oui effectivement,

Essaies plutôt quelque chose du genre
$Query = "SELECT mot_de_passe, identifiant FROM inscription WHERE mot_de_passe = " .mysql_real_escape_string($_POST['mot_de_passe']). " AND identifiant = " .mysql_real_escape_string($_POST['identifiant']);

Posté : 26 déc. 2007, 01:38
par zaknaou
Merci

donc, j'obtient :
<?php

//-->> DEMMARRAGE D'UNE SESSION
session_start();

//-->> INCLUDE
include('ip.php');
include('../include/mysql.php');

//-->> RECEPTION DU CHAMPS
$identifiant_champs 	= $_POST['identifiant'];

//-->> SELECTION DU CHAMPS MOT DE PASSE DE TOUT LES IDENTIFIANT
$mot_de_passe_req = mysql_query("SELECT mot_de_passe,identifiant FROM inscription WHERE mot_de_passe = " .mysql_real_escape_string($_POST['mot_de_passe']) or die (''.mysql_error());
while($mot_de_passe_data = mysql_fetch_assoc($mot_de_passe_req))
    {
$mot_de_passe_base 					= $mot_de_passe_data['mot_de_passe'];
$identifiant_base 					= $identifiant_data['identifiant'];
	}

//-->> CONSEQUENCE
if($mot_de_passe_base == $mot_de_passe_champs AND $identifiant_base == $identifiant_champs)
{
//-->> Redirection ver scompte
}
else
{
//-->> Erreur
}

?>
[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Posté : 26 déc. 2007, 01:47
par Truc
Tu as trouvé ton bonheur avec la réponse de AB ?

Posté : 26 déc. 2007, 02:16
par zaknaou
J'ai
Parse error: parse error, unexpected ';' in /homepages/22/d186490993/htdocs/site/script/connexion.php on line 14

Posté : 26 déc. 2007, 02:32
par AB
Hum, je comprend pas trop pourquoi, pour connecter un membre, tu les sélectionnent tous en faisant ensuite une comparaison dans ta boucle de résultat... Pourquoi ne pas (comme je te l'ai suggéré plus haut) vérifier directement si le membre existe dans la bdd ?
$selection = "SELECT mot_de_passe, identifiant FROM inscription WHERE mot_de_passe = '" .mysql_real_escape_string($_POST['mot_de_passe']). "' AND identifiant ='" .mysql_real_escape_string($_POST['identifiant']). "'"; 

$query = mysql_query($selection) or die(mysql_error());
$totalReponse = mysql_num_rows($query);

if ($totalReponse == 1 ) {
//membre ok
;}
else {//pas bon
;}
variante plus optimisée
$selection = "SELECT COUNT(*) as compte FROM inscription WHERE mot_de_passe = '" .mysql_real_escape_string($_POST['mot_de_passe']). "' AND identifiant = '" .mysql_real_escape_string($_POST['identifiant']). "'"; 

$query = mysql_query($selection) or die(mysql_error());
$totalReponse = mysql_fetch_assoc($query);

if ($totalReponse['compte'] == 1 ) {
//membre ok
}
else {
}
Et pour que cela passe quelque soit la config de get_magic_quotes_gpc il faut faire un truc comme
function stripgpc($value) {
if(get_magic_quotes_gpc()) $value = stripslashes($value);
return $value;
}

$selection = "SELECT COUNT(*) as compte FROM inscription WHERE mot_de_passe = '" .mysql_real_escape_string(stripgpc($_POST['mot_de_passe'])). "' AND identifiant = '" .mysql_real_escape_string(stripgpc($_POST['identifiant'])). "'"; 

$query = mysql_query($selection) or die(mysql_error());
$totalReponse = mysql_fetch_assoc($query);

if ($totalReponse['compte'] == 1 ) {
//membre ok
}
else {
}

Posté : 26 déc. 2007, 02:43
par zaknaou
Heu compte sera pour moi identifiant ?

et pourquoi on fait :
if ($totalReponse['compte'] == 1 ) { 
Et j'obtient :
Unknown column '2i2k' in 'where clause'
C'est le mot de passe

Je sais pas d'où vien cette erreur car je ne comprend pas le code

Mais le code croit que 2i2k est un champs dans la bdd alors que c'est la valeur du champs mot_de_passe dans la bdd [/php]

Posté : 26 déc. 2007, 02:56
par AB
Heu compte sera pour moi identifiant ?

et pourquoi on fait :
if ($totalReponse['compte'] == 1 ) { 
Parce que dans ma dernière requête j'ai utilisé un alias que j'ai nommé "compte" (on aurait pu le nommer autrement) pour enregistrer le nombre de résultats trouvés.

Note : j'ai complété mon précédent message

Posté : 26 déc. 2007, 03:09
par zaknaou
Pour le premier if il manquais une paire de {} et pour la fonction il en faut une ?

Est-ce ça ?
<?php

//-->> DEMMARRAGE D'UNE SESSION
session_start();

//-->> INCLUDE
include('ip.php');
include('../include/mysql.php');

function stripgpc($value)
{
	if(get_magic_quotes_gpc()) 
	{
		$value = stripslashes($value);
		return $value;
	}
}

//-->> SELECTION DU CHAMPS MOT DE PASSE DE TOUT LES IDENTIFIANT
$selection = "SELECT COUNT(*) as compte FROM inscription WHERE mot_de_passe = " .mysql_real_escape_string(stripgpc($_POST['mot_de_passe'])). " AND identifiant = " .mysql_real_escape_string(stripgpc($_POST['identifiant'])); 

$query = mysql_query($selection) or die(mysql_error());
$totalReponse = mysql_fetch_assoc($query); 

if ($totalReponse['compte'] == 1 )
{
	echo"VOTRE COMPTE";
}
else
{
	echo"ERREUR";
} 

?>
Je vien de retrouver un code sur un forum resseblant à :
$loginOK = false;
$pseudo  = isset($_POST['pseudo']) ? $_POST['pseudo'] : "";
$pass    = isset($_POST['pass'])   ? $_POST['pass']   : "";

if ( (!empty($pseudo)) && (!empty($pass)) )
{

    // On va vérifier l'existence du couple pseudonyme+mot de passe
    $sql = "SELECT COUNT(*) FROM `user` WHERE `pseudo` = '" . addslashes($pseudo) . "' AND `pass` = '" . addslashes($pass) . "'";
    /* Exécution de la requête */
    $req = mysql_query($sql) or die("Erreur lors de l'exécution de la requête : \"".$sql ."\";<br />\nErreur retournée : ". mysql_error());

    // On vérifie le résultat retourné
    if (mysql_result($req, 0) == 1)
    {
        $loginOK = true;
    }
}


Et avec quelques modofication :
<?php

//-->> DEMMARRAGE D'UNE SESSION
session_start();

//-->> INCLUDE
include('ip.php');
include('../include/mysql.php');

$loginOK = false;
$identifiant  = isset($_POST['identifiant']) ? $_POST['identifiant'] : "";
$mot_de_passe    = isset($_POST['mot_de_passe'])   ? $_POST['mot_de_passe']   : "";

if ( (!empty($identifiant)) && (!empty($mot_de_passe)) )
{

    //-->> On va vérifier l'existence du couple identifiantnyme + mot de mot_de_passee
    $sql = "SELECT COUNT(*) FROM `inscription` WHERE `identifiant` = '" . addslashes($identifiant) . "' AND `mot_de_passe` = '" . addslashes($mot_de_passe) . "'";
    
	//-->> Exécution de la requête
    $req = mysql_query($sql) or die(''. mysql_error());

    //-->> On vérifie le résultat retourné
    if (mysql_result($req, 0) == 1)
    {
        $loginOK = true;
		$loginas = "ok";
    }
}

if ($loginas == "ok")
{
	echo"VOTRE COMPTE";
}
else
{
	echo"ERREUR";
} 

?>
Maintenant il ne reste pluq qu'a testé

Posté : 26 déc. 2007, 03:42
par AB
Oui il manquait quelques quotes(') dans ma requête, je l'ai écrite un peu vite sans tester. Mais sur le principe est elle mieux que celles que tu as trouvées. Dans trois minutes j'édite ce message pour te donner la meilleure solution standard :wink:


EDIT suivant les recommandations du manuel php si on fait ça dans les règles de l'art ça donne :
function stripgpc($value) {
if(get_magic_quotes_gpc()) $value = stripslashes($value);
return $value;
}

$selection = sprintf("SELECT COUNT(*) as compte FROM inscription WHERE mot_de_passe ='%s' AND identifiant ='%s'",
mysql_real_escape_string(stripgpc($_POST['mot_de_passe'])),
mysql_real_escape_string(stripgpc($_POST['identifiant']))); 

$query = mysql_query($selection) or die(mysql_error());
$totalReponse = mysql_fetch_assoc($query);

if ($totalReponse['compte'] == 1 ) {
echo 'membre identifié';
}
else 
{
echo 'membre non identifié';
}

Posté : 26 déc. 2007, 03:43
par zaknaou
Ca marche aussi !!

MERCI

Tu as dit que dans le principe ça :
<?php

//-->> DEMMARRAGE D'UNE SESSION
session_start();

//-->> INCLUDE
include('ip.php');
include('../include/mysql.php');

function stripgpc($value) {
if(get_magic_quotes_gpc()) $value = stripslashes($value);
return $value;
}

$selection = sprintf("SELECT COUNT(*) as compte FROM inscription WHERE mot_de_passe ='%s' AND identifiant ='%s'",
mysql_real_escape_string(stripgpc($_POST['mot_de_passe'])),
mysql_real_escape_string(stripgpc($_POST['identifiant']))); 

$query = mysql_query($selection) or die(mysql_error());
$totalReponse = mysql_fetch_assoc($query);

if ($totalReponse['compte'] == 1 ) {
echo 'membre identifié';
}
else 
{
echo 'membre non identifié';
}

?>
c'est mieu que ça :
<?php

//-->> DEMMARRAGE D'UNE SESSION
session_start();

//-->> INCLUDE
include('ip.php');
include('../include/mysql.php');

$loginOK = false;
$identifiant  = isset($_POST['identifiant']) ? $_POST['identifiant'] : "";
$mot_de_passe    = isset($_POST['mot_de_passe'])   ? $_POST['mot_de_passe']   : "";

if ( (!empty($identifiant)) && (!empty($mot_de_passe)) )
{

    //-->> On va vérifier l'existence du couple identifiantnyme + mot de mot_de_passee
    $sql = "SELECT COUNT(*) FROM `inscription` WHERE `identifiant` = '" . addslashes($identifiant) . "' AND `mot_de_passe` = '" . addslashes($mot_de_passe) . "'";
    
	//-->> Exécution de la requête
    $req = mysql_query($sql) or die(''. mysql_error());

    //-->> On vérifie le résultat retourné
    if (mysql_result($req, 0) == 1)
    {
        $loginOK = true;
		$loginas = "ok";
    }
}

if ($loginas == "ok")
{
	echo"VOTRE COMPTE";
}
else
{
	echo"ERREUR";
} 

?>
ok, mais pourquoi ?

Posté : 26 déc. 2007, 03:55
par AB
Bah je viens de te répondre, on a posté en même temps.

Ce qu'il y a de mieux dans la méthode que je t'ai donnée c'est qu'elle marche quelque soit la configuration serveur de get_magic_quotes_gpc())

Par ailleurs les données recherchées sont protégées par la fonction mysql_real_escape_string() ce qui est le standard actuel. Cliques sur cette fonction pour voir les exemples donnés par le manuel :)

Maintenant il te restais un petit contrôle de variables à faire. Terminé cela devrait donné quelque chose comme ça :
function stripgpc($value) {
if(get_magic_quotes_gpc()) $value = stripslashes($value);
return $value;
}

$mdp = isset($_POST['mot_de_passe']) ? stripgpc($_POST['mot_de_passe']) : '';
$login = isset($_POST['identifiant']) ? stripgpc($_POST['identifiant']) : '';

$selection = sprintf("SELECT COUNT(*) as compte FROM inscription WHERE mot_de_passe ='%s' AND identifiant ='%s'",
mysql_real_escape_string($mdp),
mysql_real_escape_string($login)); 

$query = mysql_query($selection) or die(mysql_error());
$totalReponse = mysql_fetch_assoc($query);

if ($totalReponse['compte'] == 1 ) {
echo 'membre identifié';
}
else 
{
echo 'membre non identifié';
}

Posté : 26 déc. 2007, 04:04
par zaknaou
A ouai, bah merci à toi et bonne fête de noël.

Posté : 26 déc. 2007, 04:07
par AB
A toi aussi (j'ai édité mon dernier message), on va y arriver :D