Foreach на флажках не возвращает значения - PullRequest
1 голос
/ 25 ноября 2010

Раньше я делал скрипт, который прекрасно работал в PHP 5.2. Но когда недавно перешел на сервер моих друзей (версия PHP 4.4.9), я заметил, что некоторые действия работают не так, как должны. Результат того, что вернули флажки, сошел с ума ...

Это код, который я использую: Для формы:

<input type="checkbox" value="Box1" name="BoxGroup[]" />Box1
<input type="checkbox" value="Box2" name="BoxGroup[]" />Box2
<input type="checkbox" value="Box3" name="BoxGroup[]" />Box3

Для сценария действия:

if($_POST['BoxGroup'] == true){ // If one of the checkboxes were checked...
    foreach($_POST['BoxGroup'] as $value){
    $BoxGroup .= ", ".$value; // Make the array into a string
    }
    $BoxGroup = substr($BoxGroup,2); // To skip ", " from the beginning of the $BoxGroup variable
}

Теперь, что делает этот скрипт, так это; когда пользователь отправляет форму, он проверяет, был ли установлен один из флажков, и если это так, он создает строку, например: «значение, значение» и т. д. Я вставляю эти значения в свою базу данных. Когда я предварительно просматриваю то, что было отправлено в базу данных на странице, я получаю «ray / value / value», - так что только «ray» (как в «Array») передается для первого поля, которое кажется.

К сожалению, я не могу обновить серверную версию PHP, так как и у системного оператора, и у меня нет пароля администратора (я знаю, что это безумие).

Так что мне делать?

Ответы [ 3 ]

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

Я бы порекомендовал функцию взрыва: http://php.net/manual/en/function.implode.php

Так что вся ваша операция станет немного короче и проще для обзора.веселит

1 голос
/ 25 ноября 2010
implode(', ', array_keys($_POST['BoxGroup']))
0 голосов
/ 25 ноября 2010

Другие комментарии, касающиеся implode, являются хорошим советом, но я не понимаю, как это решит вашу проблему. (Ну, на самом деле, это возможно, если вы инициализируете переменную с возвращаемым значением implode, но это не решает проблему с ядром)

Инициализировать $BoxGroup правильно. Бьюсь об заклад $BoxGroup = 'Array'; еще до того, как цикл запустится ... вероятно, из-за включенного register_globals. Э-э-э-э, отключи это.

В .htaccess:

php_flag register_globals off

Для уточнения, я предполагаю, что если вы сделали var_dump($BoxGroup), вы увидите, что он уже содержит эти значения благодаря register_globals. Массив обрабатывается как строка 'Array', когда вы соединяете его с другой строкой.

...