Я работаю над некоторыми расширениями для 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"
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-коде.
["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]"
).
name="old1[position_new][]"
должно работать для вас.