如何以 html 表单提交项目列表

Aar*_*n O 5 html javascript php forms ajax

好吧,原来的请求似乎很混乱,所以让我尝试重新措辞。我有一个表单,请参阅下面的代码,有两个选择,用户将内容从可用位置列表(一)移动到选定位置列表(二)并输入一些其他字段(我包括一个文本字段作为示例),我需要能够查看第一个选择中的值(一)以及第二个列表中的值(二)

由于存在大量值,因此让用户仅单击或按住 Ctrl 键并单击他们想要的值是不切实际的。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Test for P1727410</title>
    <script src="/ref-files/js/jquery-3.2.1.min.js"></script>
    <script type="text/javascript">
        $(function () {
            function moveItems(origin, dest) {
                $(origin).find(':selected').appendTo(dest);
            }

            function moveAllItems(origin, dest) {
                $(origin).children().appendTo(dest);
            }

            $('#left').click(function () {
                moveItems('#Two', '#One');
            });

            $('#right').on('click', function () {
                moveItems('#One', '#Two');
            });

            $('#leftall').on('click', function () {
                moveAllItems('#Two', '#One');
            });

            $('#rightall').on('click', function () {
                moveAllItems('#One', '#Two');
            });
        });
    </script>
</head>
<body>
    <h2>Test for P1727410</h2>
    Available Locations | Selected Locations
    <form method="POST" action="#">
        <select id="One" name="One" multiple="multiple">
            <option value="1">Loc1</option>
            <option value="2">Loc2</option>
            <option value="3">Loc3</option>
        </select>
        &nbsp;
        &nbsp;
        <select id="Two" name="Two" multiple="multiple">
        </select>

        <br />
        <input type="text" name="something" /><br />
        <input type="hidden" name="form" value="1" />
        <input type="button" id="leftall" value="<<" />
        <input type="button" id="left" value="<" />
        <input type="button" id="right" value=">" />
        <input type="button" id="rightall" value=">>" />
        <br />
        <input type="Submit" name="Submit" value="Submit" />
    </form>
    <p>
    <?php
        if(isset($_POST['form'])) {
            echo "<pre>";
            print_r($_POST);
            echo "</pre>";
        }
    ?>
    </p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

evi*_*iko 3

这个问题很令人困惑,因为我们不确定您到底想在前端显示什么(HTML + Javascript),您想发送到后端(PHP)什么,以及您想插入什么/在数据库中更新/删除。

我想到的最简单的解决方案如下:

您的数据库中应该有 3 个表:users、locations 和 user_locations。user_locations 应至少有 2 列:“user_id”和“location_id”。

HTML:添加新的 html 输入隐藏:

<input type="hidden" id="two_values" name="two_values" value="" />
Run Code Online (Sandbox Code Playgroud)

Javascript:当用户单击提交按钮时,获取第二个下拉列表的所有值,并将它们发送到服务器。就像这样:

<script>
    $(document).ready(function() {
        // on user clicks submit button, this code will be executed first
        $('form').submit(function() {
            // we'll take all values of the Two dropdown and put them in 1 string
            var all_values = '';
            $("#Two option").each(function() {
                if(all_values === '') {
                    all_values += $(this).val();
                } else {
                    all_values += ',' + $(this).val();
                }
            });
            $('#two_values').val(all_values);
        });
    });
</script>
Run Code Online (Sandbox Code Playgroud)

PHP:获取two_values,并将它们拆分为数组。

if(isset($_POST['form'])) {
    $two_values_arr = explode(',', $_POST['two_values']);
    // ...
}
Run Code Online (Sandbox Code Playgroud)

PHP 和 MySQL:首先,删除所有先前用户的位置:

$q = 'DELETE FROM `locations` WHERE `user_id` = ' . $user_id;
// run the $q ..
Run Code Online (Sandbox Code Playgroud)

然后,执行循环以插入该用户的每个值

foreach($two_values_arr as $location_id) {
    $q = 'INSERT INTO `user_locations` (user_id, location_id) VALUES (' . $user_id . ', ' . $location_id . ')';
    // run the $q ..
}
Run Code Online (Sandbox Code Playgroud)

查看 HTML:当用户查看页面时,您应该获取所有用户的位置,用户拥有的位置应打印到“两个”下拉列表中,而他没有的位置应打印到“一个”下拉列表中