Если массив isset, сделать что-нибудь? - PullRequest
4 голосов
/ 24 ноября 2010

Я отправляю несколько флажков и помещаю их в массив - например: "tags []"

При отправке я добавляю запятые.

Если тегов нетпроверяются в форме, а затем публикуются, я получаю ошибки, поскольку скрипт пытается внедрить что-то, чего там нет.

Я пытался использовать что-то вроде этого:Как лучше всего проверить, существует ли он, а затем сжечь его?

isset, array_key_exists?

Ответы [ 7 ]

6 голосов
/ 24 ноября 2010

Вы можете сделать это в одну строку, в этом случае 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

2 голосов
/ 24 ноября 2010
if(array_key_exists('tags',$_POST))
{
..................
}
2 голосов
/ 24 ноября 2010

Это должно работать:

if (isset($_POST['tags']) && is_array($_POST['tags'])){ 
    $tags = implode(", ", noescape($_POST['tags'])); 
}  
1 голос
/ 24 ноября 2010

На самом деле, более простой способ сделать это - сделать что-то вроде этого:

<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" />

А затем удалите значение по умолчанию.

Очевидно, что это все равно приведет к ошибкам, если какой-нибудь злонамеренный пользователь решит отправить сообщение в ваш скрипт без каких-либо данных.

1 голос
/ 24 ноября 2010

Я бы использовал is_array () и count ():

if (is_array($_POST['tags']) && count($_POST['tags'])>0){ 
    $tags = implode(", ", noescape($_POST['tags'])); 
}  
1 голос
/ 24 ноября 2010

Я бы просто использовал is_array перед имплозией, чтобы ваша имплозда работала, только если ваша имплозированная переменная является существующим массивом. Возвращает 0, если он также не установлен:)

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

1 голос
/ 24 ноября 2010
if (!empty($_POST['tags'])) {
   $tags = implode(", ", noescape($_POST['tags']));
}
...