Test sur Requette en php

bidlag Messages postés 21 Statut Membre -  
ElementW Messages postés 5690 Statut Contributeur -
Bonjour,
je veux faire un teste sur une requette sql en php :
exemple :
$sel=$bdd->query("SELECT typea FROM inscription WHERE id_user LIKE ".$id." AND pass LIKE ".$mdp."");
Si($sel) est vrai {
}
si non
{}
cordialement,

1 réponse

  1. ElementW Messages postés 5690 Statut Contributeur 1 293
     
    'lut
    1. On utilise généralement pas
    LIKE
    pour tester une égalité stricte, mais plutôt l'opérateur
    =
    .
    2. Tu as un risque d'injection SQL si tu n'as pas filtré le contenu de
    $id
    et
    $mdp
    auparavant. Il faut utiliser les requêtes préparées, c'est plus simple.
    3. PDOStatement::fetch() permet de récupérer les valeurs de la ligne actuelle sous forme d'un tableau avec
    PDO::FETCH_ASSOC
    , et renvoie
    false
    s'il n'y a pas ou plus de données. En l'occurrence,
    false
    voudra dire que le compte n'existe pas ou que le mot de passe est incorrect.
    Corrigé, ça donnerait ça:
    $req = $bdd->prepare("SELECT typea FROM inscription WHERE id_user = :id AND pass = :mdp");
    $rep = $res->execute(array(
        ':id' => $id,
        ':mdp' => $mdp
    ));
    $ligne = $rep->fetch(PDO::FETCH_ASSOC);
    if ($ligne !== false) {
       ...
       $ligne['typea'] contient la valeur de la colonne "typea" du compte
       ...
    } else {
       ...
    } 
    0
    1. bidlag Messages postés 21 Statut Membre
       
      Voila le principe de l'authentification tu peux m'aider et merci
      <?php
      $bdd=new PDO('mysql:host=localhost;dbname=sao','root','');
      if(!$bdd)
      {
      die("Impossible de se connecter a la base ou de selectionner la base !");
      }/*
      $db = mysql_select_db('sao',$connexion);
      if(!$db)
      {
      die("Impossible de selectionner la base !");
      }*/
      $user = $_POST['user'];
      $pass = $_POST['pass'];
      $type= $_POST['type'];

      if(empty($user) || empty($pass))
      {
      echo '<SCRIPT LANGUAGE="JavaScript">document.location.href="cnx.php"
      </SCRIPT>';
      }
      else
      {
      $reponse=$bdd->query ("SELECT * FROM inscription WHERE login='$user'");
      //$req = mysql_query($sql) or die("Erreur SQL");
      while($data = $reponse->fetch())
      {
      $mdp = $data['pass'];
      $id = $data['id_user'];
      }
      $student=$bdd->query("SELECT * FROM inscription WHERE typea LIKE 'Student'");
      $admin=$bdd->query("SELECT * FROM inscription WHERE typea LIKE 'Admin'");
      $local=$bdd->query("SELECT * FROM inscription WHERE typea LIKE 'Local'");
      $restau=$bdd->query("SELECT * FROM inscription WHERE typea LIKE 'Restaurant'");
      $housing=$bdd->query("SELECT * FROM inscription WHERE typea LIKE 'Housing'");
      $transport=$bdd->query("SELECT * FROM inscription WHERE typea LIKE 'Transport'");
      $materiel=$bdd->query("SELECT * FROM inscription WHERE typea LIKE 'Material'");

      if($pass == $mdp && $typea=='Student' && $student!==false)
      {
      session_start();

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

      echo '<SCRIPT LANGUAGE="JavaScript">document.location.href="user_student.php"
      </SCRIPT>';
      }
      else if($pass==$mdp && $type=='Admin' && $admin!==false)
      {
      session_start();
      $_SESSION['user']=$user;
      $_SESSION['id']=$id;
      echo'<script>document.location.href="user_admin.php"</script>';
      }
      else if($pass==$mdp && $type=='Local'&& $local!==false)
      {
      session_start();
      $_SESSION['user']=$user;
      $_SESSION['id']=$id;
      echo'<script>document.location.href="user_local.php"</script>';
      }
      else if($pass==$mdp && $type=='Restaurant' && $restau!==false)
      {
      session_start();
      $_SESSION['user']=$user;
      $_SESSION['id']=$id;
      echo'<script>document.location.href="user_restaurant.php"</script>';
      }
      else
      {
      echo '<SCRIPT LANGUAGE="JavaScript">document.location.href="cnx.php"
      </SCRIPT>';
      }
      }
      0
      1. ElementW Messages postés 5690 Statut Contributeur 1 293 > bidlag Messages postés 21 Statut Membre
         
        Utilises les balises < code > la prochaine fois.
        Ça va pas du tout. PDO est inutilisable avec les
        or die
        , c'est purement incompatible car PDO utilise les exceptions.
        À part ça, qu'est-ce qui cloche? Je ne vois rien de flagrant à part des injections SQL possibles.
        0