Не работает присваивание ключа массива с помощью input
Имеется форма, с помощью которой вводятся значения в input, который является массивом
<textarea class="description-area" name="field[stext]"></textarea>
<textarea class="description-area" name="field[ftext]"></textarea>
...итд
Но не получается получить массив вида ["stext" => "Тест1", "ftext" => "Текст2", ...]
Выходит ошибка: Undefined index: stext, Undefined index: ftext
Работает только вывод, когда PHP сам инкрементирует ключ:
name="field[]" ["0" => "Текст1", ...]
Но необходимо, чтоб был определенный ключ для дальнейших операций
HTML:
<form action="data.php" method="POST">
<textarea class="description-area" name="field[stext]"></textarea>
<textarea class="description-area" name="field[ftext]"></textarea>
<button class="save-btn" name="edit">Изменить</button>
</form>
data.php:
if (isset($_POST["edit"])) {
// внутри array должно быть так "stext" => "Текст1", "ftext" => "Текст2",а получается только так "0" => "Текст1" итд
$column = array($_POST["field"]);
}
Ответы (4 шт):
это вопрос про отладку, а не про код. вам надо сделать print_r($_POST); на приёме формы, и вы увидите, что ваши данные не в $_POST['stext'] а $_POST['field']['stext']
Сперва любопытный факт. Стандартный application/x-www-form-urlencoded не предусматривает вложенных структур. Там есть только имя и значение. Однако php придаёт особое значение квадратным скобкам в имени (это не стандарт, в других языках квадратные скобки не парсятся). Запустите следующий скрипт, чтобы посмотреть как это работает.
<?php // index.php
// php -S localhost:8080
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
echo '<pre>';
var_dump($_POST);
echo '</pre>';
}
?>
<form action="" method="POST">
<textarea name="field[stext]"></textarea>
<textarea name="field[ftext]"></textarea>
<button type="submit">Submit</button>
</form>
То что надо!
В таком случае, что же не так с вашим кодом? Сложно сказать наверняка. Скорее всего какая-нибудь досадная опечатка (например невидимый символ в названии field[ftext]) или ошибка в вашем коде, который работает с данными. Может быть массив $_POST модифицирует какой-то код прежде чем вы пытаетесь извлекать данные. Может быть у вас какая-то уникальная сборка php, которая больше не парсит квадратные скобки (это совсем невероятный случай).
Вам правильно советуют научиться отлаживать код. Познакомьтесь хотя бы с таким примитивным методом как dump and die.
Вам переменной $column присваивать прямо значение реквеста, а не оборачивать его в массив. Оно и так есть ассоциативным массивом
$column = $_POST["field"];
echo $column["stext"]);
echo $column["ftext"]);
Всем спасибо)
С отладкой знаком, только она не помогала. Может быть все скэшировалось и сохранялся прежний результат?
Не знаю, что происходило, но по итогу перезагрузка сервера и браузера помогли решить проблему