PHP POST всегда получает значение по умолчанию формы HTML

0

Я работаю над некоторыми расширениями для 20-летнего PHP-кода. Теперь мне нужно было добавить новое поле ввода текста и обработать данные, как и во всех ранее существующих текстовых полях ввода. Evrything отлично работает, за исключением этого нового ввода.

У меня есть HTML-форма:

<form action="form.php?<?php echo SID; ?>" method="post">
  <?php echo "<div id=\"inputheader-title\"><input type=\"text\" name=\"".$new.$i.'[position_new]'."\" size=\"3\" maxlength=\"2\" value=\"".$i."\">. Entry</div>"; ?>
  [...]
<input class="button" type="image" src="<?php echo $HTML_IMG; ?>/send.png">
</form>

[...] обозначает дополнительные поля ввода, которые все работают нормально. Все поля ввода текста используют один и тот же шаблон.

Исходный код текстового поля в моем браузере выглядит так:

<input type="text" name="old1[position_new]" size="3" maxlength="2" value="1">

Это выглядит хорошо для меня. Но когда я отправляю данные формы, значение для old1 [position_new] всегда используется по умолчанию в PHP $_POST. Все остальные данные верны (как вставлены в поля формы). Я проверил это с помощью var_dump($_POST)

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

Короче: я вошел: 3

Значение по умолчанию: ["position_new"]=> string(1) "1"

Браузер показывает: ["position_new"]=> string(1) "3"

var_dump($_POST) shows: ["position_new"]=> string(1) "1"
  • 0
    name="old1[position_new][]" должно работать для вас.
  • 0
    На самом деле! Теперь я вижу массив, содержащий три строки («3», «1», «1»). Почему эти (и только эти) входные данные обрабатываются как массив? И я могу обойти это?
Показать ещё 2 комментария
Теги:
forms
post

1 ответ

1
Лучший ответ

PHP преобразует поля с [] в имя в массив. Если вы этого не хотите, удалите [ и ] из имени поля.

<?php
  var_dump($_REQUEST);
  echo '<pre>'.print_r($_REQUEST,true).'</pre>';
?>
<form action="/test.php" method="post" name="myform">
  <input type="text" name="old1[position_new]" size="3" maxlength="2" value="1">
  <input type="text" name="old1[art]" size="15" maxlength="50" value="Lecture">
  <input type="submit" name="save" value="save">
</form>

В этом примере, с вашими именами полей, массив правильно заполнен. Проверьте дублирующее поле с тем же именем со значением по умолчанию в вашем html-коде.

  • 0
    То, что я хочу, это ["old1"]=> array(14) {["position_new"]=> string(1) "3", ["art"]=> string(7) "Lecture"} . Но то, что я получаю, это ["old1"]=> array(14) {["position_new"]=> string(1) "1", ["art"]=> string(7) "Lecture"} . Таким образом, массив правильный, но не значение. Вместо этого значение ["art"] является правильным. Но поле ввода определяется так же, как поле для position_new ( name="old1[art]" ).
  • 0
    Действительно, были повторяющиеся поля. Не думал об этом простом решении. Большое спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню