Почему динамически генерируемые поля ввода не добавляются в массив $ _POST?

#javascript #php #jquery #post

#javascript #php #jquery #Публикация

Вопрос:

У меня есть форма, в которой пользователь может создавать списки точек, которые он хочет добавлять динамически. Но эти добавленные точки по какой-то причине не добавляются в массив $ _POST в php.

Ошибка:

Неопределенный индекс: lis

Скрипка js: https://jsfiddle.net/Lnzs97ga/18 /

JavaScript:

   $(function() {
    let amountLi = 0;
    let increased;
    $("#amountLi").change(function() {
        if (amountLi <= (Number)($("#amountLi").val())) {
            increased = true;
        }
        else {
            increased = false;
        }
        amountLi = (Number)($("#amountLi").val());
    });

    $("#create_list_items").click(function() {
        if ($(".input-area-lis").length == 0) {
            $("#liGenerate").after(`<div class="input-area-lis" id="lis"></div>`);
        }
        
        let lis = $("#lis");
        let liOnPage = lis.children(".li").length;
        if (increased == true) {
            for (let i = liOnPage; i < amountLi; i  ) {
                lis.append(`<div class="li">
                    <label>Punct №${i   1}</label>
                    <input type="text" name="lis[]">
                </div>`);
            }
        }
        else {
            for (let i = liOnPage - 1; i >= amountLi; i--) {
                console.log(lis.children(".li").eq(i));
                lis.children(".li").eq(i).remove();
            }
        }
        
    });
})
 

PHP:

 $lis = $_POST["lis"]; // Error
 

UPD: больше контекста о new_album.php
В принципе, больше нет контекста о new_album.php , все, что я могу приложить здесь, это:

         var_dump($_POST);
        var_dump($lis);
        $name = htmlentities($_POST["name"]);
        $size = $_POST["size"];;
        foreach ($size as $elem) {
            $elem = htmlentities($elem);
        }
        $cost = htmlentities($_POST["cost"]);
        $lis = $_POST["lis"];
        foreach ($lis as $li) {
            $li = htmlentities($li);
        }
 

var_dump($ _POST) дает:

 array (size=3)
  'name' => string 'Album1' (length=6)
  'size' => 
    array (size=2)
      0 => string '20' (length=2)
      1 => string '30' (length=2)
  'cost' => string '2000' (length=4)
 

var_dump($lis) выдает: null

Комментарии:

1. Невозможно воспроизвести. Кажется, все в порядке. Как вы отправляете форму, регулярно или через какой-то JS?

2. ваш код работает, не print_r($lis);

3. var_dump($lis) вероятно, имеет значение null, потому что вы запускаете его до определения $lis . Но, несмотря на это, похоже, что в var_dump ($ _POST) нет «lis»; … что не соответствует показанному вами коду на стороне клиента. Когда вы отправляете форму, загляните на вкладку Сети вашего браузера (убедитесь, что включен режим сохранения журнала, чтобы вы все еще могли видеть запрос POST). Посмотрите, что на самом деле отправляется. JS, который вы показали здесь, похоже, не воспроизводит проблему, которую вы показываете в PHP. Все это немного сбивает с толку.

4. Когда я смотрю на скрипку, я не вижу элемента формы с именем size , который присутствует в $_POST . Это говорит мне о том, что скрипка была в некоторой степени изменена (вероятно, для упрощения), но поскольку код скрипки не воспроизводит проблему, возможно, какой-то важный бит был упущен. Попробуйте сократить свой фактический код до того, который указан в скрипке, а затем добавьте различия одно за другим. Возможно, таким образом вы сможете определить виновника.

5. Большое вам спасибо за вашу помощь! Я бы с удовольствием нажал 1 на все ваши комментарии, но для этого у меня должно быть не менее 50 повторений