检查多个字符串的PHP Strlen

时间:2014-09-07 15:58:35

标签: php strlen

我在前一页中使用post方法中的html表单有4个字段。一切正常,但我试图检查以确保每个字段的strlens低于200.以下代码总是说它们太长,即使我确定它们低于200.

PHP:

$hsname = trim($_POST['hsname']);
$hsstate = trim($_POST['hsstate']);
$hsemail = trim($_POST['hsemail']);
$hspassword = trim($_POST['hspassword']);

if (strlen($hsname) || strlen($hsstate) || strlen($hsemail) || strlen($hspassword) > 200){

die("Each field can only contain 200 characters");  //this is always returned even though the fields are below 200.
}
else {
echo "fields have good characters";
}

4 个答案:

答案 0 :(得分:1)

条件总是返回true的原因是因为您只检查最后一个字符串的长度是否大于200.检查其他字符串是否长度大于0,因此您的条件为“如果前4个字符串中的任何一个大于0或最后一个字符串大于200“。试试这个

foreach(array($hsname,$hsstate,$hsemail,$hspassword) as $string) {
    if(strlen($string) > 200) {
        die("Each field can only contain 200 characters"); 
    }
}

答案 1 :(得分:1)

我将翻译你的if条件:

if (strlen($hsname) || strlen($hsstate) || strlen($hsemail) || strlen($hspassword) > 200)

它就像:

if(strlen($hasname)!='' || strlen($hsstate)!='' || strlen($hsemail)!='' || strlen($hspassword) > 200)

所以你应该知道为什么它现在错了;) 比较每个strlen或尝试:

$maximumValue = max(strlen($hsname), strlen($hsstate), strlen($hsemail), strlen($hspassword));
// You got maximum value now, so:
if($maximumValue > 200){}

答案 2 :(得分:0)

当您评估

时,这不起作用
strlen($hsname)

当它超过0个字符时,它将满足if条件 对于您检查的前3个字符串,这是相同的

你需要'> 200'对于你想要比较的每个字符串[假设你在帖子中传递实际值]:

$hsname = 'test';
$hsstate = 'test';
$hsemail = 'test';
$hspassword = 'test';

if (strlen($hsname) > 200 || strlen($hsstate) > 200 || strlen($hsemail) > 200 || strlen($hspassword) > 200){
    die("Each field can only contain 200 characters");  //this is always returned even though the fields are below 200.
} else {
    echo "fields have good characters";
}

答案 3 :(得分:0)

您需要检查字段是否确实存在,然后检查它们的长度。

一种方法:

$fields = array('hsname', 'hsstate', 'hsemail', 'hspassword');

foreach ($fields as $field) {
    if (!array_key_exists($field, $_POST)) {
        die("Field {$field} is missing");
    }
    // Declare a variable whose name is in $field.
    ${$field} = trim($_POST[$field]);
    if (strlen(${$field}) > 200) {
        die("Field {$field} must be less or equal to 200 characters");
    }   
}

如果您有国际字符支持,您可能还需要根据数据库字段长度验证有效字符串长度;单个UTF8“字符”可以是多个数据库字段“字符”。 mb_ *函数可以帮助您,以及utf8编码和解码功能。