Scénario de comparaison de login et mot de passe

Résolu
blog-machine Messages postés 114 Date d'inscription samedi 27 juillet 2013 Statut Membre Dernière intervention 7 mai 2014 - 18 févr. 2014 à 22:34
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 - 27 févr. 2014 à 14:06
Bonjour,

Voici le scénario :
- Mon client se connecte à mon site
- Il remplit un formulaire (voir champs plus bas)
- Il reçoit un mail de confirmation
- Dans ce mail, il y a un lien avec pour le nom de dossier un codage md5
dans ce dossier il y a les fichiers dont j'ai besoin pour la suite (copy dans répertoire).

- Un clic sur le lien on arrive sur la page de login et du mot de passe

et maintenant :

J'ai une base de donnée UTILISATEURS avec des champs

- prénom
- nom
- nomlogin et
- nompasse
- email

Je souhaite
a) - Connexion à la BDD


//Bon, là je me connecte à ma base avec les informations de mon hébergeur, ok

ob_start();
$host="mysql51-114.perso"; // Host name - nom serveur
$login="atohmn66base"; // Mysql nom utilisateur
$password="*******"; // Mysql mot de passe
$db_name="atohmn66base"; // nom de la base de donnée
$tbl_name="UTILISATEURS"; // nom de la table

// Connection au serveur et sélection de la base

mysql_connect("$host", "$login", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

Mais, Ou est-ce que je l'indique dans le mail de contact ?

Je souhaite :

a) - Connexion à la BDD
b) - Insertion en BDD de données
puis pour la connexion au site :
c) - Recherche de l'utilisateur et de son password pour le comparer à ce que l'utilisateur aura saisi pour se loguer.

// Define $nomlogin and $motpasse - définition des variables login et password 

$nomlogin=$_POST['nomlogin'];
$motpasse=$_POST['motpasse'];

// protection contre les injections MySQL

$nomlogin = stripslashes($nomlogin);
$motpasse = stripslashes($motpasse);

$nomlogin = mysql_real_escape_string($nomlogin);
$motpasse = mysql_real_escape_string($motpasse);

// Est-ce que "nomlogin" et "motpasse" sont bien les clés de ma table "utilisateurs" oui sont ils bien placés ?

$sql="SELECT * FROM $tbl_name WHERE nomlogin='$nomlogin' and motpasse='$motpasse'";
$result=mysql_query($sql);

// Comptage des rangs de la table

$count=mysql_num_rows($result);

// Si le résultat match login et mot de passe, la table doit être à 1 rang

if($count==1){

// - enregistre le login et le mot de passe et envoi vers le fichier "connect.php"
session_register("nomlogin");
session_register("motpasse");
header("location:login_success.php");
}
else {
echo "Mauvais nom d'utilisateur ou mauvais mot de passe";
}

ob_end_flush();

Où se trouve le code à garder, à jeter, à réutiliser ?

3 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
19 févr. 2014 à 00:29
Désolé de te dire ça ... mais on ne peut pas passer notre temps à regarder chaque ligne de code que tu ecris.(ou récupère sur le net )....
Teste le et tu verras si ça fonctionne...

Si ça plante... tu reviens avec le message d'erreur et des explications claires sur le souci rencontré.



NB: le code que tu nous montres est un code "typique" de connexion au site.
Si nécéssaie..Il faudra bien entendu l'adapter à tes besoins

Par contre ce code NE CREE pas l'utiliasateur dans la BDD.

A la rigueur inspire toi de ces tutos :

http://fr.openclassrooms.com/informatique/cours/creer-un-espace-membre-pour-son-site

http://www.evain.info/script/getFile.php?idf=46

N'hésites pas à en chercher d'autre sur le net si besoin..


0
BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 6
26 févr. 2014 à 23:31
Hello,

Ce tuto te sera d'une immense utilité blog-machine : http://fr.openclassrooms.com/informatique/cours/concevez-votre-site-web-avec-php-et-mysql

A+

0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
27 févr. 2014 à 14:06
j'aurais plutôt vus ça pour ta connexion BDD :

<?php
ob_start();


/** config.php :: Begin **/

  define('_DB_HOST', "mysql51-114.perso");  // Host name - nom serveur
  define('_DB_USER', "atohmn66base");       // Mysql nom utilisateur
  define('_DB_PWD',  "*******");            // Mysql mot de passe 
  define('_DB_BASE', "atohmn66base");       // nom de la base de donnée 

  define('_DB_PREFIX', ""); // préfixe des tables
  define('tblUsers',    _DB_PREFIX."UTILISATEURS"); // table utilisateurs
  define('tblRights',   _DB_PREFIX."DROITS");       // table des droits utilisateurs
  define('tblInfos',    _DB_PREFIX."INFOS");        // table des infos utilisateurs
  
  /* surcharge de mysqli */
    class mysqliex extends mysqli{
      public function queryToArray($sql, $idFieldName, &$array){
        if($result = $this->query($sql))
        {
          $array = array();
          while($row = $result->fetch_assoc())
          {
            $array[ $row[$idFieldName] ] = $row;
          }
          $result->free();
          return true;
        }
        return false;
      }
    }
    
  /* création de l'objet $DB connécté à la base de donnée */
    if($DB = new mysqliex(_DB_HOST, _DB_USER, _DB_PWD, _DB_BASE))
    {

    } 
    else 
    {
      exit('No database connection.');
    }
   
/** config.php :: End **/

?>


avec fichier de config à appeler en require (erreur si fichier non dispo, meilleur souplesse d'appel)

des constantes globale (define) qui peuvent être appelées de n'importe ou.

et un objet MySQLi ($DB) qui est bien plus pratique à utiliser que MySQL (obsolete).

et l'autre partie, avec quelques corrections :

<?php
/* tools.php :: begin */
class Tools {
  public function getParam($param, $default=null)
  {
    return isset($_GET[$param]) ? $_GET[$param] : $default;
  }
  public function postParam($param, $default=null)
  {
    return isset($_POST[$param]) ? $_POST[$param] : $default;
  }
  public function validateStr($str, $regexp=null, $minLen=null, $maxLen=null)
  {
    $r = is_string($str);
    $l = strlen($str);
    if($regexp!==null){
      $r = $r && preg_match($regexp, $str);
    }
    if($minLen !== null){
      $r = $r && $l>=$minLen;
    }
    if($maxLen !== null){
      $r = $r && $l<=$maxLen;
    }
    return $r;
  }
}
/* tools.php :: end */

require_once('tools.php'); 

// recupération login/pass posté 

 $login= substr(Tools::postParam('nomlogin', false),0,20); 
 $passw= sha1( substr(Tools::postParam('motpasse', false),0,16) ); 

if(!$login || !$passw )
{
  echo 'Erreur nom d\'utilisateur ou de mots de passe non définit.';
}
else
{  // on succes if((!$login || !$passw)

  // Validation login/pass
  if( 
    !Tools::validate($login, '/^[a-z0-9_-.]{4,16}$/i', 4, 16) || 
    !Tools::validate($passw, '/^[a-z0-9]{32,128}$/i', 32, 128)
    )
  {
    echo 'Erreur validation nom d\'utilisateur ou de mots de passe.';
  }
  else
  {   // on success if(!Tools::validate**
    
    // Récupération d'un utilisateur correspondant
    $sql= sprintf("SELECT %s FROM %s WHERE nomlogin='%s' and motpasse='%s'",
            '*',
            tblUsers,
            $login,
            $passw
          );
          
    if($result=$DB->query($sql))
    {
       // si on à trouvé au moins un utilisateur
      if($result->num_rows == 1)
      {
        session_register("login");
        session_register("passw"); 
        header("location:login_success.php");
      }
      else
      {
        // on fail : if($result->num_rows == 1)
        echo 'L\'utilisateur n\'existe pas.';
      }
    }
    else
    {
      // on fail : if($result=$DB->query($sql))
      echo 'Erreur lors de la récupération d\'un utilisateur.',
    }
  }
}
ob_end_flush();
?>
0
Rejoignez-nous