Strlen无法正常工作

时间:2014-03-15 16:02:53

标签: php string match strlen

我只是在一些PHP函数上积累经验来控制某些表单字段。

我刚刚构建了一个真正的小表单,看看如何处理OOP表单,但我遇到了strlen命令的奇怪行为。

以下是代码:

类形式及其微小控制

class Form {

public $nome = '';

public function __construct() {
    if(isset($_POST['nome'])){
    $this->nome = $_POST['nome'];
    }
}
public function body() {

    return "<form action=$_SERVER[PHP_SELF] method=post>
           <input type=text name=nome value=\"$this->nome\">
           <input type=submit value=INVIA><br>";
    }

  }

class check {

public $nome;

public function __construct() {
    $this->nome = $_POST['nome'];
}

public function controllo() {

    if ( !empty($this->nome) && strlen($this->nome >= 3) ) {
        echo "$this->nome è un nome valido";
        return TRUE;
    } else {
        return FALSE;
    }
}

}

PHP实现

<?php
    require '/classes/class.form';

    if(!isset($_POST['nome'])) {
     $form=new Form();
    echo $form->body();   
    } else {
        $check = new check();
        if (!$check->controllo()) {
            $form2=new Form();
            echo $form2->body();
            echo "c'è un errore nei controlli";

        } else {
            echo "tutto ok!";
        }

    }

    ?>

如您所见,检查应控制输入文本长度是否> = 3。如果错误,表单会再次打印内容,并建议出现问题,否则表示正确。

如果我尝试使用&#34; 1&#34;和&#34; 2&#34;,控件没有通过,但是当我尝试使用&#34; 3&#34;时,似乎脚本与输入的长度不匹配,但它的类型和它即使长度是单个字符,也能给我一个正确的匹配。

此外,如果我尝试单个字母或数字> 3的字母字符,则控件始终为false。这可能是什么问题?

1 个答案:

答案 0 :(得分:5)

您错开了右括号。 strlen应仅应用于变量$this->nome,而不应用于布尔表达式$this->nome >= 3

您的原始代码:if (!empty($this->nome) && strlen($this->nome >= 3)) {

您的意图:if ( !empty($this->nome) && strlen($this->nome) >= 3 ) {