我在前一页中使用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";
}
答案 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编码和解码功能。