Comment remplacer if(mysqli_num_rows($req)!=1) en pdo
Résolu/Fermé
charles5353
Messages postés
28
Date d'inscription
lundi 5 juillet 2021
Statut
Membre
Dernière intervention
5 février 2022
-
5 juil. 2021 à 08:17
charles5353 Messages postés 28 Date d'inscription lundi 5 juillet 2021 Statut Membre Dernière intervention 5 février 2022 - 5 juil. 2021 à 12:35
charles5353 Messages postés 28 Date d'inscription lundi 5 juillet 2021 Statut Membre Dernière intervention 5 février 2022 - 5 juil. 2021 à 12:35
9 réponses
jordane45
Messages postés
38347
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 décembre 2024
4 719
5 juil. 2021 à 08:28
5 juil. 2021 à 08:28
Bonjour,
Tout dépend de comment tu as créé $req
Si tu as fait un fetchAll (comme c'est recommandé..) .. dans ce cas il te suffit de faire un COUNT
Tout dépend de comment tu as créé $req
Si tu as fait un fetchAll (comme c'est recommandé..) .. dans ce cas il te suffit de faire un COUNT
charles5353
Messages postés
28
Date d'inscription
lundi 5 juillet 2021
Statut
Membre
Dernière intervention
5 février 2022
5 juil. 2021 à 08:36
5 juil. 2021 à 08:36
merci pour la réponse
la variable
$req
est crée a ce stade
le code en mysqli etait
la variable
$req
est crée a ce stade
$req = $bdd->exec("SELECT * FROM utilisateurs WHERE pseudo='$Pseudo' AND password='$password'");
le code en mysqli etait
$req=mysqli_query($mysqli,"SELECT * FROM membres WHERE pseudo='$Pseudo' AND mdp='$Mdp'");
jordane45
Messages postés
38347
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 décembre 2024
4 719
5 juil. 2021 à 09:21
5 juil. 2021 à 09:21
Alors... vu que tu as commencé ( dans ta précédente question) à faire les choses bien ( c'est à dire utiliser les requêtes préparées..), ton code devient :
A noter que ton code, actuellement, monre un jolie faille de sécurité....
on ne stocke JAMAIS le mot de passe en clair dans la bdd !!!
Il faudrait le hasher ( voir la fonction password_hash )
$sql = "SELECT * FROM utilisateurs WHERE pseudo=:pseudo AND password= :password"; $datas = [ ':pseudo'=> $Pseudo, ':password'=>$Mdp ]; //Execution de la requete try{ $requete = $bdd -> prepare($sql) ; $requete->execute($datas) ; //on stocke le résultat de la requête SELECT dans un array $resultat = $requete->fetchAll(); $nbResult = !empty($resultat) ? count($resultat) : 0; // on compte le nombre de résultats retournés par la requête select }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); } if($nbResult !=1 ) { //...
A noter que ton code, actuellement, monre un jolie faille de sécurité....
on ne stocke JAMAIS le mot de passe en clair dans la bdd !!!
Il faudrait le hasher ( voir la fonction password_hash )
charles5353
Messages postés
28
Date d'inscription
lundi 5 juillet 2021
Statut
Membre
Dernière intervention
5 février 2022
5 juil. 2021 à 09:54
5 juil. 2021 à 09:54
merci pour la correction et le code
mais malheureusement le reste de mon code apparemment pose des problèmes
c est un code que j'ai pris comme exemple
car je ne suis pas du tout familier au php ni a sa documentation que je trouve pas très bien expliquée
pour le hash du password
j aurais souhaiter si je pouvais m inspirer de ce tuto
https://www.it-swarm-fr.com/fr/php/comment-utiliser-password-hash/1053934485/
voici l extrait de code qui permet de modifier le mot de passe
mais malheureusement le reste de mon code apparemment pose des problèmes
c est un code que j'ai pris comme exemple
car je ne suis pas du tout familier au php ni a sa documentation que je trouve pas très bien expliquée
pour le hash du password
j aurais souhaiter si je pouvais m inspirer de ce tuto
https://www.it-swarm-fr.com/fr/php/comment-utiliser-password-hash/1053934485/
voici l extrait de code qui permet de modifier le mot de passe
<?php error_reporting(E_ALL); ini_set('display_errors', true); ini_set('display_startup_errors', true); echo "<p>Renseignez le formulaire ci-dessous pour modifier vos informations:</p>"; //si le formulaire est envoyé ("envoyé" signifie que le bouton submit est cliqué) if (isset($_POST['valider'])) { //vérifie si tous les champs sont bien pris en compte: if (!isset($_POST['nouveau_mdp'], $_POST['confirmer_mdp'], $_POST['password"'])) { echo "Un des champs n'est pas reconnu."; } else { if ($_POST['nouveau_mdp'] != $_POST['confirmer_mdp']) { echo "Les mots de passe ne correspondent pas."; } else { $password = md5($_POST['password']); $NouveauMdp = md5($_POST['nouveau_mdp']); //$req=mysqli_query($mysqli,"SELECT * FROM membres WHERE pseudo='$Pseudo' AND mdp='$Mdp'"); $sql = "SELECT * FROM utilisateurs WHERE pseudo=:pseudo AND password= :password"; $datas = [':pseudo' => $Pseudo, ':password' => $Mdp]; //Execution de la requete try { $requete = $bdd->prepare($sql); $requete->execute($datas); //on stocke le résultat de la requête SELECT dans un array $resultat = $requete->fetchAll(); $nbResult = !empty($resultat) ? count($resultat) : 0; // on compte le nombre de résultats retournés par la requête select } catch(Exception $e) { // en cas d'erreur : echo " Erreur ! " . $e->getMessage(); echo " Les datas : "; print_r($datas); } if ($nbResult != 1) { echo "Mot de passe actuel incorrect."; } else { //tout est OK, on met à jours son compte dans la base de données: // if(mysqli_query($mysqli,"UPDATE membres SET mdp='$NouveauMdp' WHERE pseudo='$Pseudo'")) //préparation de la requête et des variables $sql = "UPDATE utilisateurs SET password='$NouveauMdp' WHERE pseudo=?"; $datas = [$Pseudo]; //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); } if ($requete) // if ($req = $bdd->exec("UPDATE utilisateurs SET password='$NouveauMdp' WHERE pseudo='$Pseudo'")) { echo "Mot de passe modifié avec succès!"; $TraitementFini = true; //pour cacher le formulaire } else { echo "Une erreur est survenue, merci de réessayer ou contactez-nous si le problème persiste."; //echo "<br>Erreur retournée: ".mysqli_error($mysqli); } } } } } if (!isset($TraitementFini)) { ?> <br> <form method="post" action="espace-membre.php?modifier=mdp"> <input type="password" name="nouveau_mdp" placeholder="Nouveau mot de passe..." required><!-- required permet d'empêcher l'envoi du formulaire si le champ est vide --> <input type="password" name="confirmer_mdp" placeholder="Confirmer nouveau passe..." required> <input type="password" name="mdp" placeholder="Votre mot de passe actuel..." required> <input type="submit" name="valider" value="Valider la modification"> </form>
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
jordane45
Messages postés
38347
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 décembre 2024
4 719
Modifié le 5 juil. 2021 à 11:48
Modifié le 5 juil. 2021 à 11:48
Ca devrait donner un truc du genre :
<?php //--------------------------------- //Affichage des erreurs PHP //--------------------------------- error_reporting(E_ALL); ini_set('display_errors', true); ini_set('display_startup_errors', true); //--------------------------------- //connexion à la bdd ?? // require_once 'tonfichierdeconnexion.php' ?? //--------------------------------- //------------------------------------- // Découpage du code en Fonctions.. // C'est plus facile à maintenir et plus "propre" //-------------------------------------- /** * Récupère un user via son Pseudo * @global type $bdd * @param type $pseudo * @return boolean */ function getUserByPseudo($pseudo) { global $bdd; $sql = "SELECT * FROM utilisateurs WHERE pseudo=:pseudo"; $datas = [":pseudo" => $pseudo]; try { $requete = $bdd->prepare($sql); $requete->execute($datas); //on stocke le résultat de la requête SELECT dans un array return $requete->fetchAll(); } catch (Exception $e) { // en cas d'erreur : echo " Erreur ! " . $e->getMessage(); echo " Les datas : "; print_r($datas); return false; } } /** * Authentification de l'utilisateur * @param type $pseudo * @param type $password * @return string */ function authUser($pseudo, $password) { $result = []; $user = getUserByPseudo($pseudo); $nbResult = !empty($user) ? count($user) : 0; // on compte le nombre de résultats retournés par la requête select if ($nbResult != 1) { $result['ERROR'] = "Utilisateur inconnu"; } else { $user_pass_bdd = $user[0]['password']; if (password_verify($password, $user_pass_bdd)) { $result['SUCCESS'] = $user[0]; } else { $result['ERROR'] = " Mot de passe actuel incorrect !"; } } return $result; } /** * Mise à jour du password en BDD * @global type $bdd * @param type $pseudo * @param type $NouveauMdp * @return boolean */ function updatePassword($pseudo, $NouveauMdp) { global $bdd; $pwd = password_hash($NouveauMdp, PASSWORD_DEFAULT); $sql = "UPDATE utilisateurs SET password= :pwd WHERE pseudo= :pseudo "; $datas = [':pseudo' => $pseudo, ':pwd' => $pwd]; //Execution de la requete try { $requete = $bdd->prepare($sql); return $requete->execute($datas); } catch (Exception $e) { // en cas d'erreur : echo " Erreur ! " . $e->getMessage(); echo " Les datas : "; print_r($datas); return false; } } //--------------------------------- // Récupération PROPRE des variables AVANT de les utiliser //--------------------------------- $password = !empty($_POST['password']) ? $_POST['password'] : NULL; $nouveau_mdp = !empty($_POST['nouveau_mdp']) ? $_POST['nouveau_mdp'] : NULL; $confirmer_mdp = !empty($_POST['confirmer_mdp']) ? $_POST['confirmer_mdp'] : NULL; $TraitementFini = false; //--------------------------------- // Traitemetn du formulaire //--------------------------------- //si le formulaire est envoyé ("envoyé" signifie que le bouton submit est cliqué) if (isset($_POST['valider'])) { if (!$password || !$nouveau_mdp || !$confirmer_mdp) { $msg = "Un des champs n'est pas reconnu."; } elseif ($nouveau_mdp != $confirmer_mdp) { $msg = "Les mots de passe ne correspondent pas."; } else { $user = authUser($pseudo, $password); if (empty($user['ERROR'])) { if (updatePassword($pseudo, $nouveau_mdp)) { $msg = "Mot de passe modifié avec succès!"; $TraitementFini = true; } else { $msg = "Une erreur est survenue, merci de réessayer ou contactez-nous si le problème persiste."; } } } } if (!empty($msg)) { echo "<div class='alert'>$msg</div>"; } if (!$TraitementFini) { echo "<p>Renseignez le formulaire ci-dessous pour modifier vos informations:</p>"; ?> <br> <form method="post" action="espace-membre.php?modifier=mdp"> <input type="password" name="nouveau_mdp" placeholder="Nouveau mot de passe..." required><!-- required permet d'empêcher l'envoi du formulaire si le champ est vide --> <input type="password" name="confirmer_mdp" placeholder="Confirmer nouveau passe..." required> <input type="password" name="mdp" placeholder="Votre mot de passe actuel..." required> <input type="submit" name="valider" value="Valider la modification"> </form> <?php } ?>
charles5353
Messages postés
28
Date d'inscription
lundi 5 juillet 2021
Statut
Membre
Dernière intervention
5 février 2022
5 juil. 2021 à 12:09
5 juil. 2021 à 12:09
Merci pour ce code complètement remis a neuf
J'aurais une question pour le password_hash
Je n'ai besoin que de cette ligne
Après l'exécution du code
Je reçois ce message d erreur
Un des champs n'est pas reconnu
J'aurais une question pour le password_hash
Je n'ai besoin que de cette ligne
$pwd = password_hash($NouveauMdp, PASSWORD_DEFAULT);
Après l'exécution du code
Je reçois ce message d erreur
Un des champs n'est pas reconnu
jordane45
Messages postés
38347
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 décembre 2024
4 719
5 juil. 2021 à 12:15
5 juil. 2021 à 12:15
Après l'exécution du code
Je reçois ce message d erreur
Un des champs n'est pas reconnu
Ah oui, ton input se nomme "mdp"
il faut donc modifier la ligne
$password = !empty($_POST['password']) ? $_POST['password'] : NULL;
par
$password = !empty($_POST['mdp']) ? $_POST['mdp'] : NULL;
charles5353
Messages postés
28
Date d'inscription
lundi 5 juillet 2021
Statut
Membre
Dernière intervention
5 février 2022
Modifié le 5 juil. 2021 à 12:26
Modifié le 5 juil. 2021 à 12:26
Merci pour la correction
Pour plus de facilité et de compréhension j'ai modifie le input
Apparemment j ai une erreur de variable dans cette ligne a présent
Notice: Undefined variable: pseudo
Je ne vois pas du tout ce qui coince
Pour plus de facilité et de compréhension j'ai modifie le input
Apparemment j ai une erreur de variable dans cette ligne a présent
Notice: Undefined variable: pseudo
$user = authUser($pseudo, $password);
Je ne vois pas du tout ce qui coince
charles5353
Messages postés
28
Date d'inscription
lundi 5 juillet 2021
Statut
Membre
Dernière intervention
5 février 2022
5 juil. 2021 à 12:30
5 juil. 2021 à 12:30
Ah je pense comprendre
La variable n a pas été définie
Donc je dois la crée
La variable n a pas été définie
Donc je dois la crée
charles5353
Messages postés
28
Date d'inscription
lundi 5 juillet 2021
Statut
Membre
Dernière intervention
5 février 2022
5 juil. 2021 à 12:35
5 juil. 2021 à 12:35
Super encore une fois un bon travail
J'ai juste récupérer la variable global pseudo de la connexion
Merci et bonne journée
J'ai juste récupérer la variable global pseudo de la connexion
Merci et bonne journée