strlen(),逻辑和比较运算符不起作用

时间:2013-01-24 13:07:14

标签: php logical-operators strlen comparison-operators

好的我在PHP中相当新,我正在尝试建立联系表单。有些字段我需要具有某些字符。

if (!empty($_POST['title'])) {
    $title = $_POST['title'];
    }
    elseif (strlen($title)>=1||strlen($title)<6)||strlen($title)>50 {
        $error .= "Length of your Subject must be more than 6 characters. <br />";
    }
else {
    $error .= "Please enter the Subject. <br />";
}

$ error存储填写表单时出现的所有错误。最后,表单检查,如果没有找到错误,则成功发送消息。

我想要什么? 如果字符串长度小于3但大于或等于1,我想显示elseif语句中声明的错误。如果长度大于50个字符,也应显示错误。

如果该字段为空,则它应显示else语句中提供的最后一个错误。

发生了什么事? 每当我将字段保持为空时,它会显示第一个错误而不是第二个错误。如果我在字段中只输入1个字符,则不会显示错误。

我正在装袋,我做了很多试验和错误,但似乎没有任何效果。 如果有人能够前进,这将是一个巨大的帮助。这是我在PHP中的第一个项目,因为我的一些读者想要它并且我还没有完全学习这门语言。

5 个答案:

答案 0 :(得分:2)

看起来你混淆了if else语句...... 试试这种方式,

if (!empty($_POST['title'])) 
{
    $title = $_POST['title'];

    if (strlen($title)>=1 && strlen($title)<6)||strlen($title)>50)
    {
        $error .= "Length of your Subject must be more than 6 characters. <br />";
    }
}

else 
{
$error .= "Please enter the Subject. <br />";
}

答案 1 :(得分:1)

您的条件(strlen($title)>=1||strlen($title)<6)始终为真,因为标题的长度为&gt; = 1或&lt; 6(或两者)。您可能希望使用&&代替||

答案 2 :(得分:0)

如果字符串为空,它只会进入else。

答案 3 :(得分:0)

如果长度介于1到6个字符且超过50个字符,为什么会显示相同的错误?你的if语句也是错误的。如果它是空的,您将转到使用elseif的{​​{1}},但尚未定义任何$title变量。

$title

答案 4 :(得分:0)

就像Dan Berindei所说的那样,你使用的是或者当你应该使用和检查$ title是否为空时。实际上你不需要检查它至少是一个字符,因为你已经确认它不是一个空字符串。

这里有点清洁:

if (!empty($_POST['title'])) {
    $title = $_POST['title'];

    if (strlen($title)<6)||strlen($title)>50) {
        $error .= "Length of your Subject must be between than 6 and 50 characters. <br />";
    }
}else {
    $error .= "Please enter the Subject. <br />";
}