Je voudrais faire une simple validation de connexion où la condition est le nom d'utilisateur et le mot de passe correspondent à une table du serveur MySQL appelée admin p >
Ce que j'ai essayé jusqu'à présent
À partir du code suivant, il y a des index non définis dans login_check.php
$ uname = mysqli_real_escape_string ($ conn, $ _ POST ['username']);
et $ pass = mysqli_real_escape_string ($ conn, $ _ POST ['password' ]);
login.php (front.php = page principale)
<?php
//Establish connection
include 'connection.php';
$uname_error = $pass_error ="";
$uname = mysqli_real_escape_string($conn,$_POST['username'] );
$pass = mysqli_real_escape_string($conn,$_POST['password'] );
$sql = "SELECT admin_username,admin_password FROM admins";
if(isset($_POST['Log In']))
{
//Check Username
if($uname == "username")
{
//Check Password
if($pass == "password")
{
header("location:front.php"); //If username & password are correct -> log in to front.php.
}
else //$pass != "password"
{
$pass_error = "Invalid Password.";
}
}
else //$uname != "username"
{
$uname_error = "Invalid Username.";
}
}
mysqli_close($conn);
?>
login_check.php
<form method="post" action="login_check.php">
<input type="text" name="username" placeholder="Username" required>
<span class="error"><?php echo $uname_error; ?></span>
<input type="password" name="password" placeholder="Password" required>
<span class="error"><?php echo $pass_error; ?></span>
<button type="submit" name="Log In" value="Log In">Log In</button> <!--Go to front.php if both username and password are correct.-->
</form>
EDIT 1: login.php a été corrigé.
4 Réponses :
L'action de votre formulaire est front.php et le code de validation se trouve dans log_check.php .
Le code de validation ne s'exécutera pas car, après l'envoi, le formulaire sera redirigé vers front.php .
Vous pouvez (rediriger) définir l'action du formulaire login_check.php et les validations s'appliqueront.
De plus, la redirection fonctionnera sans problème.
Donc, pour conclure 2 changements:
1) Supprimer / commenter php require 'login_check.php'; ?>
2) Modifier l'action du formulaire De
À
J'ai déjà corrigé login.php mais je pense qu'il pourrait y avoir des erreurs de syntaxe dans les conditions if-else ou l'instruction MySQL dans login_check.php
Dans votre HTML -
$error = '';
$result = mysqli_query($conn,"SELECT id, admin_password FROM admins WHERE admin_username = '$uname'");
list($id,$password) = mysqli_fetch_row($result);
if(mysqli_num_rows($result)==1){
if($password == $pass){
session_start();
$_SESSION['userid'] = $id;
$_SESSION['username'] = $uname;
header("location:front.php");
}else{
$error = "Invalid Password.";
}
}else{
$error = "username does not exist";
}
l'action de formulaire est front.php qui devrait être login_check.php et il n'y a pas d'utilisation de php requiert 'login_check.php'; ?> afin que vous puissiez le supprimer.
vous avez codé un code de connexion très basique Je pense qu'au moins vous devriez crypter le mot de passe également, améliorer votre requête de connexion.
<?php require 'login_check.php'; ?>
<form method="post" action="front.php">
<input type="text" name="username" value="username" placeholder="Username" style="font-size: 24px" required>
<span class="error"><?= $uname_error ?></span>
<input type="password" name="password" value="password" placeholder="Password" style="font-size: 24px" required>
<span class="error"><?= $pass_error ?></span>
<button type="submit" name="Log In" value="Log In">Log In</button> <!--Go to front.php if both username and password are correct.-->
</form>
Si vous vouliez vérifier le nom d'utilisateur et le mot de passe avec la base de données, vous ne l'avez jamais fait. votre requête SQL n'a jamais été exécutée. Bien que stocker le mot de passe en texte brut soit incorrect; mais en cas d'utilisation, votre login_check.php doit être quelque chose comme ceci:
//Establish connection
include 'connection.php';
$uname_error = $pass_error ="";
$uname = mysqli_real_escape_string($conn,$_POST['username'] );
$pass = mysqli_real_escape_string($conn,$_POST['password'] );
$sql = "SELECT * FROM admins WHERE admin_username = '$uname' AND admin_password = '$pass'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
header("location:front.php");
} else {
die('the combination is wrong');
}
Dans un premier temps, vous devez stocker le mot de passe sous la forme Hash et non en texte brut.
Je recommande également d'utiliser PDO et des déclarations préparées, mais cela dépend de vous.
<?php // Create Password with php default Hashing Algo (bcrypt) $password = password_hash('password', PASSWORD_DEFAULT); ?>Créer un mot de passe haché en PHP
// File: login_check.php //Establish connection // include 'connection.php'; // PDO Connection String $pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password'); $uname_error = $pass_error =""; if(isset($_POST['Log In'])) { // Prepares the SQL Statment $query = $pdo->prepare('SELECT admin_username, admin_password FROM admins WHERE admin_username = :username'); // Fils the named parameter with the username and executes the query $stmt = $query->execute(['username' => $_POST['username']]); // Fetches the result $result = $stmt->fetch(); // Check if the DB has a entry with this username and check if the password matches with the Password Hash if($result !== false && password_verify($_POST['password'], $result['admin_password'])) { header("location:front.php"); //If username & password are correct -> log in to front.php. else { $pass_error = "Invalid Username or Password."; } }
votre formulaire est publié sur
front.php, et nonlogin_check.php, vous incluezlogin_check.phpavant que le formulaire n'ait été publié, donc ces valeurs ne seront pas ensemble. vous devez accéder à nouveau à la structure ici^ ne faites pas cela ou ce que vous avez, ne stockez jamais de mots de passe en texte brut
vérifiez ceci stackoverflow.com/a/55240307/5463213
mot de passe avec php php.net/manual/de/function.password-hash .php
C'est juste une question simple. Je voudrais donc pouvoir travailler avant de passer au hachage de mot de passe.
Votre instruction SELECT a besoin d'une clause WHERE. Sans une clause WHERE, SELECT renverra tous les utilisateurs de la base de données. Et vous ne semblez pas exécuter la requête.
votre requête est juste dans une variable, vous n'avez jamais appelé mysqli_query. J'ai mis à jour la procédure de connexion, vous pouvez jeter un oeil.