PHP登录表单不工作,我可以做些什么来修复它?
我有以下两个php脚本: config.php:PHP登录表单不工作,我可以做些什么来修复它?,php,mysql,database,login,Php,Mysql,Database,Login,我有以下两个php脚本: config.php: <?php define('DB_SERVER', 'localhost:3306'); define('DB_USERNAME', 'root'); define('DB_PASSWORD', 'password'); define('DB_DATABASE', 'mind3'); $db = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE); ?> 以及i
<?php
define('DB_SERVER', 'localhost:3306');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', 'password');
define('DB_DATABASE', 'mind3');
$db = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE);
?>
以及index.php,其中包含登录脚本和表单:
<?php
require_once 'config.php';
$username=$password='';
$username_err=$password_err='';
if($_SERVER["REQUEST_METHOD"] == "POST"){
if(empty(trim($_POST["username"]))){
$username_err = 'Please enter an username!';
} else{
$password = trim($_POST['username']);
}
if(empty(trim($_POST["password"]))){
$pasword_err = "Please enter a password!";
} else{
$password = trim($_POST['password']);
}
if(empty($username_err) && empty($password_err)){
$sql = "SELECT username,password FROM members WHERE username = ?";
if($stmt = mysqli_prepare($link, $sql)){
mysqli_stmt_bind_param($stmt, "s", $param_username);
$param_username = $username;
if(mysqli_stmt_execute($stmt)){
mysqli_stmt_store_result($stmt);
if(mysqli_stmt_num_rows($stmt) == 1){
if(password_verify($password, $hashed_password)){
session_start();
$_SESSION['username'] = $username;
header("location: welcome.php");
} else{
$username_err = 'Username/password is wrong!';
}
} else{
echo "Oops! Something went wrong. Please try again later.";
}
}
mysqli_stmt_close($stmt);
}
mysqli_close($link);
}
}
?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<div class="wrapper">
<h2>Log in</h2>
<form action="<?php echo htmlspecialchars ($_SERVER["PHP_SELF"]); ?>" method="post">
<div class="form-group <?php echo(!empty($username_err)) ? 'has-error' : ''; ?>">
<input type="text" name="username" class="form-control" placeholder="Username">
<span class="help-block"><?php echo $username_err; ?></span>
</div>
<div class="form-group <?php echo (!empty($password_err)) ? 'has-error' : ''; ?>">
<input type="password" name="password" class="form-control">
<span class="help-block"><?php echo $password_err; ?></span>
</div>
<div class="form-group">
<input type="submit" class="btn btn-primary" value="Login">
</div>
</form>
</div>
</body>
</html>
问题是,每当我输入数据库中的凭据时,它都不会将我重定向到welcome.php,也不会告诉我密码或用户名错误。但是,当我不输入用户名或密码时,我会得到请输入用户名或密码
我不明白怎么回事。您将用户名设置为$passwordvariable而不是$username变量
只需将$password=替换为$username=…您在第10行的第二个代码片段中遇到了一个错误。 这是修复的代码片段,请查看代码注释以了解更多信息
<?php
require_once 'config.php';
$username=$password='';
$username_err=$password_err='';
if($_SERVER["REQUEST_METHOD"] == "POST"){
if(empty(trim($_POST["username"]))){
$username_err = 'Please enter an username!';
} else{
//you got error here (was $password)
$username = trim($_POST['username']);
}
if(empty(trim($_POST["password"]))){
$pasword_err = "Please enter a password!";
} else{
$password = trim($_POST['password']);
}
if(empty($username_err) && empty($password_err)){
$sql = "SELECT username,password FROM members WHERE username = ?";
if($stmt = mysqli_prepare($link, $sql)){
mysqli_stmt_bind_param($stmt, "s", $param_username);
$param_username = $username;
if(mysqli_stmt_execute($stmt)){
mysqli_stmt_store_result($stmt);
if(mysqli_stmt_num_rows($stmt) == 1){
if(password_verify($password, $hashed_password)){
session_start();
$_SESSION['username'] = $username;
header("location: welcome.php");
} else{
$username_err = 'Username/password is wrong!';
}
} else{
echo "Oops! Something went wrong. Please try again later.";
}
}
mysqli_stmt_close($stmt);
}
mysqli_close($link);
}
}
?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<div class="wrapper">
<h2>Log in</h2>
<form action="<?php echo htmlspecialchars ($_SERVER["PHP_SELF"]); ?>" method="post">
<div class="form-group <?php echo(!empty($username_err)) ? 'has-error' : ''; ?>">
<input type="text" name="username" class="form-control" placeholder="Username">
<span class="help-block"><?php echo $username_err; ?></span>
</div>
<div class="form-group <?php echo (!empty($password_err)) ? 'has-error' : ''; ?>">
<input type="password" name="password" class="form-control">
<span class="help-block"><?php echo $password_err; ?></span>
</div>
<div class="form-group">
<input type="submit" class="btn btn-primary" value="Login">
</div>
</form>
</div>
</body>
</html>
您没有正确设置$username的值 更改: 致: $hashed_password必须有一个值,因为在password_verify中需要它。使用mysqli的bind_result和fetch方法获取所需的值 之后: 加: 增加出口;在标题后。。重定向,以便在重定向调用后不会执行其他代码 更新代码:
此时添加逗号,而不是=username\u err,password\u err=“”;mysqli_prepare$link,$sql您有未定义的$link变量。我猜你是指mysqli_prepare$db,$sql
<?php
require_once 'config.php';
$username=$password='';
$username_err=$password_err='';
if($_SERVER["REQUEST_METHOD"] == "POST"){
if(empty(trim($_POST["username"]))){
$username_err = 'Please enter an username!';
} else{
//you got error here (was $password)
$username = trim($_POST['username']);
}
if(empty(trim($_POST["password"]))){
$pasword_err = "Please enter a password!";
} else{
$password = trim($_POST['password']);
}
if(empty($username_err) && empty($password_err)){
$sql = "SELECT username,password FROM members WHERE username = ?";
if($stmt = mysqli_prepare($link, $sql)){
mysqli_stmt_bind_param($stmt, "s", $param_username);
$param_username = $username;
if(mysqli_stmt_execute($stmt)){
mysqli_stmt_store_result($stmt);
if(mysqli_stmt_num_rows($stmt) == 1){
if(password_verify($password, $hashed_password)){
session_start();
$_SESSION['username'] = $username;
header("location: welcome.php");
} else{
$username_err = 'Username/password is wrong!';
}
} else{
echo "Oops! Something went wrong. Please try again later.";
}
}
mysqli_stmt_close($stmt);
}
mysqli_close($link);
}
}
?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<div class="wrapper">
<h2>Log in</h2>
<form action="<?php echo htmlspecialchars ($_SERVER["PHP_SELF"]); ?>" method="post">
<div class="form-group <?php echo(!empty($username_err)) ? 'has-error' : ''; ?>">
<input type="text" name="username" class="form-control" placeholder="Username">
<span class="help-block"><?php echo $username_err; ?></span>
</div>
<div class="form-group <?php echo (!empty($password_err)) ? 'has-error' : ''; ?>">
<input type="password" name="password" class="form-control">
<span class="help-block"><?php echo $password_err; ?></span>
</div>
<div class="form-group">
<input type="submit" class="btn btn-primary" value="Login">
</div>
</form>
</div>
</body>
</html>
$password = trim($_POST['username']);
$username = trim($_POST['username']);
if(mysqli_stmt_num_rows($stmt) == 1){
$hashed_password = "";
$username2 = "";
mysqli_stmt_bind_result($stmt, $username2, $hashed_password);
mysqli_stmt_fetch($stmt);
<?php
require_once 'config.php';
$username = $password = '';
$username_err = $password_err = '';
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty(trim($_POST["username"]))){
$username_err = 'Please enter an username!';
}
else {
$username = trim($_POST['username']);
}
if (empty(trim($_POST["password"]))){
$pasword_err = "Please enter a password!";
}
else {
$password = trim($_POST['password']);
}
if (empty($username_err) && empty($password_err)) {
$sql = "SELECT username,password FROM members WHERE username = ?";
if ($stmt = mysqli_prepare($link, $sql)) {
mysqli_stmt_bind_param($stmt, "s", $param_username);
$param_username = $username;
if (mysqli_stmt_execute($stmt)){
mysqli_stmt_store_result($stmt);
if (mysqli_stmt_num_rows($stmt) == 1){
$hashed_password = "";
$username2 = "";
mysqli_stmt_bind_result($stmt, $username2, $hashed_password);
mysqli_stmt_fetch($stmt);
if (password_verify($password, $hashed_password)){
$_SESSION['username'] = $username;
mysqli_stmt_close($stmt);
mysqli_close($link);
header("location: welcome.php"); exit();
}
else{
$username_err = 'Username/password is wrong!';
}
}
else {
echo "Oops! Something went wrong. Please try again later.";
}
}
mysqli_stmt_close($stmt);
}
mysqli_close($link);
}
}
?>