【问题标题】:php username and password checking won't work [duplicate]php用户名和密码检查不起作用[重复]
【发布时间】:2019-03-14 17:40:08
【问题描述】:

我正在尝试使用 php 和 mysql 制作登录页面,但它不想工作,我是 php 新手。 我想要的是当输入正确的用户和通行证时,显示/回显该用户的级别

mysql:image

db.php:

<?php
$servername = "127.0.0.1";
$username = "root";
$password = "";
$dbname = "maindb";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 
# open database like before.
$web_username=$_POST['username'];
if ($web_username=="") die(); # one bit of error handling.
$web_password=$_POST['password'];
$sql = "SELECT id, level FROM users WHERE name = ? AND password = ?";
$stmt =  $conn->prepare ($sql ); # needs error check
$stmt->bind_param("ss", $web_username, $web_password);
$stmt->execute(); # needs error check
if ($stmt->num_rows==1) {
    $stmt->bind_result($id, $level);
    $stmt->fetch(); 
    printf ("id is %s, level is %s\n", $id, $level);
}
?>

index.html:

<html>
<body>
<form method='post' action='db.php'>
Username: <input type='text' name='username' placeholder='username'><br>
Password: <input type='password' name='password' placeholder='password'><br>
<input type="submit" value="Submit" />
</form></body></html>

【问题讨论】:

  • 你有什么错误吗? (用于在 php.ini 中启用之前检查错误日志)
  • 您应该永远存储明文密码。使用password_hash()password_verify() 安全地散列它们。
  • 你可能是对的,但这是我第一次使用 php 和 sql,所以我想保持简单并有一些工作
  • 不要在没有消息的情况下做die()
  • 你需要描述它是如何不工作的。执行页面时php错误日志中是否有任何错误或屏幕上是否有任何错误,mysqli's error function的输出是什么等

标签: php mysql apache


【解决方案1】:

db.php中的$stmt-&gt;execute();之后添加store_result();

所以实际的代码是

<?php
$servername = "127.0.0.1";
$username = "root";
$password = "";
$dbname = "maindb";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 
# open database like before.
$web_username=$_POST['username'];
if ($web_username=="") die(); # one bit of error handling.
$web_password=$_POST['password'];
$sql = "SELECT id, level FROM users WHERE name = ? AND password = ?";
$stmt =  $conn->prepare ($sql ); # needs error check
$stmt->bind_param("ss", $web_username, $web_password);
$stmt->execute(); # needs error check
$stmt->store_result();
if ($stmt->num_rows==1) {
    $stmt->bind_result($id, $level);
    $stmt->fetch(); 
    printf ("id is %s, level is %s\n", $id, $level);
}
?>

这将解决您的问题。

【讨论】:

    猜你喜欢
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    • 1970-01-01
    • 2017-06-13
    • 2012-03-08
    • 1970-01-01
    相关资源
    最近更新 更多