Problème avec login et pass

Eléphant du PHP | 162 Messages

04 mars 2012, 23:23

je viens de mettre :
 <td width="47"><input type="submit" name="connexion" value="connexion"></td>
ça m'affiche :

array(3) { ["login"]=> string(5) "admin" ["pass"]=> string(5) "admin" ["connexion"]=> string(9) "connexion" }

et rien ne se passe toujours je reviens sur la page index.php

ViPHP
xTG
ViPHP | 7331 Messages

05 mars 2012, 10:25

As-tu mis des affichages dans chaque if comme je te l'avais recommandé ?

Eléphant du PHP | 162 Messages

05 mars 2012, 12:05

je viens de mettre des print_r mais ça affiche toujours :

array(3) { ["login"]=> string(5) "admin" ["pass"]=> string(5) "admin" ["connexion"]=> string(9) "connexion" }

et je reviens toujours sur la page index.php

. je sais pas si j'ai bien disposé les print_r .

voici le code :
<?php
var_dump($_POST);
// on teste si le visiteur a soumis le formulaire de connexion
if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') {
	if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass']))) {

		include("connection.php"); 

		// on teste si une entrée de la base contient ce couple login / pass
	      // on teste si une entrée de la base contient ce couple login / pass
                $sql = 'SELECT count(*) FROM membre WHERE login="'.mysql_escape_string($_POST['login']).'" AND pass_md5="'.mysql_escape_string(md5($_POST['pass'])).'"';
                $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
                $data = mysql_fetch_array($req);
		
                mysql_free_result($req);
	           print_r($req);
		        mysql_close();
		// si on obtient une réponse, alors l'utilisateur est un membre
		if ($data[0] == 1) {
			session_start();
			$_SESSION['login'] = $_POST['login'];
			header('Location: logo.php');
			exit();
			print_r($data[0]);
		}
		// si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe
		
		elseif ($data[0] == 0) {
			$erreur = 'Compte non reconnu.';
		}
		// sinon, alors la, il y a un gros problème :)
		else {
			$erreur = 'Probème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.';
		}
	}
	else {
		$erreur = 'Au moins un des champs est vide.';
	}
	echo $req;
}
?>

ViPHP
xTG
ViPHP | 7331 Messages

05 mars 2012, 13:58

Voici un code de debug :
<?php
echo '$_POST reçu : ';var_dump($_POST);
// on teste si le visiteur a soumis le formulaire de connexion
if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') {
        echo 'Premier if : OK';
        if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass']))) {
                echo 'Second if : OK';
                include("connection.php");

                // on teste si une entrée de la base contient ce couple login / pass
              // on teste si une entrée de la base contient ce couple login / pass
                $sql = 'SELECT count(*) FROM membre WHERE login="'.mysql_escape_string($_POST['login']).'" AND pass_md5="'.mysql_escape_string(md5($_POST['pass'])).'"';
                $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
                $data = mysql_fetch_array($req);
                echo 'Données requête : '; var_dump($data);
                mysql_free_result($req);
                        mysql_close();
                // si on obtient une réponse, alors l'utilisateur est un membre
                if ($data[0] == 1) {
                        /*session_start();
                        $_SESSION['login'] = $_POST['login'];
                        header('Location: logo.php');
                        exit();*/
                        echo 'Troisième if : OK';
                }
                // si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe
               
                elseif ($data[0] == 0) {
                        $erreur = 'Compte non reconnu.';echo 'Troisième if : KO1';
                }
                // sinon, alors la, il y a un gros problème <img src="http://forum.phpfrance.com/images/smilies/icon_smile.gif" alt=":)" title="Smile" />
                else {
                        $erreur = 'Probème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.'; echo 'Troisième if : KO2';
                }
        }
        else {
                $erreur = 'Au moins un des champs est vide.'; echo 'Second if : KO';
        }
}
?>
La partie session et redirection est commentée, car de toute façon les echo de debug vont remplir le buffer de sortie et donc occasionner des erreurs sur l'utilisation de ces fonctions (qui doivent être utilisées avant des affichages).
Restes plus qu'à tester et voir ce qui bloque. ;)

Mammouth du PHP | 2278 Messages

05 mars 2012, 15:45

j'avais commencé à rajouter des contrôles; mais pour être à l'aise, j'avais sorti les $_POST[ ] des if, puis j'ai trouvé plus simple de remplacer le if elseif else par un switch...
$login = isset ($_POST['login']) ? $_POST['login'] : "";
$pass = isset ($_POST['pass']) ? $_POST['pass'] : "";

	if (($login != "") and ($pass!= "") )
	{

                mysql_connect ("localhost", "root","");
                // on teste si une entrée de la base contient ce couple login / pass
		$login_echappe = mysql_escape_string($login);
		$pass_code = md5(mysql_escape_string($pass));
                $sql = "SELECT count(*) FROM membre WHERE `login`='$login_echappe'  AND `pass_md5`='$pass_code'";
                $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
                $data = mysql_fetch_array($req);

                mysql_free_result($req);
                mysql_close();
              
		$nb_comptes = $data[0];
		switch ($nb_comptes)
		{
			case 0:
				$erreur = 'Compte non reconnu.';
			break;
			case 1:
				session_start();
				$_SESSION['login'] = $login; 
				header('Location: logo.php');
				exit();
			break;
			default:
	                        $erreur = 'Problème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.';
			break;
		}
        }
        else 
	{
                $erreur = 'Au moins un des champs est vide.';
        }
}
?>
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD