【问题标题】:How to insert values from dynamically added rows into database如何将动态添加的行中的值插入数据库
【发布时间】:2014-11-17 03:36:17
【问题描述】:

我已经被这个问题困扰了好几天了。非常感谢您的帮助。

  • 我正在开发一个 php 表单,当 用户点击按钮ADD
  • 要将值保存到数据库中,用户必须单击SUBMIT 按钮。
  • 我面临的问题是数据库不保存 来自动态行的值。

自动完成和动态行

<script>
//autocomplete
  $(function() {
    function log( message ) {
      $( "<div>" ).text( message ).prependTo( "#log" );
      $( "#log" ).scrollTop( 0 );
    }

    $( "#ItemName" ).autocomplete({
      source: "user/requisition_search.php",
      minLength: 1,
      select: function( event, ui ) 
          {
              $('#ItmId').val(ui.item.id);
              $('#StkId').val(ui.item.stkId);
              $('#ItmNameDis').val(ui.item.value);
              $('#ItmUOM').val(ui.item.uom);
              $('#ItmQty').val(ui.item.qty);

          }

    });
  });
//dynamic rows
    $(document).ready(function(){

        $("#add").on("click",function(){

          var rowcount = $("#rowcount").val();
          var row = 
          '<tr id="'+rowcount+'"><td>'+$("#ItmId").val()+'</td><td><input readonly="readonly" name="StkId[]" value="'+$("#StkId").val()+'"/></td><td>'+$("#ItemName").val()+'</td><td>'+$("#ItmUOM").val()+'</td><td>'+$("#ItmQty").val()+'</td><td><input readonly="readonly" name="ReqQty[]" value="'+$("#ReqQty").val()+'"/></td></tr>';

           rowcount = parseInt(rowcount)+1;

           $("#rowcount").val(rowcount);
           $("#dataTab").append(row);
           $("#dataTab").show();
           $("#submit").show();           

        });

    });
</script>

HTML

<form name="jqtest" action="submit.php" method="post">
<label for="ItemName">Search : </label>
<input id="ItemName" size="50"/>

<label for="ItmId">Item Id </label>
<input name="ItmId" id="ItmId" readonly="readonly"/>

<label for="StkId">Stock Id </label></td>
<input name="StkId" id="StkId" readonly="readonly"/>

<label for="ItmNameDis">Item Name </label>
<input name="ItmNameDis" id="ItmNameDis" size="50" readonly="readonly"/></td>

<label for="ItmUOM">Unit Of Measurement </label>
<input name="ItmUOM" id="ItmUOM" readonly="readonly"/>

<td><label for="ItmQty">Quantity Available </label>
<input name="ItmQty" id="ItmQty" readonly="readonly"/>

<label for="ReqQty">Quantity </label>
<input name="ReqQty" id="ReqQty" onkeypress="return numbersOnly(event)" onkeyup="ItmQty_Availability()" disabled="disabled"/>

      <p>
        <input type="reset" name="reset" id="reset" value="RESET"/>
        &nbsp;&nbsp;
        <input type="button" name="add" id="add" value="ADD"/>
      </p>

      <input type="hidden" name="rowcount" id="rowcount" value="1"/>

<table id="dataTab" width="90%" style="display:none;" border="1" cellpadding="0" cellspacing="0">
        <tr>
          <th>Item ID</th>
          <th>Stock ID</th>
          <th>Item name</th>
          <th>UOM</th>
          <th>Quantity Available</th>
          <th>Quantity Requested</th>
        </tr>
      </table>
      <p>&nbsp;</p>
      <p><input style="display:none;" type="submit" name="submit" id="submit" value="SUBMIT"/></p>
    </form>

提交.php

<?php

$num =  $_POST['rowcount'];
for($i=0;$i<$num;$i++)
{

      $strStkId = "";
      if(!empty($_POST)){
          if(isset($_POST["StkId[]"])){
              $strStkId = $_POST["StkId[]"];
          }else{
               echo "<font color=red>Enter the Stock Id</br></font>";
          }

      }
      $strReqQty = "";
      if(!empty($_POST)){
          if(isset($_POST["ReqQty[]"])){
              $strReqQty = $_POST["ReqQty[]"];
          }else{
               echo "<font color=red>Enter the Quantity</font>";
          }

      }

        $tsql =
        "INSERT INTO REQUISITION
        (RequestQuantity, StockId)
        VALUES
        ('$strReqQty','$strStkId')
        ";

        $result = sqlsrv_query($conn, $tsql, array(), array( "Scrollable" => SQLSRV_CURSOR_KEYSET ));   

            if (!$result) {
            die ('<script>
                window.alert("Please enter the requisition details !")
                window.location.href = "requisition.php"; </script>');
            }
            else 
            echo '<script>alert("Your Requisition is In Process"); </script>';
            sqlsrv_close($conn);
}
?>

更新

我了解到 name="StkId"name="StkId[]" 在动态行和输入中发生冲突。 所以我变成了这样的东西:

var row = '<tr id="'+rowcount+'"><td>'+$("#ItmId").val()+'</td><td><input readonly="readonly" name="StkId2" value="'+$("#StkId").val()+'"/></td><td>'+$("#ItemName").val()+'</td><td>'+$("#ItmUOM").val()+'</td><td>'+$("#ItmQty").val()+'</td><td><input readonly="readonly" name="ReqQty2" value="'+$("#ReqQty").val()+'"/></td></tr>';

现在数据被插入数据库但是IF用户输入more than one项目,只有one数据被插入数据库。我做错了什么?我猜它在submit.php 部分,但我不知道为什么。

【问题讨论】:

  • 仅供参考:当您具有 name="stkId[]" 等属性时。您不需要在帖子索引中调用它。只需使用$_POST['stkId']。已经返回一个数组
  • @Ghost 但我想要动态行中的值?这:&lt;td&gt;&lt;input readonly="readonly" name="StkId[]" value="'+$("#StkId").val()+'"/&gt;&lt;/td&gt;&lt;td&gt;&lt;input readonly="readonly" name="ReqQty[]" value="'+$("#ReqQty").val()+'"/&gt;&lt;/td&gt;
  • 只需将其称为$_POST['stkId']。不需要那个[]
  • @Ghost 还是不行
  • @Ghost 像这样。来自动态行:stackoverflow.com/questions/26955139/…

标签: javascript php jquery sql-server autocomplete


【解决方案1】:

在提交表单时,您不会在$_POST 中获得动态生成的行值,因为这些根本不是表单输入,而只是在表格中显示为行。但是您可以在 jQuery AJAX 的帮助下实现您的功能。单击提交按钮后,使用 AJAX 调用您的submit.php。下面给出了如何检索这些动态行的值的示例解决方案。您可以根据自己的要求调整此方法。

主页。

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <title>jQuery Dynamic Rows</title>
    <meta charset="utf-8">
    <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
    <script>
    $(document).ready(function(){

        $("#add").on("click",function(){

          var rowcount = $("#rowcount").val();
          var row = '<tr class="dynamic" id="'+rowcount+'"><td>'+$("#itemid").val()+'</td><td>'+$("#itemname").val()+'</td><td>'+$("#uom").val()+'</td><td>'+$("#quantity").val()+'</td></tr>'; 

           rowcount = parseInt(rowcount)+1;

           $("#rowcount").val(rowcount);
           $("#dataTab").append(row);
           $("#dataTab").show();
           $("#submit").show();            

        });

        $("#submit").on("click",function(){
                alert("submit");
                var jsonObj = [];
                i=0;
            $("#dataTab tr.dynamic").each(function(){

               var td = $(this).find('td');

                itemId = td.eq(0).text();
                itemName = td.eq(1).text();
                uom = td.eq(2).text();
                quantity = td.eq(3).text();

                jsonObj.push({
                    itemId: itemId,
                    itemName: itemName,
                    uom: uom,
                    quantity: quantity,
                });
            });

            var dataString = JSON.stringify(jsonObj);


                $.ajax({
                    url: "submit.php",
                    type: "POST",
                    data: {json:dataString},
                    success: function(response){
                               alert(response);
                             }
                });

        });

    });

</script>
    </head>

    <body>


     <form name="jqtest" action="#">

       Item ID : <input type="text" name="itemid" id="itemid"/><br/><br/>
       Item name : <input type="text" name="itemname" id="itemname"/><br/><br/>
       UOM : <input type="text" name="uom" id="uom"/><br/><br/>
       Quantity : <input type="text" name="quantity" id="quantity"/><br/><br/>

       <p> <input type="reset" name="reset" id="reset" value="RESET"/>&nbsp;&nbsp;<input type="button" name="add" id="add" value="ADD"/> </p>
        <input type="hidden" name="rowcount" id="rowcount" value="1"/>
     </form>

     <table id="dataTab" style="display:none;" border="1">

      <tr>
        <th>Item ID</th>
        <th>Item name</th>
        <th>UOM</th>
        <th>Quantity</th>
      </tr>

     </table>

    <p> <input style="display:none;" type="button" name="submit" id="submit" value="submit"/> </p>

    </body>

    </html>

提交.php

<?php

  $arr = json_decode($_POST['json']);


  for($i=0; $i<count($arr); $i++)
   {
     echo "Row ".$i."\n";
     echo "itemId > ".$arr[$i]->itemId.", itemName > ".$arr[$i]->itemName.", uom > ".$arr[$i]->uom.", quantity > ".$arr[$i]->quantity."\n";

   }

?>  

【讨论】:

  • 你能解释一下这部分吗,因为我只是一个初学者,对 ajax 和 json 没有基础:$("#dataTab tr.dynamic").each(function(){ var td = $(this).find('td'); itemId = td.eq(0).text(); itemName = td.eq(1).text(); uom = td.eq(2).text(); quantity = td.eq(3).text(); jsonObj.push({ itemId: itemId, itemName: itemName, uom: uom, quantity: quantity, }); });
  • 在 submit.php 上,要将值插入数据库,在循环中,我必须像往常一样编码??因为您提供的代码只是回显到警报框中,但它会检索数据。因此,如果您在 submit.php 和我在上面评论的代码上向我解释,我会很高兴的。对不起,我对 ajax 和 json 没有任何基础。
  • 没关系。我懂了。我的意思是将数据插入数据库。谢谢!你真的救了我:)
  • 大声笑对不起,但我很好奇。有没有什么方法可以通过使用 jQuery、javascript 和 php 来实现这一切?
  • @AthirahHazira $("#dataTab tr.dynamic").each(function().. 这部分实际上得到了所有类名动态的tr 并获得相应的td 值(eq(0)、eq(1) 等有助于获取 itemId, itemName 等)& 所有这些值都添加到循环中的 javascript 对象中。这个 Qn “有没有什么方法可以通过使用 jQuery、javascript 和 php 来实现这一切?”。是的。当然。由于您是初学者,因此需要一些时间 2 清除所有内容,但您正在做的事情不仅仅是基本的。我真的很感激,因为当我在你这个年纪的时候,我什至不知道写一行 HTML 代码!干杯..:)
猜你喜欢
  • 2014-05-28
  • 1970-01-01
  • 2013-12-18
  • 2014-04-20
  • 1970-01-01
  • 2017-01-13
  • 1970-01-01
  • 1970-01-01
  • 2021-04-05
相关资源
最近更新 更多