Не работает присваивание ключа массива с помощью 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 шт):

Автор решения: bars

это вопрос про отладку, а не про код. вам надо сделать 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.

→ Ссылка
Автор решения: Sanya H

Вам переменной $column присваивать прямо значение реквеста, а не оборачивать его в массив. Оно и так есть ассоциативным массивом

$column = $_POST["field"];
echo $column["stext"]);
echo $column["ftext"]);
→ Ссылка
Автор решения: iBullRay

Всем спасибо)

С отладкой знаком, только она не помогала. Может быть все скэшировалось и сохранялся прежний результат?

Не знаю, что происходило, но по итогу перезагрузка сервера и браузера помогли решить проблему

→ Ссылка