Authentifier une personne [Résolu]

mobrobot 57 Messages postés vendredi 13 janvier 2017Date d'inscription 9 décembre 2017 Dernière intervention - 3 déc. 2017 à 17:45 - Dernière réponse : yg_be 4116 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention
- 9 déc. 2017 à 10:14
Bonsoir à tout le monde s'ils vous j'ai besoin d'aide pour crée un système d'authentification

qui dira à l'utilisateur de se connecter ou de crée un compte pour commenter quelque chose ou de télécharger un fichier sur le site. je voudrais un peut de guide pour le faire.

MERCI A VOUS
Afficher la suite 
57Messages postés vendredi 13 janvier 2017Date d'inscription 9 décembre 2017 Dernière intervention

23 réponses

Répondre au sujet
yg_be 4116 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 3 déc. 2017 à 18:02
0
Utile
2
bonsoir, lecture suggérée:
TP : créer un espace membres 
mobrobot 57 Messages postés vendredi 13 janvier 2017Date d'inscription 9 décembre 2017 Dernière intervention - 3 déc. 2017 à 18:05
merci j’avais essayé
yg_be 4116 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention > mobrobot 57 Messages postés vendredi 13 janvier 2017Date d'inscription 9 décembre 2017 Dernière intervention - 3 déc. 2017 à 18:15
et?
as-tu d'autres questions?
Commenter la réponse de yg_be
mobrobot 57 Messages postés vendredi 13 janvier 2017Date d'inscription 9 décembre 2017 Dernière intervention - Modifié par mobrobot le 4/12/2017 à 09:50
0
Utile
Bonjour j'ai traité le TP : créer un espace membres: de openclassrooms je me suis en sortir avec la page d'inscription . mais avec ma page de connexion il n'arrive pas a reconnaitre le pseudo et le mot de passe qui est déjà dans la base de données voici le code de la connexion
<?php 
//connexion à la base de donnees
  try{
     $bdd = new PDO('mysql:host=localhost;dbname=membres_du_site', 'root', '');
    }catch(PDOExeption $e){
      die ('Erreur : ' .$e->getMessage());
    }

 if( isset($_POST['formconnexion']) AND !empty($_POST['formconnexion'])){

$pseudo = htmlspecialchars(($_POST['pseudo']));
      
$pass  = ($_POST['pass']);

if(!empty($pseudo) AND !empty($pass)){
        
// Hachage du mot de passe
$pass_hache = password_hash($_POST['pass'], PASSWORD_DEFAULT);

//Vérification des identifiants
$req = $bdd->prepare('SELECT id FROM membre WHERE pseudo = :pseudo AND pass = :pass');
        $req->execute(array(

'pseudo' => $pseudo,
 'pass' => $pass_hache));

 $result = $req->fetch();

 if(!$result){
 $msgC = 'Mouvais identifiant ou mot de passe !';
}
else
 {
   session_start();
  $_SESSION['id'] = $result['id'];
  $_SESSION['pseudo'] = $pseudo;
         
 $msgC = "Vous êtes connecté !";
}
       
}
 else
{
$msgC = 'Tous champs les doivent être remplir !';
 }

}
    


?>


 <link href="main.css" rel="stylesheet" />
 <meta charset="utf-8">
    <h3>Se connecter</h3>
    <br /><br />
    <form method="POST" action="">
     <input type="pseudo" name="pseudo" placeholder="Mail" />
     <input type="password" name="pass" placeholder="Mot de passe" />
     <input type="submit" name="formconnexion" value="se connecter"/>
     
    </form>
    <?php if(isset($msgC)) {echo '<font color="darkred">' .$msgC. '</font>';} ?>


MERCI D'AVENCE
Commenter la réponse de mobrobot
jordane45 19211 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 12 décembre 2017 Dernière intervention - 4 déc. 2017 à 10:59
0
Utile
10
Bonjour,

Commence par appliquer ceci :
http://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs

Ensuite, htmlspecialchars n'est à utiliser que pour l'affichage... en aucun cas pour faire une requête

Et après, il est préférable de placer l'instruction session_start(); au début de ton code php pas en plein milieu.

Et pour finir, je t'invite à appliquer ce qui est ici :
http://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code

NB : !empty vérifie déjà le isset ... pas besoin de mettre les deux !

Tiens nous au courant une fois les modifications faites.



mobrobot 57 Messages postés vendredi 13 janvier 2017Date d'inscription 9 décembre 2017 Dernière intervention > mobrobot 57 Messages postés vendredi 13 janvier 2017Date d'inscription 9 décembre 2017 Dernière intervention - 4 déc. 2017 à 13:30
voici le code de la page d’inscription
<?php
 //connexion à la base de donnees
   require_once 'dbconnectM.php';

 if(isset($_POST['forminscription'])){

  $pseudo = htmlspecialchars($_POST['pseudo']);
  $mail = htmlspecialchars($_POST['mail']);

  
  //vérification de mot de pass
  $pass = ($_POST['pass']);
  $pass2 = ($_POST['pass2']);
  

  if(!empty($_POST['pseudo']) AND !empty($_POST['pass']) AND !empty($_POST['pass2']) AND !empty($_POST['mail'])){

   //verification de pseudo
   if(strlen($pseudo) < 25){
    //verification de mot de passe

    if($pass == $pass2){
     
     
     if(filter_var($mail, FILTER_VALIDATE_EMAIL)){
      // verification de l'adresse mail
      $pass_hache = password_hash($_POST['pass'], PASSWORD_DEFAULT);


     $sql = "INSERT INTO membre (pseudo,pass,email,date_inscription)  VALUES(:pseudo, :pass, :email, CURDATE())";

      $datas = array('pseudo' => $pseudo, 'pass' => $pass_hache,'email' => $mail);

     //Execution de la requete
     try{
       $requete = $bdd -> prepare($sql) ;
       $requete->execute($datas) ;
     }catch(Exception $e){
       // en cas d'erreur :
        echo " Erreur ! ".$e->getMessage();
        echo " Les datas : " ;
       print_r($datas);
     }



      
     }
     else
     {
      $msg = 'votre adresse mail n\'est pas valide !';
     }
    }
    else
    {
     $msg = 'vos mot de passe ne correspond pas !';
    }

   }
   else
   {
    $msg = 'votre pseudo ne doivent pas depesser 25 caractère !';
   }

  }
  else
  {
   $msg = 'Tous les champs doivent être remplir !';
  }

 }//formInscriptioon

?>


<link href="main.css" rel="stylesheet" />
<meta charset="utf-8">

<form class="form_ins" method="POST" action="">
     <table>
      <tr>
       <td align="right">
        <label for="pseudo">Pseudo :</label>
       </td>
      
       <td>
        <input type="text" name="pseudo" id="pseudo" placeholder="votre pseudo"  />
       </td>
      </tr>
      
      <tr>
       <td align="right">
        <label for="pass">Mot de passe :</label>
       </td>
      
       <td>
        <input type="password" name="pass" id="pass" placeholder="votre mot de password" />
       </td>
      </tr>
      
      <tr>
       <td align="right">
        <label for="pass2">Retapez votre mot de passe :</label>
       </td>
      
       <td>
        <input type="password" name="pass2" id="pass2" placeholder="retapez le mot password" />
       </td>
      </tr>
      
      <tr>
       <td align="right">
        <label for="mail">Mail :</label>
       </td>
      
       <td>
        <input type="email" name="mail" id="mail" placeholder="votre adresse email" />
       </td>
      </tr>
      
      
      
      <tr>
       <td></td>
       
       <td  align="center">
        <br />
        <input type="submit" name="forminscription" value="je m'inscris" />
       </td>
      </tr>
      
     </table>
     
    </form>
    <?php if(isset($msg)) {echo '<font color="darkred">' .$msg. '</font>';} ?>



et pour la page de connexion

<?php 
session_start();
//connexion à la base de donnees
  require_once 'dbconnectM.php';

   error_reporting(E_ALL);
  ini_set('display_errors', TRUE);
  ini_set('display_startup_errors', TRUE);

    if( isset($_POST['formconnex'])){

       $pseudo = htmlspecialchars($_POST['pseudo']); 
       // Hachage du mot de passe

     $pass_hache = password_hash($_POST['pass'], PASSWORD_DEFAULT);


     // Vérification des identifiants

     $sql = 'SELECT id FROM membre WHERE pseudo = :pseudo AND pass = :pass';
     $datas = array('pseudo' => $pseudo,'pass' => $pass_hache);

     //Execution de la requete
     try{
       $requete = $bdd -> prepare($sql) ;
       $requete->execute($datas) ;
     }catch(Exception $e){
       // en cas d'erreur :
        echo " Erreur ! ".$e->getMessage();
        echo " Les datas : " ;
       print_r($datas);
     }
     

     $resultat = $requete->fetch();
     if (!$resultat)
     {
      
         $msgC = 'Mauvais identifiant ou mot de passe !';
     }

     else

     {

         $_SESSION['id'] = $resultat['id'];

         $_SESSION['pseudo'] = $pseudo;

         $msgC = 'Vous êtes connecté !';

     }
       
      }

?>


 <link href="main.css" rel="stylesheet" />
 <meta charset="utf-8">
    <h3>Se connecter</h3>
    <br /><br />
    <form method="POST" action="">
     <input type="pseudo" name="pseudo" placeholder="Mail" />
     <input type="password" name="pass" placeholder="Mot de passe" />
     <input type="submit" name="formconnex" value="se connecter"/>
     
    </form>
    <?php if(isset($msgC)) {echo '<font color="darkred">' .$msgC. '</font>';} ?>
yg_be 4116 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention > mobrobot 57 Messages postés vendredi 13 janvier 2017Date d'inscription 9 décembre 2017 Dernière intervention - 4 déc. 2017 à 18:33
peut-être utile de corriger "input type" dans ceci:
<input type="pseudo" name="pseudo" placeholder="Mail" />
yg_be 4116 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention > yg_be 4116 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 4 déc. 2017 à 20:21
et peut-être que la placeholder prête-t-il à confusion: pseudo ou mail?
mobrobot > yg_be 4116 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 4 déc. 2017 à 21:42
Ces corrigé. mais l'erreur est toujour là
yg_be 4116 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention > mobrobot - 4 déc. 2017 à 22:08
as-tu vérifié que la table membre était correctement peuplée?
Commenter la réponse de jordane45
jordane45 19211 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 12 décembre 2017 Dernière intervention - 4 déc. 2017 à 22:56
0
Utile
5
Bon...
Histoire de te faire gagner du temps... voici un code fonctionnel.
(sachant qu'il est préférable d'utiliser le password_verify" au lieu de regarder en bdd comme tu le fais...
Voici :
http://www.commentcamarche.net/forum/affich-34340900-login-password-php#7
mobrobot 57 Messages postés vendredi 13 janvier 2017Date d'inscription 9 décembre 2017 Dernière intervention - 5 déc. 2017 à 06:19
ok je te tiendrais au courant merci
mobrobot 57 Messages postés vendredi 13 janvier 2017Date d'inscription 9 décembre 2017 Dernière intervention > mobrobot 57 Messages postés vendredi 13 janvier 2017Date d'inscription 9 décembre 2017 Dernière intervention - 5 déc. 2017 à 20:07
Bonsoir j'ai essayé le code que tu ma suggérer le problème est quand je remplir le formulaire et je clic sur registre on m'affiche : Fatal error: Call to undefined function get_cnx() parai pour le button valider aussi
jordane45 19211 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 12 décembre 2017 Dernière intervention > mobrobot 57 Messages postés vendredi 13 janvier 2017Date d'inscription 9 décembre 2017 Dernière intervention - 5 déc. 2017 à 20:30
Il faut t'inspirer du code ... pas forcément le copier/coller tel quel...
Mais bon...
Plus haut dans la discussion ... il y a
<?php
// fichier de connexion à la bdd : cnxBdd.php
function get_cnx(){
 $bdd = NULL;
 try{
  $bdd = new PDO('mysql:host=localhost;dbname=siteTest', $userdb, $passdb);
  $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
 } catch(PDOException $e) {
    die('Erreur : ' . $e->getMessage());
 }
 return $bdd;
}


Mais tu peux éventuellement remplacer les lignes de code :
$cnn = get_cnx();

par
global $bdd;
$cnn = $bdd;
mobrobot 57 Messages postés vendredi 13 janvier 2017Date d'inscription 9 décembre 2017 Dernière intervention > jordane45 19211 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 12 décembre 2017 Dernière intervention - 6 déc. 2017 à 17:18
Bonsoir hier je travailler la dessus.
sa ne fonction qu' avec le cryptage de mot de passe
Sha1
mais pas avec
password_hash($_POST['pass'], PASSWORD_DEFAULT)
je sais pas pourquoi sa ne fonctionne pas avec
password_hash
yg_be 4116 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention > mobrobot 57 Messages postés vendredi 13 janvier 2017Date d'inscription 9 décembre 2017 Dernière intervention - 6 déc. 2017 à 20:12
quand tu utilises password_hash, utilises-tu password_verify?
il est indispensable d'utiliser password_verify, deux appels à password_hash ne vont pas retourner le même hash (heureusement).
tu peux tester avec ceci pour te convaincre:
<?php
session_start();
echo "<br>v0.1<br>";
$motdepasse="coucou,toi";
$hache1=password_hash($motdepasse, PASSWORD_DEFAULT);
$hache2=password_hash($motdepasse, PASSWORD_DEFAULT);

$idem= password_verify($motdepasse, $hache1)? "ok" : "NOK";
echo $hache1;
echo "<br>";
echo $idem;
echo "<br>";

$idem= password_verify($motdepasse, $hache2)? "ok" : "NOK";
echo $hache2;
echo "<br>";
echo $idem;
echo "<br>";
?>
Commenter la réponse de jordane45
mobrobot 57 Messages postés vendredi 13 janvier 2017Date d'inscription 9 décembre 2017 Dernière intervention - 9 déc. 2017 à 05:44
0
Utile
1
Bonjour Merci pour la réponse , j'ai essayé ce que tu ma proposé et j'ai fouiller par tous sur le net.
j'arrive toujours pas à le faire. je Bug la dessus. bon je veux me contracte avec
Sha1


Je vous remercie tous de m’avoir AIDEZ
yg_be 4116 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 9 déc. 2017 à 10:14
très bien, peux-tu marquer alors ce sujet comme résolu?
Commenter la réponse de mobrobot