我发布了多个复选框,并将它们放入一个数组中 - 例如:“tags []”
发布它们时,我用逗号将它们内爆。
如果在表单上检查 NO 标签,然后发布,我会收到错误,因为脚本试图内爆不存在的东西。
我试过使用这样的东西:
if (isset($_POST['tags'])){
$tags = implode(", ", noescape($_POST['tags']));
}
检查它是否存在然后内爆的最佳方法是什么?
isset,array_key_exists?
在这种情况下,您可以在一行中执行此操作isset
,并且array_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
那应该工作:
if (isset($_POST['tags']) && is_array($_POST['tags'])){
$tags = implode(", ", noescape($_POST['tags']));
}
if(array_key_exists('tags',$_POST))
{
..................
}
if (!empty($_POST['tags'])) {
$tags = implode(", ", noescape($_POST['tags']));
}
我只会在内爆之前使用is_array,所以你的内爆只有在你的内爆 var 是现有数组时才有效。如果未设置,则返回 0 :)
我会使用 is_array() 和 count():
if (is_array($_POST['tags']) && count($_POST['tags'])>0){
$tags = implode(", ", noescape($_POST['tags']));
}
实际上,更简单的方法是执行以下操作:
<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" />
然后删除默认值。
显然,如果某些恶意用户决定在没有任何数据的情况下向您的脚本发送帖子,这仍然会导致错误。