PHP isset() возвращает false, когда должен возвращать true?

Хорошо... поэтому в своих формах я устанавливаю все поля примерно так:

name="formdata['name']" и name="formdata['active']".

Конечно, это означает, что все, что введено в эти поля, должно храниться в $_POST['formdata']['name'] и $_POST['formdata']['active'].

Я делаю свои значения таким образом, потому что я передаю «данные формы» паре написанных мною функций (которые работают так, как должны). Теперь предположим, что я использую это для редактирования элемента или добавления нового элемента — имя будет выполнять эти функции так, как должно, и элемент будет сохранен со своим именем, но «активный» никогда не сохранится так, как должен. Поле ввода представляет собой флажок, если он установлен, значение равно "1".

Если я print_r($_POST['formdata']) ввожу "Имя" и отмечаю "активно", я получаю следующее: Array ( ['name'] => Name ['active'] => 1 ).

Выглядит хорошо, верно? Но когда я делаю следующее:

if (!isset($_POST['formdata']['active']) echo "Error 1";
if (empty($_POST['formdata']['active']) echo "Error 2";
if ($_POST['formdata']['active'] != 1) echo "Error 3";

Все они возвращают ошибки! Я сбит с толку этим. Я упускаю из виду что-то очень простое? Я думаю об этом уже как минимум 2 часа.


person tuespetre    schedule 20.12.2011    source источник
comment
Первые два недействительны; у них несовпадающие скобки. Есть ли (хорошая) причина, по которой вы помещаете все в параметр с именем formdata?   -  person Ry-♦    schedule 20.12.2011
comment
Пробовали var_dump переменную, чтобы проверить, действительно ли она установлена?   -  person Corubba    schedule 20.12.2011
comment
@minitech - Вы правы, скобок не хватает. Я просто ввел эти строки в поле вопроса здесь, а не копировал/вставлял - я могу заверить вас, что синтаксис для них правильный в моем фактическом файле .php. И да, у меня есть достаточно веская причина поместить их в formdata — я передаю это функциям, которые берут данные из формы и автоматически устанавливают свойства объекта, и строят «возврат», чтобы в случае ошибки Обнаруживается, когда модель проверяет ввод и пользователь возвращается к форме, поля, которые были введены, уже будут заполнены.   -  person tuespetre    schedule 20.12.2011
comment
@BloodyWorld -- var_dump($_POST['formdata']['active']); выводит NULL, хотя print_r($_POST['formdata']); показывает ['active'] => 1.   -  person tuespetre    schedule 20.12.2011


Ответы (2)


Удалите одинарные кавычки из имен входных данных в HTML-коде, чтобы он выглядел следующим образом:

name="formdata[active]"

Добавление одинарных кавычек означало бы, что вам нужно будет получить доступ к массиву в PHP как:

$_POST['formdata']['\'active\'']

or

$_POST['formdata']["'active'"]

что крайне неудобно.

person webbiedave    schedule 20.12.2011
comment
Спасибо! Я знал, что это должно быть что-то до глупости очевидное! :) - person tuespetre; 20.12.2011

пропущена скобка:

if (!isset($_POST['formdata']['active'])) echo "Error 1";
if (empty($_POST['formdata']['active'])) echo "Error 2";
person Shackrock    schedule 20.12.2011