我想做一个简单的登录的事情,如果你会叫它。我正在使用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>";
}
}
?>
它在本地主机上工作得很好,但遗憾的是不能在我的域上工作,因为每当我按下登录按钮时,表单就消失了,我什么也没有留下。我联系了域名提供商,他们告诉我可能是我代码中的问题。我很确定我的代码很好,因为它在本地主机服务器上工作。
为了省事,我想也许我可以用另一种方法。但我记得我使用crypt()
将密码存储到数据库中,我相信这些密码是随机生成的。有没有其他方法可以查看用户输入的加密版本是否与数据库中的匹配?
password_verify
适用于PHP>= 5.5.0,因此您的主机可能没有所需的PHP版本。
见:http://docs.php.net/manual/en/function.password-verify.php
你可以试试这样做:
crypt($row['password'], $mypassword) == $mypassword
password_hash
及其同伴password_verify
在PHP中可用>= 5.5
但是有一个兼容库/backport使它们在PHP>= 5.3.10中可用https://github.com/ircmaxell/password_compat