strlen()无法正常工作

时间:2016-01-09 14:31:52

标签: php

我不是很擅长这个,这是我的代码。好像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";
    }

 }
}

?>

1 个答案:

答案 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