我不是很擅长这个,这是我的代码。好像strlen()不起作用,有人可以帮我弄清楚是什么问题吗?谢谢。即使我输了5个或更多字母,它也会继续打印密码太短
<?php
if($username)
{
if(isset($_POST['submit']))
{
$newpass =md5($_POST['newpass']);
$confirmpass = md5($_POST['confirmpass']);
if(strlen($newpass) < 5)
{
if($newpass == $confirmpass)
{
$querychange = mysql_query("UPDATE users SET password = '$newpass' WHERE username = '$username'");
session_destroy();
?> <script> alert ( "Your password has been changed!" );
window.location='login.php'; </script> <?php
}
else
{
?> <script> alert ("New passwords don't match!" ); </script> <?php
}
}
else
{
echo "<font color='red'> * new password too short";
}
}
}
?>
答案 0 :(得分:1)
首先 - 对字符串执行md5
将返回一个32个字符的字符串。
这意味着用户输入的任何密码都将被散列为长度为32的字符串。
这意味着if(strlen($newpass) < 5)
将永远不会成立,您将始终看到警告。
在此字符串中,您可能需要if(strlen($newpass) > 5)
- 请参阅更高。
然后你的密码将被处理。
因此,最终代码可以是:
if(isset($_POST['submit'])) {
if(strlen($_POST['newpass']) >= 5)
{
$newpass = md5($_POST['newpass']);
$confirmpass = md5($_POST['confirmpass']);
// do other stuff
} else {
// warn about short password
}
}
还要考虑strlen
UTF-8
编码字符串可能会给您带来意想不到的结果。
对于密码,您必须使用更好的方法md5
。看看password_hash, password_verify
。