Если массив установлен, что-то делать?

Я публикую несколько флажков и помещаю их в массив, например: «теги []»

При публикации я выделяю их запятыми.

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

Я пытался использовать что-то вроде этого:

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

Каков наилучший способ проверить, существует ли он, а затем взорвать его?

isset, array_key_exists?


person Latox    schedule 24.11.2010    source источник


Ответы (5)


Вы можете сделать это в одной строке, в этой ситуации isset и array_key_exist дадут вам тот же результат, но тогда вы можете проверить, является ли $_POST['tags'] массивом...

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

or

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

Вы можете протестировать здесь: http://codepad.org/XoU4AdsJ

person Shikiryu    schedule 24.11.2010

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

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

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

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

person Oliver M Grech    schedule 24.11.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" />

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

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

person Robin Duckett    schedule 24.11.2010

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

if (is_array($_POST['tags']) && count($_POST['tags'])>0){ 
    $tags = implode(", ", noescape($_POST['tags'])); 
}  
person Martin Schapendonk    schedule 24.11.2010
comment
Если однажды $_POST['tags'] окажется строкой, произойдет сбой, потому что count(string) вернет 1, как вы можете видеть здесь: codepad.org /AVfZS3qO - person Shikiryu; 24.11.2010
comment
Ты прав. Я только что исправил свой ответ, включив в него is_array(). - person Martin Schapendonk; 24.11.2010