2013-12-16 32 views
-2

我想在strlen命令中添加2个数字。这里是我的php代码:在if语句中添加多个条件

$name = mysql_real_escape_string($_POST['dgt']); 
if(strlen($name) != "32") { 
print "This is not a name."; 
} else { 

它检查是否长度是32.我想要它检查长度是32或40.我该怎么做?

+0

你不应该适用'mysql_real_escape_string()'除非在查询中立即使用。 –

+0

为什么你使用报价大约32 ?? ...删除报价 –

+3

顺便说一句,长度为32或40的名称有什么特别之处? –

回答

0

PHP: Logical Operators - Manual,要使用

  1. || (这种形式具有更高的优先级)
$a or $b Or TRUE if either $a or $b is TRUE. 
$a || $b Or TRUE if either $a or $b is TRUE. 

所以,你可以使用类似这样

$len = strlen($name);   // just get the length once and then 
           // use it to compare however many times.... 
if (!($len == 32 or $len == 40)) 
1

在条件中使用and运算符“& &”,如下面的代码。

if(strlen($name) != 32 && strlen($name) != 40)

如果你想它来检查name长度为32或者40,然后用or运算符 “||”像下面的代码一样。

if(strlen($name) == 32 || strlen($name) == 40)

user2910265好点的strlen()返回值赋值给一个变量,以便只有一个调用时,像这样。

$length = strlen($name); 
if(!($length == 32 || $length == 40)) 
    print "this is not a name."; 
} else { 
+0

最重要的是,将strlen放在一个变量名中,以便它只被调用一次(而不是两次)。口译员不会很聪明地为你做这件事。 – user2910265

+0

哦,我以为你在谈论第二个有条件的使用或。 OP的问题很混乱,因为他说他的代码正在检查字符串是否长度为32,当它实际检查它是否不是32时,所以我在回答时感到困惑。 –

4

首先,不使用mysql_real_escape_string();旧的mysql_ API已弃用,因此请考虑切换为PDOmysqli

其次,你应该考虑使用输入过滤;可能根本不存在$_POST['dgt'],因此请使用filter_input()

第三,您应该使用数值与strlen()的输出进行比较;尽管PHP将"32"视为一个数字,但最好是明确的。

最后,如果一个名称必须是32或40长,你可以简单地添加条件:

$name = filter_input(INPUT_POST, 'dgt', FILTER_UNSAFE_RAW); 
if (empty($name) || (strlen($name) != 32 && strlen($name) != 40)) { 
    print "This is not a name."; 
} 

另外,使用in_array()

if (empty($name) || !in_array(strlen($name), array(32, 40))) { 
    print "This is not a name."; 
}