Problème de requête MySQLi
Résolu
firpic
-
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour, j'ai un problème avec mon code, j'ai fait un formulaire d'inscription qui fonctionnait mais maintenant, il ne fonctionne plus
je ne comprend pas pourquoi
voici le code de la page:
et la connexion au server MySQL fonctionne car je peux me connecter a mon site avec des identifiant mis avec phpMyAdmin.
Pour plus de précision demandez-moi.
Merci.
je ne comprend pas pourquoi
voici le code de la page:
<!DOCTYPE html> <html> <head> <meta name="googlebot" content="noindex"> <link rel="icon" type="images/png" sizes="512x512" href="android-chrome-512x512.png"> <link rel="stylesheet" href="serie/allstyle.css"> <link rel="stylesheet" href="style.css"> <link rel="stylesheet" href="style1.css"> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Streawer</title> </head> <body style="background-color: #444444;"> <!-- En-tête de la page--> <script> $(document).keydown(function(e){ if(e.which === 123){ return false; } }); </script> <div class="entete" onclick="window.location.reload()"> <img src="img/logo.png" id="logo" alt="Logo Streawer"/> <a href="main.php" id="nm" style="color: #4DB89A;"><h1 id="nom">Streawer</h1></a> </div> <?php require('config.php'); if (isset($_REQUEST['username'], $_REQUEST['email'], $_REQUEST['password'])){ // verifier si le nom d'utilisateur existe $select = mysqli_query($conn, "SELECT * FROM `users` WHERE username='".$_POST['username']."'"); // récupérer le nom d'utilisateur et supprimer les antislashes ajoutés par le formulaire $username = stripslashes($_REQUEST['username']); $username = mysqli_real_escape_string($conn, $username); if(mysqli_num_rows($select)){ // récupérer l'email et supprimer les antislashes ajoutés par le formulaire $email = stripslashes($_REQUEST['email']); $email = mysqli_real_escape_string($conn, $email); // récupérer le mot de passe et supprimer les antislashes ajoutés par le formulaire $password = stripslashes($_REQUEST['password']); $password = mysqli_real_escape_string($conn, $password); //requéte SQL + mot de passe crypté $query = "INSERT into `users` (username, email, password) VALUES ('$username', '$email', '".hash('sha256', $password)."')"; // Exécute la requête sur la base de données $res = mysqli_query($conn, $query); if($res){ echo " <div class='sucess'> <h3>Vous êtes inscrit avec succès.</h3> <p>Cliquez ici pour vous <a href='https://streawer.000webhostapp.com/'>connecter</a></p> </div>"; } }else{ $message = "Le nom d'utilisateur est deja utiliser."; } }else{ ?> <form class="box" action="" method="post"> <h1 class="box-logo box-title"><a href="https://streawer.000webhostapp.com/">Streawer</a></h1> <h1 class="box-title">S'inscrire</h1> <input type="text" class="box-input" name="username" placeholder="Nom d'utilisateur" required /> <input type="text" class="box-input" name="email" placeholder="Email" required /> <input type="password" class="box-input" name="password" placeholder="Mot de passe" required /> <input type="submit" name="submit" value="S'inscrire" class="box-button" /> <?php if (! empty($message)) { ?> <p class="errorMessage"><?php echo $message; ?></p> <?php }?> <p class="box-register">Déjà inscrit? <a href="https://streawer.000webhostapp.com/">Connectez-vous ici</a></p> </form> <?php } ?> </body> <?php include('footer.php'); ?> </html>
et la connexion au server MySQL fonctionne car je peux me connecter a mon site avec des identifiant mis avec phpMyAdmin.
Pour plus de précision demandez-moi.
Merci.
A voir également:
- Roxane cherche des informations pour écrire un rapport sur la jeunesse. avec un moteur de recherche généraliste, elle souhaite limiter les résultats de sa recherche aux pages de l’organisation internationale du travail. quelle requête doit-elle taper dans le champ de recherche ?
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Google moteur de recherche page d'accueil - Guide
- Rechercher ou entrer l'adresse mm - recherche google - Guide
- Copiez la ligne qui indique aux moteurs de recherche de ne pas référencer la page. - Forum Réseaux sociaux
- Comment taper / sur clavier - Guide
2 réponses
Bonjour,
Affiche les erreurs PHP
(mets ce code au début de ton script php )
et à chaque requête, gère l'affichage éventuel des erreurs mysqli en cas d'erreur dans tes requêtes
sous la forme:
reviens nous voir avec le code modifié et les éventuels messages d'erreur si le souci persiste
Affiche les erreurs PHP
(mets ce code au début de ton script php )
error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE);
et à chaque requête, gère l'affichage éventuel des erreurs mysqli en cas d'erreur dans tes requêtes
sous la forme:
if (!mysqli_query($conn, " Ta requete sql ...")) { printf("Message d'erreur : %s\n", mysqli_error($link)); }
reviens nous voir avec le code modifié et les éventuels messages d'erreur si le souci persiste
Plusieurs choses.
Déjà, on essaye de placer le maximum de code PHP en dehors du HTML ( en général avant le code html )
Il faut également éviter d'utiliser $_POST. Dans ton cas tu fais du post .. donc il faut utiliser $_POST
On place le Javascript à la fin de la page, juste avant le </body> de préférence
On ne place rien en dehors des balises <body></body>
Déjà, on essaye de placer le maximum de code PHP en dehors du HTML ( en général avant le code html )
Il faut également éviter d'utiliser $_POST. Dans ton cas tu fais du post .. donc il faut utiliser $_POST
On place le Javascript à la fin de la page, juste avant le </body> de préférence
On ne place rien en dehors des balises <body></body>
<?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('config.php'); //Je découpe le oode en "fonctions" ( que tu pourrais placer dans un fichier à part si // jamais tu t'en resserts dans d'autres pages ) /** * Récupère les infos d'un utilisateur via son username */ function getUserByName($username){ global $conn; $username = mysqli_real_escape_string($conn, $username); $sql = "SELECT * FROM `users` WHERE username='$username'"; if(!$select = mysqli_query($conn, $sql)){ printf("Message d'erreur : %s\n", mysqli_error($conn)); return false; }else{ return $select; } } /** * verifier si le nom d'utilisateur existe */ function checkIfUserExist($username){ $select = getUserByName($username); return mysqli_num_rows($select) ? true : false; // retourne true si il existe sinon false } function addUser($username,$email,$password){ global $conn; $username = mysqli_real_escape_string($conn, $username); $email = mysqli_real_escape_string($conn, $email); $password = mysqli_real_escape_string($conn, $password); $sql = "INSERT into `users` (username, email, password) VALUES ('$username', '$email', '".hash('sha256', $password)."')"; if (!mysqli_query($conn, $sql)) { printf("Message d'erreur : %s\n", mysqli_error($link)); return false; }else{ return true; } } //juste le temps des tests, pour voir si ton formulaire s'envoie bien echo "<br> ---> POST :"; var_dump($_POST); // Récupération PROPRE des variables AVANT de les utiliser // pour ça, j'utilise l'écriture ternaire ( sorte de IF/ELSE ) $username = !empty( $_POST['username']) ? $_POST['username'] : NULL; $email = !empty( $_POST['email']) ? $_POST['email'] : NULL; $password = !empty( $_POST['password']) ? $_POST['password'] : NULL; //traitement du formulaire if($username && $email && $password ){ if( checkIfUserExist($username) ){ $message = "Le nom d'utilisateur est deja utiliser."; }else{ if(addUser($username,$email,$password))){ $message = "<div class='sucess'> <h3>Vous êtes inscrit avec succès.</h3> <p>Cliquez ici pour vous <a href='https://streawer.000webhostapp.com/'>connecter</a></p> </div>"; }else{ $message = " Erreur lors de l'insertion en BDD"; } } } ?> <!DOCTYPE html> <html> <head> <meta name="googlebot" content="noindex"> <link rel="icon" type="images/png" sizes="512x512" href="android-chrome-512x512.png"> <link rel="stylesheet" href="serie/allstyle.css"> <link rel="stylesheet" href="style.css"> <link rel="stylesheet" href="style1.css"> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Streawer</title> </head> <body style="background-color: #444444;"> <!-- En-tête de la page--> <div class="entete" onclick="window.location.reload()"> <img src="img/logo.png" id="logo" alt="Logo Streawer"/> <a href="main.php" id="nm" style="color: #4DB89A;"><h1 id="nom">Streawer</h1></a> </div> <form class="box" action="" method="post"> <h1 class="box-logo box-title"><a href="https://streawer.000webhostapp.com/">Streawer</a></h1> <h1 class="box-title">S'inscrire</h1> <input type="text" class="box-input" name="username" placeholder="Nom d'utilisateur" required /> <input type="text" class="box-input" name="email" placeholder="Email" required /> <input type="password" class="box-input" name="password" placeholder="Mot de passe" required /> <input type="submit" name="submit" value="S'inscrire" class="box-button" /> <?php if (!empty($message)) { ?> <p class="errorMessage"><?php echo $message; ?></p> <?php }?> <p class="box-register">Déjà inscrit? <a href="https://streawer.000webhostapp.com/">Connectez-vous ici</a></p> </form> <?php } ?> <?php include('footer.php'); ?> <script> $(document).keydown(function(e){ if(e.which === 123){ return false; } }); </script> </body> </html>
des que j'accède a la page cette erreur s'affiche :
Puis une fois le formulaire remplie et envoyer ces erreur s'affcihe :
J'ai modifie la ligne 44 car ce n'était pas la meme variable donc j'ai mis $conn au lieu de $link. Du coup il me met cette erreur :
---> POST :array(0) { }
Puis une fois le formulaire remplie et envoyer ces erreur s'affcihe :
---> POST :array(4) { ["username"]=> string(4) "test" ["email"]=> string(4) "test" ["password"]=> string(4) "test" ["submit"]=> string(10) "S'inscrire" }
Notice: Undefined variable: link in /storage/ssd3/384/16626384/public_html/register.php on line 44
Warning: mysqli_error() expects parameter 1 to be mysqli, null given in /storage/ssd3/384/16626384/public_html/register.php on line 44
Message d'erreur :
J'ai modifie la ligne 44 car ce n'était pas la meme variable donc j'ai mis $conn au lieu de $link. Du coup il me met cette erreur :
---> POST :array(4) { ["username"]=> string(4) "test" ["email"]=> string(4) "test" ["password"]=> string(4) "test" ["submit"]=> string(10) "S'inscrire" } Message d'erreur : Field 'last_login' doesn't have a default value
ah ben voila....
Donc :
Cela veut dire que :
Soit tu ajoutes cette colonne dans ta requête INSERT en lui mettant une valeur
Soit, dans la config de ta table, tu définis ce champ avec une valeur par défaut.
( Ce n'est donc pas un souci de php .. mais de mysql. )
Donc :
Message d'erreur : Field 'last_login' doesn't have a default value
Cela veut dire que :
Soit tu ajoutes cette colonne dans ta requête INSERT en lui mettant une valeur
Soit, dans la config de ta table, tu définis ce champ avec une valeur par défaut.
( Ce n'est donc pas un souci de php .. mais de mysql. )
voici le nouveau code:
Tu as des messages d'erreur ?
La page reste blanche ?
pour voire la page :