8791 sujets

Développement web côté serveur, CMS

Bonjour
J'ai un formulaire d'identification qui fait des siennes...
J'explique: Soit il me renvoie l'information:
a écrit :
Il y a au moins une erreur dans une saisie. Veuillez recommencer, svp.
, Soit il me renvoie le message :
a écrit :
Problème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion. Prévenir le webmaster.

Je fais un echo de la
 $data['mdp']
et du
md5($_POST['password']
, ce sont bien les mêmes (ouf!)

Pire: Quand je ne conserve qu'un id dans ma base, là, pas de problème, il m'identifie bien et passe à l'étape suivante... Smiley biggol

Voici le code php concerné:

<?php
include ('includes/connect.inc.php');
//code d'identification client
// on teste si le visiteur a soumis le formulaire de connexion
if (isset($_POST['connexion'])) 
{
if ((isset($_POST['email']) && !empty($_POST['email'])) && (isset($_POST['password']) && !empty($_POST['password'])))
    {        
          $sql = "SELECT * FROM clients WHERE email='".mysql_real_escape_string($_POST['email'])."' AND mdp= '" .(mysql_real_escape_string(md5($_POST['password'])))."' ";
          $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 réponse, alors membre
             if($data[0] == 1)
			{
			 session_start();
                $_SESSION['email'] = $_POST['email'];
				$_SESSION['mdp'] = $_POST['mdp'];
				
				$bravo =  "<p> Bonjour ".$_SESSION['prenom']."  ".$_SESSION['nom']."<br /><br />
				 Où souhaitez vous vous rendre?<br /><br />
				 <a href=\"../index.php\">La page d'accueil de la boutique?</a><br /><br />
				 <a href=\"cpte_client.php\">Ou la page de votre compte client?</a></p> ";
			exit();
			}
			//si pas de réponse erreur dans le couple mdp/email
			elseif ($data[0] == 0)
				{
			$erreur = 'Il y a au moins une erreur dans une saisie. Veuillez recommencer, svp.';
				}
				else
				{
				$erreur = 'Problème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion. Prévenir le webmaster.'; 
				}
	}
				else
				{
				$erreur = 'Au moins un des 2 champs est vide. Merci de recommencer.';
				}
}
         
?>

Et pour info, le code html avec son appel $erreur:

        <form action="identif.php" method="post" id="enreg">

                <p>Formulaire d'identification:</p>
				<p class="double">
        <label>Votre email:</label> 
		<input type="text" id="email" name="email" value="<?php if (isset($_POST['email'])) echo htmlentities(trim($_POST['email'])); ?>" />
         </p>
		 <p class="double">
		 <label>Votre mot de passe:</label> <input type="password" id="password" name="password" value="<?php if (isset($_POST['password'])) echo htmlentities(trim($_POST['password'])); ?>" />
          </p>
          <br /><br /><br />
          <input type="submit" name="connexion" value="connexion" id="Connexion" />
        </form><br /><br />
<p><?php

if (isset($bravo)) echo $bravo;
if (isset($erreur)) echo $erreur;
	
?>
</p>

Si vous voyez quelque chose, moi je craque un peu là....
D'avance merc
Modifié par boro64 (28 Dec 2010 - 17:03)
Salut,

Je ne connais pas ta base de donnée mais je présume que ton
$data[0]
équivaut en faite à l'id de l'utilisateur. Donc avec ton code, seul l'utilisateur avec l'identifiant 1 peut se connecter
$data[0] == 1


De même avec le code actuel il t'es impossible de savoir si il y a plusieurs utilisateurs qui ont le même identifiant (ce qui est au passage une erreur dans la conception de la base de donnée)


$sql = '
    SELECT *
    FROM clients
    WHERE email="'. mysql_real_escape_string($_POST['email']) .'"
    AND mdp= "'. mysql_real_escape_string(md5($_POST['password'])) .'";
';

$req = mysql_query($sql) or die ('Erreur SQL !<br />'. $sq l.'<br />'. mysql_error());

if(mysql_num_rows($req) === 0){
    //Ton code en cas de compte inexistant OU de non correspondance email <=> mdp
}elseif(mysql_num_rows($req) === 1){
    //Ton code si la correspondance email <=> mdp est correcte et est présente une seule fois
}else{
    //Ton code si la correspondance email <=> mdp est correcte et est présente plusieurs fois
    //ce qui doit quand même être rare mais ça c'est a toi de vérifier lors de la création de compte
}

Modifié par bilhackmac (18 Dec 2010 - 02:07)
Bonsoir
et mille excuses bilhackmac, mais je n'avais pas du cocher "être prevenu" par mail, et n'ai donc jamais vu ta réponse avant aujourd'hui... Smiley confused
Alors, oui ça fonctionne (j'avais un peu plus analysé tout ça, et j'arrive à la solution suivante:
         $count = mysql_num_rows($req);
 elseif ($count > 1)
                                 {
                                        $erreur = 'Problème dans notre base de donnée : plusieurs membres ont les mêmes identifiants de connexion. Prévenir le webmaster.';
                                       
                                 }
                                 else
                                 {
                                        $erreur = 'Il y a au moins une erreur dans une saisie. Veuillez recommencer, svp.';
                                 }
                         }
                         else
                         {
                                $erreur = 'Au moins un des 2 champs est vide. Merci de recommencer.';
                         }

Encore toutes mes excuses pour ne pas t'avoir répondu plus tôt....
boro64 a écrit :

Encore toutes mes excuses pour ne pas t'avoir répondu plus tôt....


Aucun problème, c'est un forum pas un chat Smiley biggrin