在ajax调用的每个表单输入中添加单个隐藏的输入值

时间:2018-09-13 18:23:54

标签: javascript jquery arrays ajax

我有一个带有按钮的表单,可以添加动态输入字段,并且正在创建ajax问题。我的Ajax帖子给我500个错误  但是我的控制台数据日志现在是这样的: enter image description here

但是我需要将它们插入为

<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="user-scalable=no, initial-scale=1" />
        <link rel="stylesheet" type="text/css" href="../style.css">
    </head>
    <body>

    <div class="anything">
        <a href="dir/another.html">Link</a>
    </div>
    ...

如果有道理。

因此,基本上,问题是我在任何给定时间都有多个输入(包含文本值),并且隐藏的输入形式为我提供了正确的代码ID。

但是,我需要使我的数组包含每个具有输入文本值和代码ID的元素。因此,对于创建和填充的每个输入,我还需要为其分配该表单的隐藏输入的值,以便将它们成对发送到我的foreach循环并进行插入。

这是我的addticker.php,它被要求插入:

insert into ticker_content (ticker_id, content)
     values (1, 'one'), (1, 'two');

因此,基本上,对于每个Items []值,我都需要插入相同的隐藏字段。

这是我的表格和JS代码供参考。第一个JS块主要用于动态添加输入的功能,但是最后一个JS块是使用serializeArray()的ajax;

$items = $_POST['Items'];
$tickerID = $_POST['tickerID'];

foreach ($items as $item){

    $addTicker = "
        INSERT INTO ticker_content (tickerID, content)
        values ('$tickerID', '$item');
     "
     $mysqlConn->query($addTicker);
}

1 个答案:

答案 0 :(得分:2)

首先,您在代码中缺少分号(这很可能导致您的500错误)。

第二,如果您希望将表单中的所有字段捆绑为一个查询,则以下内容将构建一个查询,类似于您之前在问题中指出的内容:

  

插入到ticker_content(ticker_id,内容)VALUES(1,'one'),(1,'two'),...

$items = $_POST['Items'];
$tickerID = $_POST['tickerID'];

$addTicker = "INSERT INTO ticker_content (tickerID, content) values";
foreach ($items as $item){
    $addTicker .= "('$tickerID', '$item'),";
}
$addTicker = substr($addTicker, 0, -1); // Eat that last comma

$mysqlConn->query($addTicker);

您的HTML也需要一些工作,因为id属性在页面上应该是唯一的。由于您要复制表格,因此您应该执行以下操作:

<form id="Items<?php echo $ticker['ticker']?>" class="tickerform" method="post">   

然后更新您的JavaScript:

// Using $(this) in Jquery allows you to access the 
// element that is making the method call (in this case, the form)
$(".tickerform").submit(function(e) {
    e.preventDefault();
    var data = $(this).serializeArray(); 
    console.log(data);
    $.ajax({
       type: "POST",
       url: "addticker.php",
       data: data, // Don't need to serialize again, 'var data' is still in scope.
       success: function(data)
       {
           alert(data); // show response from the php script.
       }
    });
});