【发布时间】:2018-09-13 18:23:54
【问题描述】:
我有一个带有可以添加动态输入字段的按钮的表单,它正在创建一个 ajax 问题。我的 ajax 帖子给了我 500 个错误 但是我现在的控制台数据日志是这样的:
但我需要将这些插入为
insert into ticker_content (ticker_id, content)
values (1, 'one'), (1, 'two');
如果这有意义的话。
所以基本上,问题是我在任何给定时间都有多个输入(包含文本值)和一个隐藏的输入,它给了我正确的股票代码 ID。
但是,我需要让我的数组包含每个元素都具有输入文本值和股票代码 ID。因此,对于创建和填充的每个输入,我还需要将该表单的隐藏输入的值分配给它,以便我可以将它们成对发送到我的 foreach 循环并插入。
这是我为插入而调用的 addticker.php:
$items = $_POST['Items'];
$tickerID = $_POST['tickerID'];
foreach ($items as $item){
$addTicker = "
INSERT INTO ticker_content (tickerID, content)
values ('$tickerID', '$item');
"
$mysqlConn->query($addTicker);
}
所以基本上对于每个 Items[] 值,我都需要插入相同的隐藏字段。
这是我的表单和 JS 代码供参考。第一个JS块主要用于动态添加输入的功能,但最后一个JS块是ajax使用serializeArray();
<?php foreach($tickerDisplays as $key => $ticker):?>
<form id="Items" method="post">
<label id="ItemLabel">Item 1: </label>
<input type="text" name="Items[]"><br/> <!--form starts with one input-->
<button type="button" class="moreItems_add">+</button> <!--button dynamically adds input, up to 10 per form-->
<input type="hidden" name="tickerID" id="tickerID" class="tickerIdClass" value="<?php echo $ticker['ticker'] ?>"><!--hidden input used for tickerID-->
<input type="submit" name="saveTickerItems" value="Save Ticker Items"> <!--submit button-->
</form>
<?php endforeach;?>
<!-- This is the functionality for each form to click the '+' button and create new inputs -->
<script type="text/javascript">
$("button.moreItems_add").on("click", function(e) {
var tickerID = $(this).closest('form').find('.tickerIdClass').val(); //get value of hidden input for form
var numItems = $("input[type='text']", $(this).closest("form")).length;
if (numItems < 10) {
var html = '<label class="ItemLabel">Item ' + (numItems + 1) + ': </label>';
html += '<input type="text" name="Items[]"/><br/>';
$(this).before(html);
console.log(tickerID);
}
});
</script>
<!-- This is the ajax call to send all filled out and created inputs from form along with the hidden input -->
<script type="text/javascript">
$("#Items").submit(function(e) {
e.preventDefault();
var data = $("#Items").serializeArray();
console.log(data);
$.ajax({
type: "POST",
url: "addticker.php",
data: $("#Items").serializeArray(), // serializes the form's elements.
success: function(data)
{
alert(data); // show response from the php script.
}
});
});
</script>
【问题讨论】:
-
你
addticker.php返回错误500,意思是:“内部服务器错误”,通常是由于PHP中的语法错误。我在查询字符串的末尾看到一个缺少的半列。当您收到错误 500 时,您通常可以在 PHP 错误日志中看到问题所在。您是否被警告过 SQL 注入?您的代码易受攻击。 -
好的,很好。我添加了分号,当时得到了 200,但没有插入。有没有更好的方法可以测试页面或控制台上的结果?我只是觉得它不会像我期望的那样插入,尤其是有多个输入时
-
添加半栏后的调试可以使用浏览器的开发者工具。请参阅:browserstack.com/developer-tools 转到“网络”选项卡并检查参数和输出以查看您的 ajax 调用做了什么。出于调试目的,您可能希望在
addticker.php中回显某些内容以告诉自己发生了什么。 -
就这样,非常感谢!
标签: javascript jquery arrays ajax