Page 1 sur 1

Problème PHP / SQL, urgent

Posté : 29 janv. 2011, 12:49
par Arkop
Bonsoir !
J'ai un problème avec mes codes PHP. Je ne sais pas ce qui ne va pas. Merci de votre aide.
Le problème : Impossible de se connecter.

La table SQL
CREATE TABLE  `membre` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `login` text COLLATE utf8_unicode_ci NOT NULL,
  `pass_md5` text COLLATE utf8_unicode_ci NOT NULL,
  `montant_emprunt` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `total_a_rendre` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `argent_epargne` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `a_rendre_pour` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `emprunt_le` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 
;

Index.php (connexion)
<?php
// 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']))) {

		$base = mysql_connect ('sql.olympe-network.com', '***', '***');
		mysql_select_db ('nom_base', $base);

		// on teste si une entrée de la base contient ce couple login / pass
		$sql = 'SELECT id, login, pass_md5 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);
		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: client.php');
			exit();
		}
		// 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. Pour crée un compte client, rendez vous à la banque.';
		}
		// sinon, alors la, il y a un gros problème :)
		else {
			$erreur = 'Erreur SQL. Contactez lucasdu16400';
		}
	}
	else {
		$erreur = 'Au moins un des champs est vide.';
	}
}
?>
<html>
<head>
<title>Accueil</title>
</head>

<body>
Connexion à l'espace client :<br />
<form action="index.php" method="post">
Login : <input type="text" name="login" value="<?php if (isset($_POST['login'])) echo htmlentities(trim($_POST['login'])); ?>"><br />
Mot de passe : <input type="password" name="pass" value="<?php if (isset($_POST['pass'])) echo htmlentities(trim($_POST['pass'])); ?>"><br />
<input type="submit" name="connexion" value="Connexion">
</form>
<a href="inscription.php">Vous inscrire</a>
<?php
if (isset($erreur)) echo '<br /><br />',$erreur;
?>
</body>
</html>

Client.php (Page membre)
<?php
session_start();
if (!isset($_SESSION['login'])) {
	header ('Location: index.php');
	exit();
}
?>
<html>
<head>
<title>Espace client Banque Habbo</title>
</head>
<body>
   <fieldset>
       <legend>Présentation</legend>

Bienvenue dans votre espace client, <?php echo htmlentities(trim($_SESSION['login'])); ?>!<br>
	   
   </fieldset><br>
   
         <fieldset>
       <legend>Votre epargne</legend>
	   
Argent épargné : <?php echo htmlentities(trim($_SESSION['argent_epargne'])); ?><br>
	   
   </fieldset>
   
      <fieldset>
       <legend>Emprunt</legend>

<b>Montant de votre emprunt:</b> <?php echo htmlentities(trim($_SESSION['montant_emprunt'])); ?> crédits empruntés le <?php echo htmlentities(trim($_SESSION['emprunt_le'])); ?><br>
<br>
<b>Montant à rendre :</b> <?php echo htmlentities(trim($_SESSION['total_a_rendre'])); ?> crédits à rendre pour le <?php echo htmlentities(trim($_SESSION['a_rendre_pour'])); ?>


	   
   </fieldset>
   
         <fieldset>
       <legend>Options</legend>

	   <b><a href="deconnexion.php">Déconnexion du compte client</a><br>
	   <b><a href="contact/contact.php">Contacter un admin (Bientot)</a>
	   
   </fieldset>
<a href="deconnexion.php">Déconnexion de l'espace client</a>
</body>
</html>

Pouvez-vous m’aidez ?
Je vous remercie d’avance ! Cordialement, aweyh.

Re: Problème PHP / SQL, urgent

Posté : 30 janv. 2011, 08:14
par xTG
Pas besoin de faire de isset() si tu utilises empty(), la seconde fonction remplie le rôle de l'isset.

Ensuite tu ne vérifies pas correctement le retour de la requête. Le membre qui peut se connecter avec ton code est forcement l'utilisateur d'id égal à 1. Et les autres ????
Tu pourrais même tomber sur un warning avec ce code si le membre n'est pas trouvé (la fonction mysql_fetch_array qui travaillerai sur une ressource vide de résultats).

La bonne marche à suivre :
$sql = 'SELECT id, login, pass_md5 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());
                $nbr_retour = mysql_num_rows($req);
                mysql_free_result($req);
                mysql_close();

                // si on obtient une réponse, alors l'utilisateur est un membre
                if ($nbr_retour == 1) {
                        session_start();
                        $_SESSION['login'] = $_POST['login'];
                        header('Location: client.php');
                        exit();
                }
                // si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe
                elseif ($nb_retour == 0) {
                        $erreur = 'Compte non reconnu. Pour crée un compte client, rendez vous à la banque.';
                }
                // sinon, alors la, il y a un gros problème <img src="./images/smilies/icon_smile.gif" alt=":)" title="Smile" />
                else {
                        $erreur = 'Erreur SQL. Contactez lucasdu16400';
                }

Re: Problème PHP / SQL, urgent

Posté : 30 janv. 2011, 15:04
par Arkop
Désolé mais j'ai toujours le même problème :
Quand je tape les identifiants du compte, ça me met la phrase "Compte non reconnu, veuillez vous adressez à la banque" alors que les identifiants sont justes.
Bref, merci quand même.

Re: Problème PHP / SQL, urgent

Posté : 30 janv. 2011, 15:14
par xTG
Vérifies le mot de passe.
Car à priori je ne vois rien qui pourrai empêcher la connexion.

Soit c'est le mot de passe ou le login du membre qui sont faux (on a vite fait de se tromper sur le mot de passe car pas de vérification directe vu qu'il est encodé dans la bdd).
Soit c'est la connexion à la base qui n'a pas fonctionné et l'affichage des warnings désactivé.