Vérification de ma requête préparée

Résolu
bonjour a tous
je suis occupé a sécuriser mon site
j en suis a al vérification d une adresse mail dans ma base de donnée
et j aurais souhaiter savoir si cette requête était ok
  <?php
         //affichage des erreurs PHP
         error_reporting(E_ALL);
         ini_set('display_errors', TRUE);
         ini_set('display_startup_errors', TRUE);
         // Include pour la connexion à la bdd
         require_once 'config.php';
         //récupération PROPRE des variables AVANT de les utiliser
         $email = !empty($_SESSION['email']) ? $_SESSION['email'] : NULL;
         //préparation de la requête et des variables
         //$sql = "SELECT * FROM neuw WHERE email=?";
         $datas = [$email];
	$stmt = $sql->prepare("SELECT * FROM neuw where email = ?");
$stmt->execute([$_GET['email']]);
foreach ($stmt as $row) {
  print_r($row);
}
        //exécution de la requête
         try{
         $stmt = $bdd->prepare($sql);
         $stmt->execute($datas); 
         $user = $stmt->fetch();
         }catch(Exception $e){
         // en cas d'erreur :
         echo " Erreur ! ".$e->getMessage();
         echo " Les datas : " ;
         print_r($datas);
         }
         if (!empty($user)) {
         echo "email existe ";
         } else {
         if(empty($_SESSION['story'])) {
         $_SESSION['story'] = TRUE;
         require_once "myModal.php";
         }
         } 
         ?>

5 réponses

  1. bonjour Jordane
    oui bien sur
    je le fais de suite
    bonne journée
    1. jordane

      encore une fois un grand merci pour cette réponse super détaillée
      oui c est c est ce que je voulais dire en fait cela a parcourir le tableau je me suis mal exprimé

      merci pour les liens je vais les consulter et en apprendre plus sur cette façon de parcourir les tableaux

      car c est vrai que j ai du mal aussi a comprendre cette logique

      comme promis cet hiver je vais m atteler a en apprendre plus sur ce php

      quand je vois déjà sur ce que j ai appris en quelques semaines cela m encourage ...

      donc voila encore une forme de requête apprise et donc une partie de mon site sécurisée
      1. Modérateur
        N'oublie pas de mettre tes discussions en RESOLUE une fois la question traitée...
        Il y a celle la.. mais je pense que tu en as oublier une ou deux autres...
    2. Modérateur

      est il possible de se connecter en pdo et de faire la requête en mysqli
      je sais cela n a pas de sens ...

      Non


      dans l exemple de php je vois que l on utilise
      foreach ($stmt as $row)
      qui est une fonction qui parcours un tableau
      donc cela signifie que l on recherche le contenu de $stmt dans une colonne ?

      Non plus...

      Cela sert à parcourir le tableau...
      https://www.php.net/manual/fr/control-structures.foreach.php

      Pour ton exemple, ça ne sert à rien.
      Tu as fait un fetch et non un fetchAll
      https://www.php.net/manual/fr/pdostatement.fetch.php
      https://www.php.net/manual/fr/pdostatement.fetchall.php

      FETCH retourne UNE ligne de résultat de ta requête SQL ( un array contenant les valeurs des différentes colonnes correspondant à LA ligne retournée par ta requête )

      FETCHALL retourne TOUTES les lignes ( un ARRAY à 2 Dimensions, contenant toutes les lignes du résultat et pour chaque ligne, un array avec les valeurs... ) de résultat de ta requête SQL ( dans le cas où tu en attends plusieurs )

      Comme là tu ne cherches qu'un seul utilisateur ( tu filtre sur son EMAIL donc il ne devrait y en avoir qu'un... ), un FETCH suffit.

      Je t'invite, avant de continuer, à apprendre ce qu'est un ARRAY "simple" et un ARRAY 2D.
      Et à apprendre à les manipuler, les parcourir
      C'est le b.a.ba de la programmation .... ( ça .. et les IF/ELSE ... )
      Sans ce minimum de connaissance.. impossible d'apprendre convenablement...

      1. Bonjour Jordane

        merci pour ta réaction et ta réponse toujours aussi éducative et complète
        mais je continue d apprendre
        je ne me suis pas contenter de faire bêtement ce que tu viens de m expliquer
        et donc en fait
        je viens de comprendre toutes mes erreurs
        j avoue avoir beaucoup de mal avec ces variables
        donc le bon code avec requête préparée
        est celui ci
        et bien évidement la connexion s effectue avec $bdd

        j aurais néanmoins une question de curiosité
        est il possible de se connecter en pdo et de faire la requête en mysqli
        je sais cela n a pas de sens ...

        et alors encore une
        dans l exemple de php je vois que l on utilise
        foreach ($stmt as $row)

        qui est une fonction qui parcours un tableau
        donc cela signifie que l on recherche le contenu de $stmt dans une colonne ?

         <?php
                 //affichage des erreurs PHP
                 error_reporting(E_ALL);
                 ini_set('display_errors', TRUE);
                 ini_set('display_startup_errors', TRUE);
                 // Include pour la connexion à la bdd
                 require_once 'config.php';
                 //récupération PROPRE des variables AVANT de les utiliser
                 $email = !empty($_SESSION['email']) ? $_SESSION['email'] : NULL;
                 //préparation de la requête et des variables
                 $sql = "SELECT * FROM neuw WHERE email=?";
                 $datas = [$email];
                 //exécution de la requête
                 try{
                 $stmt = $bdd->prepare($sql);
                 $stmt->execute($datas); 
                 $user = $stmt->fetch();
                 }catch(Exception $e){
                 // en cas d'erreur :
                 echo " Erreur ! ".$e->getMessage();
                 echo " Les datas : " ;
                 print_r($datas);
                 }
                 if (!empty($user)) {
                 echo "email existe ";
                 } else {
                 if(empty($_SESSION['story'])) {
                 $_SESSION['story'] = TRUE;
                 require_once "myModal.php";
                 }
                 } 
        1. Modérateur
          Bonjour,

          Ben non ça ne semble pas bon.....

          Tu as du code en "double"
          Tu ne sembles pas utiliser les bonnes variables ...

          Par exemple, comment se nomme la variable qui contient la connexion à ta bdd ( qui provient du code contenu dans ton fichier 'config.php'; )
          $bdd ? $sql ?

          Comprends tu ce que font les lignes 13 et 14 puis les lignes 20 et 21 ?
          Crois tu que la variable $sql de la ligne 20 soit "conforme" à ce qui est attendu ?

          Bon.. comme je ne veux pas qu'on ai encore besoin de 50 messages pour arriver à te faire écrire ton code correctement.. voila donc :
          Décommente la ligne 11
          à la ligne 20, assure toi d'utiliser la "bonne" variable pour la connexion à ta bdd devant l'instruction prepare
          Puis, pour finir .. Supprime les lignes 13 à 17