**结束。**此问题需要详细的调试信息。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。
两年前关门了。
改进这个问题
我试图通过检查用户名和密码是否正确,从表users中获取特定行的一些数据。我不明白为什么它不起作用!!
编辑:我插入整个页面的代码。我使用表单是因为我在同一个表单中有注册按钮和登录按钮。我正在检查用户按下哪一个然后执行操作。
$host = "xx";
$user = "xx";
$pass= "xx";
$dbname = "xx";
$conn = new mysqli($host,$user,$pass, $dbname );
if ($conn->connect_error) {
die("Connection failed : ".$conn->connect_error); //fixme
}
if ( isset($_POST['login']) ) {
if ($_POST["actionb"] == 'Login') {
$username = isset($_POST["username"]) ? $conn->real_escape_string($_POST["username"]) : "";
$password = isset($_POST["password"]) ? $conn->real_escape_string($_POST["password"]) : "";
echo $username;
echo $password;
$query = "SELECT * FROM users WHERE username='$username' AND password='$password'";
$results=$conn->query($query);
if (mysqli_num_rows($results) > 0 ) {
$_SESSION['username'] = $username;
if ($results->num_rows > 0) {
// output data of each row
while ($row = $results->fetch_assoc()) {
$email = $row["email"];
$postalcode = $row["postalcode"];
$phonenumber = $row["phonenumber"];
}
}
$_SESSION['postalcode'] = $postalcode;
$_SESSION['phonenumber'] = $phonenumber;
$_SESSION['email'] = $email;
echo "You are now logged in";
header('location: confirm.php');
} else {
//echo "Wrong username/password combination";
}
}
}
?>
<html>
<style type ="text/css">
...
</style>
<body>
<form action="" method="post">
<div class="header">
<h1>For existing users</h1>
</div>
<input type="hidden" name="actionb" value="Login" >
<label for="username"><b>Username</b></label>
<input type="text" placeholder="Enter username" name="username" required>
<label for="password"><b>Repeat Password</b></label>
<input type="password" placeholder="Repeat Password" name="password2" required>
<div class="clearfix">
<button type="submit" name="login" value="Login">Login</button>
</div>
</form>
</body>
</html>
1条答案
按热度按时间wswtfjt71#
第一:就像@idontdownpoite说的,你应该总是(!)在将密码存储到数据库之前对其进行哈希/加密(请参阅php.net/manual/en/book.password.php)。一次黑客攻击,你所有的用户都会因为你不这么做而恨你
第二:会不会是你退后了不止一排(根据你的推测
if ($results->num_rows > 0) {
因为您检查==1
,可能会更改为>0
.第三:检查
mysqli_query()
呼叫已成功,已将其添加到您的if
对账单$results && mysqli_num_rows(..etc..
第四:密码实际上是作为$_POST['password2']
第五:(正如@funkfortyniner正确指出的)使用header()
因为重定向必须是输出到浏览器的第一件事(所以echo
,然后是exit();
阻止其他事情发生echo
-在那之后再重新编译(这在php中也是无效的)。第六:(正如@funkfortyniner所指出的)在开发过程中,总是使用
error_reporting(E_ALL | E_STRICT | E_NOTICE);
以及ini_set('display_errors', 1);
在你的顶端。这样,所有错误、警告等都会显式地显示在浏览器中,因此您可以调试/清除/修复。