Comment remplacer if(mysqli_num_rows($req)!=1) en pdo
Résolu
charles5353
Messages postés
28
Date d'inscription
Statut
Membre
Dernière intervention
-
charles5353 Messages postés 28 Date d'inscription Statut Membre Dernière intervention -
charles5353 Messages postés 28 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
j essaye de convertir mon code mysqli en pdo mais je bloque la dessus
merci
j essaye de convertir mon code mysqli en pdo mais je bloque la dessus
if(mysqli_num_rows($req)!=1)
merci
9 réponses
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
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'");
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 )
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
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 } ?>
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
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