【发布时间】:2019-01-17 09:45:31
【问题描述】:
我做了一个注册和登录表单,但我遇到了一个问题,即我的密码同时接受小写字母和大写字母。谁能告诉我如何解决这个问题。 这是我下面的确认注册码。在密码起作用之前是否必须对密码进行哈希处理。我是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>
';
}
}
?>
任何帮助将不胜感激。
【问题讨论】:
-
您必须始终对密码进行哈希处理。
-
您是否以纯文本 O_O 形式存储密码?
-
MySQL 默认情况下将字符串视为不区分大小写,这只是您永远不应存储纯文本密码的原因之一。而是使用
password_hash()和password_verify()。如果您使用的是 5.5 之前的 PHP 版本,请不要使用 MD5 或 SHA1 来散列密码。相反,您可以使用this compatibility pack。 -
您的意思是无论大小写您的密码都匹配,还是您只想要求密码的小写/大写字符?您应该进行散列,散列将针对上/下进行不同的评估。
-
另外,不要依赖
real_escape_string()函数来防止SQL注入,they alone are not sufficient。您应该通过mysqli 或PDO 使用带有绑定参数的准备好的语句。 This post 有一些很好的例子。