S'il vous plait aidez moi .la page adminpage n arrive pas

Résolu
moulaaa123 Messages postés 4 Statut Membre -  
jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   -
<?php
 try
{

$bdd = new PDO("mysql:host=localhost;dbname=mini_projet;charset=utf8", 'root','');




if(!empty($_POST['username'])&& !empty($_POST['password'])){
 
 $user=$_POST['username'];
 $psw =$_POST['password'];
$req=$bdd->prepare('SELECT id_admin ,password FROM admin WHERE id_admin = :id_admin AND password = :password' );
$req->execute(array(
'id_admi' => $user,
'password' => $psw));
$rps=$req->fetch();

 if($rps['id_admin'] === $user && $rps['password'] === $psw){
  header("location:adminpage.php");
 }
 else
 {
  echo ' username or passwor est incorrect ';
  header("location:login.php");
 }

}}

catch(Exception $e) {
 die('Erreur :' .$e->getMessage());

 echo 'la base de donner n est pas connecter ' ;
}

?>

EDIT : Ajout des balises de code

2 réponses

  1. cs_PaTaTe Messages postés 1471 Date d'inscription   Statut Contributeur Dernière intervention   503
     
    J'espère que ce script est pas à destination d'un site en prod !

    A lire ton code les passwords sont en clair dans ta base de données et c'est super dangereux de faire comme ça et tu peux perdre gros. Une boite comme Optical Center a eu une ammende de pres de 50 000€ pour cette erreur ! On crpyte un minimum, tu n'es pas sensé avoir accès à ce type de données.

    Et puis soit plus précis dans ta question (et donne nous les eventuels retour d'erreur de PHP, etc)

    Déjà, j'utiliserais pas empty() mais isset()

    1
    1. moulaaa123 Messages postés 4 Statut Membre
       
      merci merci beaucoup :) :D . pour votre repense le problem a mon code c empty() je l ai changé par isset() . et ca marche
      0
    2. moulaaa123 Messages postés 4 Statut Membre
       
      DSL MAIS J'ai un probleme que je n'arrive toujours pas à resoudre je ne sais pas si c'est au niveau de phpmyadmin où à mon code. Bon bref là je suis entrain de réaliser un site en local avec wampserver 2.0, j'aimerais que les utilisateurs qui le souhaite s'inscrive dans le site pour ce là il y a eu aucun probleme.Mais maintenant j'aimerais proteger quelques pages afin que seul les utilisateurs déja inscrit puissent y acceder en entrant leur pseudo et mot de passe pour s'identifier.Voici le probleme je n'arrive pas à faire cette vérification.......s'il vous plait aidez moi à resoudre dites moi ou ce trouve l'erreur?? ce probleme c'est vraiment urgent pour moi.....Merci.. / resumé (verification du login et du mot de passe dans la bdd)
      0
    3. cs_PaTaTe Messages postés 1471 Date d'inscription   Statut Contributeur Dernière intervention   503
       
      Que le site soit en local ou non, à partir du moment où des tiers (quelqu'il soit) y ont un accès, tu dois crypter les passes. Un simple hack sur serveur SQL et tout ton serveur tombe en rideau si tous les identifiants sont en clair.
      0
    4. moulaaa123 Messages postés 4 Statut Membre
       
      je suis déçu comment je fait ca :( ! . ya tjr le mm problème quant je tape n importe quelle username et password tjr arrive a la page adminpage.php.
      0
    5. cs_PaTaTe Messages postés 1471 Date d'inscription   Statut Contributeur Dernière intervention   503
       
      Là, tu demande à ce que quelqu'un fasse le taf à ta place, à toi de le faire. Y a de bon cours en PHP sur le site OpenClassRooms (https://openclassrooms.com/fr/)

      Et Google est aussi ton ami, je me suis amusé à faire une recherche et on trouve des pistes à suivre.
      0
  2. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Bonjour,

    Bien que tu viennes de mettre ce sujet en résolu... je me permet d'intervenir.

    Je ne vois pas en quoi le empty serait la cause du souci...
    Sachant que le "!empty" fait déjà un isset (en plus de vérifier que la variable n'est pas vide)

    Concernant ton code.. il faut que tu places le code de connexion à ta BDD dans un fichier à part.
    Ainsi; tu n'auras qu'à l'inclure dans les pages de ton site où tu en auras besoin au lieu de le recopier à chaque fois...
    (et on pense à gérer les erreurs en PDO : voir ce lien pour les explications : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs )
    <?php
    //Fichier cnxBdd.php
    
    try{
     $bdd =new PDO('mysql:host=localhost; dbname=mini_projet; charset=utf8', 'root', '');
     // Activation des erreurs PDO
     $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
     $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
    } catch(PDOException $e) {
        die('Erreur : ' . $e->getMessage());
    }
    

    Ensuite... dans ton fichier login.php:
    (on active l'affichage des erreurs php : https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code )

    Ton IF ne sert à rien
     if($rps['id_admin'] === $user && $rps['password'] === $psw)
     

    Puisque tu as déjà les mêmes critères dans ton where ....

    Et enfin..Pour gérer l'authéntification sur les différentes pages, tu dois utiliser les variables de session

    <?php
    // fichier login.php
    //affichage des erreurs PHP
    error_reporting(E_ALL);
    ini_set('display_errors', TRUE);
    ini_set('display_startup_errors', TRUE);
    
    //démarrage des sessions
    session_start();
    
    //connexion à la bdd 
    require_once "cnxBdd.php";
    
    //on récupère proprement les variables AVANT de les utiliser :
    $user=!empty($_POST['username']) ? $_POST['username'] : NULL ;
    $psw =!empty($_POST['password']) ? $_POST['password'] : NULL ;
    
    if($user && $psw){
     
      $sql = 'SELECT id_admin ,password FROM admin WHERE id_admin = :id_admin AND password = :password';
      $datas = array(':id_admi' => $user, ':password' => $psw);
      
      //Execution de la requete
      try{
        $requete = $bdd -> prepare($sql) ;
        $requete->execute($datas);
        $rps = $req->fetch();
        if(!empty($rps)){
          $_SESSION['id_admin'] = $id_admin;
          header("location:adminpage.php");
          exit(); //toujours mettre un exit après une redirection
        }else{
          echo ' username or passwor est incorrect ';
        }
      }catch(Exception $e){
        // en cas d'erreur :
         echo " Erreur ! ".$e->getMessage();
         echo " Les datas : " ;
        print_r($datas);
      }
    }
    ?>
    

    Et donc.. pour voir si un utilisateur est bien connecté ou non.. il suffit de placer ceci au début des pages à protéger
    <?php
    //fichier adminpage.php
    
    //affichage des erreurs PHP
    error_reporting(E_ALL);
    ini_set('display_errors', TRUE);
    ini_set('display_startup_errors', TRUE);
    
    //démarrage des sessions
    session_start();
    
    //vérification si l'utilisateur est connecté.
    if(empty($_SESSION['id_admin'])){
      header("location:login.php");
      exit(); //toujours mettre un exit après une redirection
    }
    


    Concernant le conseil pour le hashage du password.. il faut en effet utiliser les méthodes
    password_hash() : http://php.net/manual/fr/function.password-hash.php
    et password_verify() : https://www.php.net/manual/fr/function.password-verify.php
    Mais ça .. je te laisse le coder.

    Et surtout.. lorsque tu postes du code sur le forum, merci d'utiliser les BALISES DE CODE :
    https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code

    1