Vérification de ma requête préparée [Résolu]

Signaler
Messages postés
2934
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
23 juin 2021
-
Messages postés
2934
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
23 juin 2021
-
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

Messages postés
33031
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 juin 2021
3 579
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


Messages postés
2934
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
23 juin 2021
138
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";
         }
         } 
Messages postés
33031
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 juin 2021
3 579

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...






Messages postés
2934
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
23 juin 2021
138
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
Messages postés
33031
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 juin 2021
3 579
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...
Messages postés
2934
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
23 juin 2021
138
bonjour Jordane
oui bien sur
je le fais de suite
bonne journée