Доброй ночи! Замучался с отладкой... Есть форма: HTML: <form action="script.php" method="post"> <input name="NAME" type="hidden" value="не указан" /> <input name="REG" type="hidden" value="не указан" /> ... <div> <label for="org-name">Название организации: </label> <input type="text" name="NAME" id="org-name"/> </div> <div> <label for="reg-numb">Регистрационный номер в УФПР: </label> <input type="text" name="REG" id="reg-numb"/> </div> ... Предполагается, что если поле не заполнено, передается значение hidden,но получаю следующее: Array ( ... [NAME] => [REG] => ... ) В чем может быть промах?
Промах в том, что последняя форма "перекрывает" предыдущую, вне зависимости от значения. Это как: $var = 'php'; $var = null; var_dump($var); // NULL
в случае $var = null мы переменную создаем, а если <input type="text" name="NAME" id="org-name"/> не заполнить, переменная $_POST['NAME'] не создастся. Или я ошибаюсь?
oleha Создастся, но пустая. И не нужно тут этих скрытых полей, делай так: $name = isset($_POST['name'])?$_POST['name']:null'; if(!empty($name)) { ... } else { $name = 'не указано'; }
Добрый вечер! У меня немного другая проблема: имеется форма. В форме есть элементы "input" типа "text", при загрузке страницы из базы данных в эти поля я загружаю данные, и помещаю их в значение величины "value". Если по-русски выражаться задаю полям предопределенное значение. Пользователь может внести изменения в эти поля или оставить значения по умолчанию. После внесения данных пользователь сабмитит форму методом Post. Проблема заключается в следующем: таким способом я пытаюсь записать введенные данные в базу, но в итоге записываются только те данные, которые были внесены вручную пользователем. При просмотре содержания массива $_POST функцией print_r() я вижу, что все данные, даже те которые не были изменены содержатся в массиве. Не могу понять в чем проблема... Помогите, пожалуйста. Заранее благодарен за помощь.
Вот и я не могу понять Если в $_POST находятся все нужные вам данные. Но записываются в БД не все. Видимо что-то происходит на этом промежутке кода? Вот только что? И кто может это знать?
В моем случае это происходит еще до записи в базу данных. Здесь кусок кода, в котором, собственно, и творятся все чудеса: $k=0; while(current($_POST)) { if (key($_POST) <> "submit") { $data_to_record[$k] = current($_POST); if ($k == 2) { record_results(date("Y-m-d"), $data_to_record, key($_POST), $_SESSION['pointid'], $conn); $k = -1; } } $k++; next($_POST); }
PHP: <?php $k=0; while(current($_POST)) { if (key($_POST) <> "submit") { $data_to_record[$k] = current($_POST); if ($k == 2) { record_results(date("Y-m-d"), $data_to_record, key($_POST), $_SESSION['pointid'], $conn); $k = -1; } } $k++; next($_POST); } перепишу ато ппц неприятно читать я бы сделал просто key in aray зачем тут k?можно же просто конкретную ячейку массива указывать, или нет? k==2 что то мы делаем потом k-1 делается .... получаем 1 потом внизу снова k++ снова получаем 2 и все повторяется что то странная схема...а не проще сделать if (key($_POST) == "submit")
код малость суровый. дамп $_POST можно привести? И комментариями пометить какие из данных были внесены пользователем..
Значит, поясню: идея в том, чтобы брать данные из массива $_POST группами по 3. Для этого я и использую эту замысловатую конструкцию с переменной $k. На каждом шаге я заношу величину из POST в массив data_to_record и потом передаю его процедуру record_results через каждые 3 итерации. Возможно это не самый правильный подход, но я пока только учусь. Буду рад, если вы посоветуете иное решение. С радостью сделаю это, если подскажете как
Я как понимаю, у него что-то типа: Значение1 параметр1 параметр2 параметр2 Значение2 ... reddyy В именах полей можно использовать массивы. <input type="text" name="value1[]"><input type="text" name="value1[]"><input type="text" name="value1[]"> <input type="text" name="value2[]"><input type="text" name="value2[]"><input type="text" name="value2[]"> Тогда в php получится вложенный цикл.
Array ( [pr2693] => 0 [per2693] => 0 [2693] => 0 // поля для заполнения в форме представлены в виде таблице [pr66] => 0 [per66] => 0 [66] => 0 // по 3 столбца, в каждом столбце по 3 тега <input> [pr9] => 0 [per9] => 0 [9] => 0 // данный дамп получается, если пользователь не меняет [submit] => Сохранить ) // величин по умолчанию ( в данном случае, это все нули) // [submit] => Сохранить - это соответственно кнопка, при нажатии на которую сабмитится форма. В таком варианте программа даже не входит в цикл while (3 строка кода)
Да меня собственно не интересовало, что у него там. Вопрос был направлен на то, чтобы человек подумал - почему именно по 3. reddyy во-первых, поля в форме обзывать следующим образом - HTML: <input name="pr[2693]"> <input name="per[2693]"> и т.д. или, что удобнее на мой взгляд, HTML: <input name="data[2693][pr]"> <input name="data[2693][per]"> <input name="data[2693][id]"> Потому что цифры - это номер строки/записи. А ключи дальше - это имена полей. Дальше элементарный цикл PHP: <?php $data = $_POST['data']; foreach($data as $key => $row) { var_dump($key, $row); } думаю, что делать с $key, $row - догадаетесь.
Simpliest, спасибо большое! Все заработало. Данные теперь сохраняются, и ваш способ явно красивее. Kreker, спасибо также за ваше замечание.