2010-11-24 1 views
4

Я размещаю несколько флажков и помещаю их в массив - например: «tags []»Если массив isset, сделайте что-нибудь?

При публикации их я запятнал их запятыми.

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

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

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

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

isset, array_key_exists?

ответ

6

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

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

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

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

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

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

1

Я хотел бы использовать is_array() и COUNT():

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

Если `$ _POST ['tags']` будет одной строкой в ​​один день, это приведет к сбою, потому что `count (string)` будет возвращать `1`, как вы можете видеть здесь: http: //codepad.org/AVfZS3qO – Shikiryu 2010-11-24 10:32:02

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

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

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

Смежные вопросы