如果是数组,请做点什么?

时间:2010-11-24 09:01:31

标签: php arrays isset

我发布了多个复选框,并将它们放入数组中 - 例如:“tags []”

发布时,我用逗号敲打它们。

如果在表单上检查了NO标签,然后发布,我会收到错误,因为脚本试图破坏那些不存在的内容。

我尝试过这样的事情:

if (isset($_POST['tags'])){ 
    $tags = implode(", ", noescape($_POST['tags'])); 
}  

检查它是否存在的最佳方法是什么,然后将其内爆?

isset,array_key_exists?

7 个答案:

答案 0 :(得分:6)

您可以在一行中执行此操作,在这种情况下issetarray_key_exist会给您相同的结果,但您可能想要检查$_POST['tags']是否为数组...

$tags = isset($_POST['tags']) ? implode(", ", noescape($_POST['tags'])) : null;

$tags = (isset($_POST['tags']) && is_array($_POST['tags'])) ? implode(", ", noescape($_POST['tags'])) : null;

您可以在此处测试:http://codepad.org/XoU4AdsJ

答案 1 :(得分:2)

这应该有效:

if (isset($_POST['tags']) && is_array($_POST['tags'])){ 
    $tags = implode(", ", noescape($_POST['tags'])); 
}  

答案 2 :(得分:2)

if(array_key_exists('tags',$_POST))
{
..................
}

答案 3 :(得分:1)

if (!empty($_POST['tags'])) {
   $tags = implode(", ", noescape($_POST['tags']));
}

答案 4 :(得分:1)

我只会在imploding之前使用is_array,因此只有当你的内爆var是现有数组时,你的内爆才有效。如果未设置,则返回0:)

http://php.net/manual/en/function.is-array.php

答案 5 :(得分:1)

我使用is_array()和count():

if (is_array($_POST['tags']) && count($_POST['tags'])>0){ 
    $tags = implode(", ", noescape($_POST['tags'])); 
}  

答案 6 :(得分:1)

实际上,更简单的方法是做这样的事情:

<input type="hidden" name="tags[]" value="none" />
<input type="checkbox" name="tags[]" value="Tag 1" />
<input type="checkbox" name="tags[]" value="Tag 2" />
<input type="checkbox" name="tags[]" value="Tag 3" />

然后删除默认值。

显然,如果某个恶意用户决定在没有任何数据的情况下向您的脚本发送帖子,这仍会导致错误。