Scénario de comparaison de login et mot de passe [Résolu]

blog-machine 114 Messages postés samedi 27 juillet 2013Date d'inscription 7 mai 2014 Dernière intervention - 18 févr. 2014 à 22:34 - Dernière réponse : f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscriptionModérateurStatut 9 mars 2018 Dernière intervention
- 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 ?
Afficher la suite 

Votre réponse

3 réponses

jordane45 22137 Messages postés mercredi 22 octobre 2003Date d'inscriptionContributeurStatut 21 août 2018 Dernière intervention - 19 févr. 2014 à 00:29
0
Merci
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..


Commenter la réponse de jordane45
BBFUNK01 1313 Messages postés jeudi 16 juillet 2009Date d'inscription 20 juin 2014 Dernière intervention - 26 févr. 2014 à 23:31
0
Merci
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+

Commenter la réponse de BBFUNK01
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscriptionModérateurStatut 9 mars 2018 Dernière intervention - 27 févr. 2014 à 14:06
0
Merci
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();
?>
Commenter la réponse de f0xi

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.