【问题标题】:how to make password >7 characters (validation)? [closed]如何使密码> 7个字符(验证)? [关闭]
【发布时间】:2016-06-16 17:37:39
【问题描述】:

我有一个表格,但我无法让 strlen 函数工作。 下面是代码示例 - 进一步向下进行验证。 我已经注释掉了不起作用的代码。基本上,我想要对这部分代码做的就是确定密码匹配,并且长度超过 7 个字符。

谁能帮忙?

if (isset($_POST['formName']) && $_POST['formName'] == "addUser") {

if ( ( $_POST['frmName'] != '') &&
     ($_POST['frmSurname'] != '') &&
     ($_POST['frmEmail'] != '') &&
     ($_POST['frmPassword1'] != '') ) {


    if ($_POST['frmPassword1'] != $_POST['frmPassword2'] )  {

        echo "Passwords do not match!";
    } 

/*  if (strlen( ($_POST['frmPassword1']) < 7 ) {

        echo "Passwords much be a minimum of 7 characters"; 
    } */

【问题讨论】:

  • strlen 行有 3 个(,只有 2 个),所以如果你取消注释它是一个彻底的语法错误。
  • 还有formName和frmName不同的字段???
  • if (strlen($_POST['frmPassword1']) &gt; 7 )
  • 允许用户使用他们想要的passwords / phrases。 Don't limit passwords.
  • 先发制人... 永远不要存储纯文本密码!请使用 PHP 的built-in functions 来处理密码安全问题。如果您使用的 PHP 版本低于 5.5,您可以使用 password_hash() compatibility pack。在散列之前,请确保您 don't escape passwords 或对它们使用任何其他清理机制。这样做会更改密码并导致不必要的额外编码。

标签: php forms passwords


【解决方案1】:

看看你的 ():

strlen( ($_POST['frmPassword1']) < 7 )
      a b                      b     a
      ^-----strlen-------------------^

您不是在测试 $_POST 值的长度,而是在对 foo &lt; 7 的布尔结果执行 strlen,它始终为 0/1:

php > var_dump(strlen(true), strlen(false));
int(1)
int(0)

你需要:

if (strlen($_POST['frmPassword1']) < 7) {
   a      b                      b    a

注意() 上的标签。

【讨论】:

  • 您确定 1 in: if (strlen($_POST['frmPassword1']) &lt; 1) 吗? ;-)
  • 好吧,也许我喜欢我的密码真的很简单...呵呵。谢谢...修复。
  • 很容易记住
【解决方案2】:

这就是它搞砸的地方:

if (strlen( ($_POST['frmPassword1']) < 7 ) {

让我们从头开始。

首先你需要表单域frmPassword1所代表的字符串:

$_POST['frmPassword1']

那么你想要的字符串长度:

strlen($_POST['frmPassword1'])

然后您想将其与少于 8 个字符进行比较,因为您特别要求超过 7 个字符。因此,您的表达方式是:

strlen($_POST['frmPassword1']) < 8

现在把它变成一个完整的条件:

if( strlen($_POST['frmPassword1']) < 8 ){
 //insert relevant code here telling users password is too short
}

现在您有了一个工作代码块。

【讨论】:

    【解决方案3】:

    你错过了结尾)

    if (strlen( ($_POST['frmPassword1']) < 7 ) {
       1      2  3                     3     2  # 1 is missing
    

    原来如此

    if (strlen( ($_POST['frmPassword1']) < 7 ) ){
       1      2  3                     3     2 1
    

    注意:在您的问题中,您提到密码匹配,并且超过 7 个字符。所以使用&lt;=(小于或等于)。

    【讨论】:

    • 不..他得到了一个(太多
    • @Andreas 这不是问题。关闭是原因
    • 好吧..这可能是真的,但是最里面的 () 有什么意义呢?没有什么?然后是一个(在我看来太多了
    • @Andreas 这就是你的观点。无论如何谢谢
    猜你喜欢
    • 2016-07-18
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    • 2020-02-06
    • 1970-01-01
    • 2019-04-28
    • 2018-02-03
    • 1970-01-01
    相关资源
    最近更新 更多