Problème de requête MySQLi
Résolu
firpic
-
jordane45 Messages postés 30426 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 30426 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.
2 réponses
-
Bonjour,
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-
j'ai mis le code avec ma requête et rien ne fonctionne pas encore.
voici le nouveau code:<!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 error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); 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)."')"; if (!mysqli_query($conn, "INSERT into `users` (username, email, password) VALUES ('$username', '$email', '".hash('sha256', $password)."')")) { printf("Message d'erreur : %s\n", mysqli_error($link)); } // 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>
-
-
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><?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 :
---> 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 :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. )
-