我只是在一些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。这可能是什么问题?
答案 0 :(得分:5)
您错开了右括号。
strlen
应仅应用于变量$this->nome
,而不应用于布尔表达式$this->nome >= 3
。
您的原始代码:if (!empty($this->nome) && strlen($this->nome >= 3)) {
您的意图:if ( !empty($this->nome) && strlen($this->nome) >= 3 ) {