<分区>
<分区>
我做了一个注册和登录表单,但我遇到了一个问题,即我的密码接受小写字母和大写字母。谁能告诉我如何解决这个问题。 这是我下面的确认注册码。在密码工作之前是否必须对密码进行哈希处理。我是 php 新手
<?php
if(isset($_POST['register'])){
$username = trim(mysqli_real_escape_string($connection, $_POST['username']));
$lastname = trim(mysqli_real_escape_string($connection, $_POST['lastname']));
$email = trim(mysqli_real_escape_string($connection, $_POST['email']));
$password = trim(mysqli_real_escape_string($connection, $_POST['password']));
$password1 = trim(mysqli_real_escape_string($connection, $_POST['password1']));
$sql = "SELECT email FROM users WHERE email='$email'" ;
$result = mysqli_query($connection, $sql) or die($mysqli->error());
if ( $result->num_rows > 0 ) {
echo'
<script type = "text/javascript">
alert("Email Address alrady exists ")
window.location.href = "register.php"
</script> ';
exit();
}
else {
if ($password === $password1){
// add the user if password match
$query = "INSERT INTO users(firstname, lastname, email, pass)
VALUES ('{$username}','{$lastname}', '{$email}', '{$password}') ";
$runNewUser = mysqli_query($connection, $query);
if($runNewUser){
echo'
<script type = "text/javascript">
window.location.href = "getmessage.php"
</script>';
}else{
echo'
<script type = "text/javascript">
alert("Error creating user. Please try again");
</script>';
}
}else{
// trigger error if password do not match
echo'
<script type = "text/javascript">
alert("Password do not match. Please try again ");
</script>
';
}
}
}
?>
下面是我的确认登录码
<?php
if(isset($_POST['ulogin'])){
$email = trim(mysqli_real_escape_string($connection, $_POST['email']));
$pass = trim(mysqli_real_escape_string($connection, $_POST['pass']));
$checkUser = "
SELECT * FROM users
WHERE email = '{$email}'
AND pass = '{$pass}'
";
$runCheck = mysqli_query($connection, $checkUser);
if(mysqli_num_rows($runCheck) == 1){
$foundUser = mysqli_fetch_array($runCheck);
$_SESSION['uid'] = $foundUser['id'];
$_SESSION['uname'] = $foundUser['firstname'];
$_SESSION['email'] = $foundUser['email'];
echo'
<script type = "text/javascript">
window.location.href = "dailymessage.php";
</script>
';
}else{
echo'
<script type = "text/javascript">
alert("Email address / Password incorect. Please try again");
</script>
';
}
}
?>
我们将不胜感激。
最佳答案
默认情况下,mysql 是不区分大小写的。
在以下行之后 if ($password === $password1){
如果条件返回 true(这意味着如果 2 个密码匹配,你应该散列你 $password
像这样 $hash = password_hash($password, PASSWORD_DEFAULT);
在这一行 VALUES ('{$username}','{$lastname}', '{$email}', '{$password}') ";
使用 $hash
变量来存储你的哈希密码,就像这样 VALUES ('{$username}','{$lastname}' , '{$email}', '{$hash}') ";
。哈希函数的第二个参数PASSWORD_DEFAULT
为哈希算法。默认算法目前是bcrypt,但是将来某个时候可能会添加更强的算法作为默认值,并可能生成更大的字符串。如果您在项目中使用 PASSWORD_DEFAULT,请确保将哈希存储在容量超过 60 个字符的列中。设置列大小为 255 可能是一个不错的选择。您也可以使用 PASSWORD_BCRYPT 作为第二个参数。在这种情况下,结果将始终为 60 个字符长。因此,当您提供密码时,对于您的登录,您应该将其与数据集中的哈希版本进行比较。因此,您首先将 POST 变量放入变量 $password
然后创建另一个变量 $hash = password_hash($password, PASSWORD_DEFAULT);
以生成散列版本并用于检查。请记住,您将散列存储在数据库中,但它是用户登录时获得的明文密码。
password_verify() 函数将普通密码和散列字符串作为其两个参数。如果哈希与指定的密码匹配,则返回 true。
if (password_verify($password, $hash)) {
// Success!
}
else {
// Invalid credentials
}
有关更多信息,您可以阅读此 topic
关于php - 我的密码接受大小写字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51775279/