如何使用ajax将选定的(多个)输入值发送到DB?

时间:2017-11-10 05:27:47

标签: javascript php jquery ajax

第一篇文章要温柔:)......好吧,我正在尝试创建一个非常简单的库存订购网站,但我遇到以下问题:

假设您的库存中有(n)个商品,因此根据该数字我运行'for'循环并列出一个隐藏的输入字段,其中包含该库存商品的ID并显示订购按钮。例如:

<form>
for ($i=0; $i<$num_items;$i++)  {
  <input type="hidden" name="item" value="<?=$ID[$i]?>">
  <input type="submit" value="Order" onclick="InsertIntoDB()">
}   
</form>

现在,假设用户想要在库存中仅订购5件中的2件。他们会点击相应的“订单”按钮,相应的隐藏输入值将被发送到数据库,而不会重定向(这对用户来说是无缝体验,一旦用户点击他们希望页面不会重新加载或重定向的按钮)。这是我点击按钮的脚本:

<script type="text/javascript"> 
function InsertIntoDB (){ 
    var order = $('form input[name="item"]').val();   
    $.post('send_to_DB.php', {updateDB:order} ); }
</script>

这是我对send_to_DB.php文件的所作内容:

|code for connecting to DB|

$writetoDB=$_POST['uptadeDB'];
foreach ($writetoDB as  $n) {
$insert = "UPDATE `test` SET onorder=1 WHERE ID='$n'";
mysql_query(insert);
}

我正在努力获取用户点击数据库的那两个值。任何帮助将非常感激,由于这一个失去了几个小时的睡眠:)。谢谢!!!

2 个答案:

答案 0 :(得分:0)

表单将为其中的所有输入发送值。克服这种情况的一种方法可能是尝试将每组输入以其自己唯一标识的形式包含在迭代循环内。但是考虑下面的解决方案,它将在不使用表单的情况下实现所需的目的,并且每个项目只需一个按钮而不是两个输入:

对于test.php文件中的输入,假设已定义数组$ID

<?php
$num_items = count($ID);
for ($i=0; $i<$num_items;$i++)  {
?>
<button type="button" value="<?=$ID[$i]?>" onclick="InsertIntoDB(this.value)">Order<?= $i + 1 ?></button>
<?php }   ?>

对于test.php文件中的发布脚本:

<script type="text/javascript"> 
function InsertIntoDB (order){
 $.post('send_to_DB.php', {updateDB:order} ); 
}
</script>

对于处理程序send_to_DB.php文件:

$writetoDB=$_POST['updateDB'];
$insert = "UPDATE `test` SET onorder=1 WHERE ID='$writetoDB'";
mysql_query($insert);

在上面的$insert查询中,您可能希望使用SET onorder = 1 + onorder来跟踪每个项目的订单数量。

然而.......:我希望您知道我们应该停止使用mysql_queryhttp://php.net/manual/en/function.mysql-query.php

答案 1 :(得分:0)

试试这个

<form>
 for ($i=0; $i<$num_items;$i++)  {
   //<input type="hidden" name="item" value="<?=$ID[$i]?>">
   <input type="submit" value="Order" onclick="InsertIntoDB(<?=$ID[$i]?>)">
 }   
</form>

所以在你的脚本中你可以尝试这个

<script type="text/javascript"> 
  function InsertIntoDB (order){
    $.post('send_to_DB.php', {updateDB:order} ); 
  }

现在,订单将具有所选订单的值id