Erreur lecture écrite base de données

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Erreur lecture écrite base de données

Re: Erreur lecture écrite base de données

par Spols » 26 mars 2019, 16:54

$id et $password contienent aussi ce qu'il faut ?

Re: Erreur lecture écrite base de données

par Paurek » 26 mars 2019, 15:11

Quand j'affiche la variable stmt j'obtiens:

object(mysqli_stmt)[2]
public 'affected_rows' => int 1
public 'insert_id' => int 0
public 'num_rows' => int 1
public 'param_count' => int 1
public 'field_count' => int 2
public 'errno' => int 0
public 'error' => string '' (length=0)
public 'error_list' =>
array (size=0)
empty
public 'sqlstate' => string '00000' (length=5)
public 'id' => int 1

Re: Erreur lecture écrite base de données

par Spols » 26 mars 2019, 15:08

vérifie chaque variable et controlant sa valeur.

si rien ne s'affiche, probablement que $stmt->num_rows > 0 retourne false je vérifierai cela en premier

Re: Erreur lecture écrite base de données

par Paurek » 26 mars 2019, 14:39

Pas moyen de trouver le problème, je pense même à recommencer

Re: Erreur lecture écrite base de données

par Paurek » 25 mars 2019, 15:16

Toujours le même problème, en exécutant la demande directement depuis phpmyadmin il me retourne bien l'id et le password du username concerné.

Re: Erreur lecture écrite base de données

par @rthur » 25 mars 2019, 15:13

Je pense que le problème viens de la ligne 22 du authenticate car je mets un ? au lieu de la valeur username que l'utilisateur à entrer.
A priori tu fais un bind_param() juste derrière pour remplacer le point interrogation par le nom d'utilisateur, donc ça devrait être bon

Re: Erreur lecture écrite base de données

par Paurek » 25 mars 2019, 14:59

Je pense que le problème viens de la ligne 22 du authenticate car je mets un ? au lieu de la valeur username que l'utilisateur à entrer.
Mais comment corriger cela ? Merci.

Re: Erreur lecture écrite base de données

par @rthur » 22 mars 2019, 13:08

Donc $_POST['username'] n'est pas vide ?
Il faut que tu cherches à quel moment dans ton code ça ne se comporte pas comme prévu.
Affiche tes variables, affiche ta requête SQL et teste là dans phpmyadmin ce n'est que comme ça que tu verras où ça coince

Re: Erreur lecture écrite base de données

par Paurek » 22 mars 2019, 12:49

En faisant un var_dump($_POST); il m'indique le nom d'utilisateur et le mot de passe que j'utilise pour me connecté et ils sont correct.

Je ne comprend vraiment pas pourquoi la connexion ne s'effectue pas, merci pour ta réponse.

Re: Erreur lecture écrite base de données

par @rthur » 22 mars 2019, 12:25

Seul la variable username retourne un résultat NULL lorsqu’on clique sur connexion.
Celle que tu reçois en $_POST ?
Tu peux faire un var_dump($_POST) pour voir toutes les variables renvoyées par ton formulaire.

Re: Erreur lecture écrite base de données

par Paurek » 22 mars 2019, 09:11

Seul la variable username retourne un résultat NULL lorsqu’on clique sur connexion.

Re: Erreur lecture écrite base de données

par @rthur » 21 mars 2019, 18:50

Bonjour,

Il faut que tu avances davantage dans ton debugage, à quel moment ton script ne se comporte pas comme prévu ?
Vérifie avec var_dump() tout au long de ton script le contenu des variables.

Erreur lecture écrite base de données

par Paurek » 21 mars 2019, 10:48

Bonjour, voila tout fonctionnait hier cependant aujourd'hui plus rien ne fonctionne et rien n'a été modifié. Je n'arrive plus à écrire sur ma base de données quand un utilisateur s'inscrit et je n'arrive pas non plus à vérifier le mot de passe quand il se connecte.

Je vous fournit le code de la page login et register ainsi que la structure de la bdd, merci.

Fonction pour login:

Code : Tout sélectionner

<?php session_start(); // Info de co. $DATABASE_HOST = 'localhost'; $DATABASE_USER = 'root'; $DATABASE_PASS = '****'; $DATABASE_NAME = 'espace_membre'; // Connection à la base $con = mysqli_connect($DATABASE_HOST, $DATABASE_USER, $DATABASE_PASS, $DATABASE_NAME); if ( mysqli_connect_errno() ) { // En cas d'erreur die ('Erreur connexion BDD: ' . mysqli_connect_error()); } // Voir si les données sont bien reçus if ( !isset($_POST['username'], $_POST['password']) ) { // Données non reçus die ('Veuillez remplir le champ nom utilisateur et mot de passe !'); } // Préparation de la bdd if ($stmt = $con->prepare('SELECT id, password FROM accounts WHERE username = ?')) { $stmt->bind_param('s', $_POST['username']); $stmt->execute(); // Stocker le résultat $stmt->store_result(); if ($stmt->num_rows > 0) { $stmt->bind_result($id, $password); $stmt->fetch(); // Vérifier le mot de passe if (password_verify($_POST['password'], $password)) { // Connection de l'utilisateur // Créer la session session_regenerate_id(); $_SESSION['loggedin'] = TRUE; $_SESSION['name'] = $_POST['username']; $_SESSION['id'] = $id; header('Location: home.php'); } else { echo 'Mot de passe incorrect !'; } } else { echo 'Nom utilisateur incorrect !'; } $stmt->close(); }
Page register:

Code : Tout sélectionner

<?php //connexion à la base de données: $BDD = array(); $BDD['host'] = "localhost"; $BDD['user'] = "root"; $BDD['pass'] = "****"; $BDD['db'] = "espace_membre"; $mysqli = mysqli_connect($BDD['host'], $BDD['user'], $BDD['pass'], $BDD['db']); if(!$mysqli) { echo "Connexion non établie."; exit; } //par défaut, on affiche le formulaire (quand il validera le formulaire sans erreur avec l'inscription validée, on l'affichera plus) $AfficherFormulaire=1; //traitement du formulaire: if(isset($_POST['username'],$_POST['password'])){//l'utilisateur à cliqué sur "S'inscrire", on demande donc si les champs sont défini avec "isset" if(empty($_POST['username'])){//le champ username est vide, on arrête l'exécution du script et on affiche un message d'erreur echo "Le champ username est vide."; } elseif(!preg_match("#^[a-zA-Z0-9]+$#",$_POST['username'])){//le champ username est renseigné mais ne convient pas au format qu'on souhaite qu'il soit, soit: que des lettres minuscule + des chiffres (je préfère personnellement enregistrer le username de mes accounts en minuscule afin de ne pas avoir deux username identique mais différents comme par exemple: Admin et admin) echo "Le username doit être renseigné en lettres minuscules sans accents, sans caractères spéciaux."; } elseif(strlen($_POST['username'])>25){//le username est trop long, il dépasse 25 caractères echo "Le username est trop long, il dépasse 25 caractères."; } elseif(empty($_POST['password'])){//le champ mot de passe est vide echo "Le champ Mot de passe est vide."; } elseif(empty($_POST['email'])){//le champ mot de passe est vide echo "Le champ Email est vide."; } elseif(empty($_POST['poids'])){//le champ mot de passe est vide echo "Le champ Poids est vide."; } elseif(mysqli_num_rows(mysqli_query($mysqli,"SELECT * FROM accounts WHERE username='".$_POST['username']."'"))==1){//on vérifie que ce username n'est pas déjà utilisé par un autre membre echo "Ce username est déjà utilisé."; } elseif(!preg_match("#^[0-9]+$#",$_POST['poids'])){ echo "Le champ poids doit être uniquement en chiffres."; } else { //toutes les vérifications sont faites, on passe à l'enregistrement dans la base de données: //Bien évidement il s'agit là d'un script simplifié au maximum, libre à vous de rajouter des conditions avant l'enregistrement comme la longueur minimum du mot de passe par exemple if(!mysqli_query($mysqli,"INSERT INTO accounts SET username='".$_POST['username']."', password='".md5($_POST['password'])."', email='".$_POST['email']."', poids='".$_POST['poids']."'")){//on crypte le mot de passe avec la fonction propre à PHP: md5() echo "Une erreur s'est produite: ".mysqli_error($mysqli); } else { echo "Vous êtes inscrit avec succès!"; //on n'affiche plus le formulaire $AfficherFormulaire=0; } } } if($AfficherFormulaire==1){ ?> <head> <link href="register.css" rel="stylesheet" type="text/css"> <meta charset="utf-8"> <title>Inscription - Performance Saut</title> <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.1/css/all.css"> </head> <body> <div class="register"> <form method="post" action="register.php"> <div class="center-text-h-v"> <input type="text" name="username" placeholder="Nom d'utilisateur" required> <input type="password" name="password" placeholder="Mot de passe" required><br> <input type="text" name="email" placeholder="Email" required> <input type="text" name="poids" placeholder="Poids (en KG)" required> </form> <form action="/panel_inscription/home.php" method="get"> <input type="submit" value="S'inscrire"> </form> </div> </body> <?php }
Structure bdd:
Image

Merci à vous pour votre aide.