【问题标题】:How to insert multiple inputs with same name in php through ajax如何通过ajax在php中插入多个同名输入
【发布时间】:2018-10-26 00:41:14
【问题描述】:

我有允许插入多个输入的 html 表单。我只能插入第一个输入。如何通过ajaxphp中插入多个值,我的HTML表单如下。

<tr>
    <th>ID</th>
    <td><input type="number" id="navid"></td>
</tr>
<tr>
    <th>Menu IN</th>
    <td><input type="text" name="menuin"></input></td>
</tr>
<tr>
    <th>Menu ENG</th>
    <td><input type="text" name="menueng"></input>
    </td>
</tr>

用户可以动态添加输入字段(动态添加由jquery完成) 如果只有一个输入组,通过是没有问题的。但是如果用户添加多个输入,我想传递多个输入。

我已经将值传递为

$("#submit").click(function(){
    var navid = $("#navid").val();
    var menuin = $("input[name='menuin']").val();
    var menueng = $("input[name='menueng']").val();
    $.ajax({
        url: 'insert_nav.php',
        type: 'post',
        data: {navid:navid,menuin:menuin,menueng:menueng},
        success: function(data){
            alert(data);
            $('#nav')[0].reset();
        }
    });
});

我已插入由 ajax 传递的输入值,如下所示

if (isset($_POST["navid"]) && !empty($_POST["navid"])) {
        $query1 =$con->prepare("INSERT INTO menu(cid, title, en_title) VALUES (:navid, :menuin, :menueng)");
        $query1->bindParam(':menuin',$_POST["menuin"]);
        $query1->bindParam(':menueng',$_POST["menueng"]);
        $query1->bindParam(':navid', $_POST["navid"]);
        $query1->execute();
        $msg1 = 'Menu has inserted';    
    }

现在我想插入多个值。怎么办?

【问题讨论】:

  • 这个$("input[name='menuin']").val(); 只会获取它找到的第一个输入,而不是全部。这就是为什么您的输入只能得到一个值。我建议您改为序列化表单并将所有内容发送到 PHP。
  • 同样的原则也适用于您的#navid。你想在这里实现什么?这样我们就可以更好地格式化我们的答案,以便我们可以为您提供帮助。
  • 您不能有多个具有相同 ID 的元素。这样做会使您的 HTML 无效,必须修复此问题以确保其正常工作。此外,如果您想拥有多个具有相同名称属性的表单元素,您可以使用数组,例如 &lt;input name="menueng[]"&gt;
  • @hungrykoala,感谢您的回复。请查看已编辑的问题
  • @hungrykoala 实际上,根据this answer 看来,使用数组形式名称更像是一项 PHP 发明,如果有多个元素同名。

标签: php jquery ajax


【解决方案1】:

您必须在输入字段中为多个输入元素应用数组。并通过 ajax 传递数组并使用 foreach 循环插入数据库。

HTML

<tr>
    <th>ID</th>
    <input type="number" name="navid[]" id="navid">
</tr>
<tr>
    <th>Menu IN</th>
    <td><input type="text" name="menuin[]"></input></td>
</tr>
<tr>
    <th>Menu ENG</th>
    <td><input type="text" name="menueng[]"></input>
    </td>
</tr>

阿贾克斯

$("#submit").click(function(){
    var navid = [];
    $('input[name="navid[]"]').each( function() {
        navid.push(this.value);
    });
    var menuin = [];
    $('input[name="menuin[]"]').each( function() {
        menuin.push(this.value);
    });
    var menueng = [];
    $('input[name="menueng[]"]').each( function() {
        menueng.push(this.value);
    });
        $.ajax({
            url: 'insert_nav.php',
            type: 'post',
            data: {navid:navid,menuin:menuin,menueng:menueng},
            success: function(data){
                alert(data);
                $('#nav')[0].reset();
            }
        });
});

PHP

foreach ($_POST["navid"] AS $key => $item){               
    $query1 =$con->prepare("INSERT INTO menu(cid, title, en_title) VALUES (:navid, :menuin, :menueng)");
    $query1->bindParam(':menuin',$_POST["menuin"][$key]);
    $query1->bindParam(':menueng',$_POST["menueng"][$key]);
    $query1->bindParam(':navid',$item);
    $query1->execute();
    $msg1 = 'Menu has inserted';     
}    

【讨论】:

  • 多么棒的答案……向你致敬。这个问题毁了我的一天。现在它起作用了。再次感谢。
【解决方案2】:

HTML:

<form id="the_form">
<tr>
    <th>ID</th>
    <td><input type="number" name="navid[]" id="navid"></td>
</tr>
<tr>
    <th>Menu IN</th>
    <td><input type="text" name="menuin[]"></input></td>
</tr>
<tr>
    <th>Menu ENG</th>
    <td><input type="text" name="menueng[]"></input>
    </td>
</tr>
<input type="submit" value="Submit Form" id="submit"/>
</form>

我为您的 ID 添加了name,以便在您提交表单时包含它,我只是添加了一个表单标签,因为它没有出现在您的问题中。

JS:

  Read about serialize 
  (https://stackoverflow.com/questions/15173965/serializing-and-submitting-a-form-with-jquery-post-and-php)


$("#submit").click(function(){
    var form_data = $("#the_form").serialize();
    $.ajax({
        url: 'insert_nav.php',
        type: 'post',
        data: {form_data:form_data},
        success: function(data){
            alert(data);
            $('#nav')[0].reset();
        }
    });
});

PHP //由于提交的数据现在是一个数组的集合,因此您必须遍历它才能将它们保存在数据库中,因为您无法将数组直接保存在数据库中。

if (!empty($_POST["navid"])) {
    for($counter = 0; $counter < sizeof($_POST["navid"]); $counter++){
        $query1 =$con->prepare("INSERT INTO menu(cid, title, en_title) VALUES (:navid, :menuin, :menueng)");
        $query1->bindParam(':menuin',$_POST["menuin"][$counter]);
        $query1->bindParam(':menueng',$_POST["menueng"][$counter]);
        $query1->bindParam(':navid', $_POST["navid"][$counter]);
        $query1->execute();
        $msg1 = 'Menu has inserted'; 
    }    
 }

【讨论】:

  • @hugrykoala 非常感谢您在这件事上的帮助。还是不行。我想知道我怎么了。 ajax 只返回空白信息,无法插入数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-03
  • 2023-01-05
  • 1970-01-01
  • 2023-03-19
  • 2018-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多