Member 13139108 Ответов: 0

Генерация элементов формы в цикле PHP


Привет,

Я получил Ajax для работы с простыми формами, но когда я пытаюсь создать несколько элементов формы в цикле, у меня возникают проблемы с распаковкой всех этих данных и использованием их для обновления моей базы данных. У кого-нибудь есть какие-либо соображения о том, как я мог бы достичь этого на основе моего кода ниже? В принципе, каждая позиция имеет потенциал для обновления своей цены. Когда пользователь нажимает кнопку Отправить, он вызывает функцию Ajax, которая должна передать все данные формы price-update.php. Там он распаковывает каждый $_POST и соответствующим образом обновляет базу данных.

Примечание: этот код сокращен для визуальной простоты. Некоторые переменные используются, но методы инициализации не приводятся.

Выполнение теста print_r($_POST) приводит к следующему в URL-адресе:

?submit=Submit+Changes&price%5B%5D%3B+%3F>=5612&id%5B%5D=6&price%5B%5D%3B+%3F>=25&id%5B%5D=5&price%5B%5D%3B+%3F>=52&id%5B%5D=3&price%5B%5D%3B+%3F>=&id%5B%5D=2&price%5B%5D%3B+%3F>=&id%5B%5D=8



<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script>
$(function () {

    $('form').on('submit', function (e) {

        e.preventDefault();

        $.ajax({
            type: 'post',
            url: '/price-update.php',
            data: $('form').serialize(),
            success: function () {
                alert('Data was submitted');
            }
        });
    });
});
</script>

//Multiple form elements generated depending on how many prices exist in database
<form>
    <input name="submit" type="submit" value="Submit Changes" />
    <table>
        <tbody> 
        <?php 
        $n = 0;
        for ($z = 0; $z < count($names); $z++) { ?>
            <tr id = "row-<?php echo $z; ?>">
                <td><input type="number" name ="price[]; ?>" class="price-update" value="" min="1" max="999999999" /></td>
                <td><input type="hidden" name="id[]" class="price-id" value="<?php echo $id_array[$n]; ?>" /></td>
                <?php $n++;?>
            </tr>
        <?php
        }?>
        </tbody>
    </table>
</form>

//price-update.php

<?php

    if($_POST) {

        //Uses SSL connection with mysqli
        require_once('connection.php');

        $IDs = array();
        $Prices = array();

        foreach($_POST as $key => $value) {
            if (strstr($key, 'id'))
            {
                $IDs[] = $value;
            }
            if (strstr($key, 'price'))
            {
                $Prices[] = $value;
            }
        }

        for($i = 0; $i < count($IDs); $i++) {
            $price_update = "UPDATE prices SET price='".$Prices[$i]."' WHERE id='".$IDs[$i]."'";
            $send_update = $instance->query($price_update);
        }

    }

?>


Что я уже пробовал:

Много изменений. Простые формы обновляют базу данных просто отлично - но генерация элементов формы из цикла PHP, похоже, вызывает проблемы. Я думаю, что моя проблема связана с управлением потоком для элементов $_POST.

0 Ответов