【发布时间】:2014-05-14 12:35:23
【问题描述】:
我正在尝试做一个简单的登录,如果你愿意的话。我正在使用 MySQLi,到目前为止它看起来不错。
<?php
ob_start();
$myusername = @$_POST['username'];
$mypassword = @$_POST['password'];
if (isset($_POST['logged'])) {
$link->escape_string($myusername);
$link->escape_string($mypassword);
$stmt = $link->prepare("SELECT * FROM members WHERE username=?") or die ($link->error);
$stmt->bind_param('s', $myusername);
$stmt->execute() or die($stmt->error);
$stmt->store_result();
$count = $stmt->num_rows();
if (!empty($myusername) && !empty($mypassword)) {
if($count == 1) {
$rs = $link->query("SELECT * FROM members WHERE username='$myusername'");
$row = $rs->fetch_array(MYSQLI_ASSOC);
if (password_verify($mypassword, $row['password'])) {
$_SESSION['username'] = $myusername;
$_SESSION['first_name'] = $row['first_name'];
$_SESSION['last_name'] = $row['last_name'];
$_SESSION['email'] = $row['email'];
$_SESSION['loggedIn'] = true;
header("Location: login.php");
}
else {
echo "<p style=\"color: red\">Wrong Password</p>";
}
}
else {
echo "<p style=\"color: red\">Wrong Username</p>";
}
}
else {
echo "<p style=\"color: red\">Fill in all fields</p>";
}
}
?>
它在本地主机上运行良好,但遗憾的是在我的域上不起作用,因为每当我按下登录按钮时,表单就会消失,我什么都没有。我联系了域名提供商,他们告诉我这可能是我的代码中的某些内容。我很确定我的代码很好用,因为它可以在 localhost 服务器上运行。
为了省去麻烦,我想也许我可以使用一个替代方案。但我记得我使用crypt() 将密码存储到数据库中,我相信这些密码是随机生成的。有没有其他方法可以查看用户输入的任何内容的加密版本是否与数据库中的内容匹配?
【问题讨论】:
-
password_verify()仅适用于 PHP 5.5。如果您的托管公司尚未安装该版本,您的代码将崩溃并出现undefined function错误并留下空白屏幕。 -
escape_string究竟是什么,它不是一个 php 函数?