首页 > 解决方案 > 多行未存储在数据库中

问题描述

我在 php 中使用 jQuery 和 Ajax。我想一次提交多行。但由于 'plantation_journal_no' 是 plantation_journal_details 的主键和 past_history_species_details 的外键,我的代码无法正常工作。我被严重困在这里。谁能给我建议,我该如何解决这个问题?提前谢谢各位。代码如下:

索引.php

<div class="row">
    <form method="post" id="insert_form2" style="padding-right: 10px;">
        <div class="table-repsonsive">
            <span id="error"></span>
            <table class="table table-bordered" id="item_table2">
                <tr>
                    <th>Species</th>
                    <th>Product</th>
                    <th>Quantity</th>
                    <th>Value (Rs.)</th>
                    <th><button type="button" name="add2" class="btn btn-success btn-sm add2"><span class="glyphicon glyphicon-plus"></span></button></th>
                </tr>
            </table>
        </div>
        <br>
        <div align="right">
            <input  type="submit" name="submit4" class="btn btn-info" value="Add" onclick="move4()">
        </div>
    </form>
</div>
<script>
    $(document).ready(function(){

     $(document).on('click', '.add2', function(){
      var html = '';
      html += '<tr>';
      html += '<td><input type="text" name="species[]" class="form-control species" /></td>';
      html += '<td><select name="product[]" class="form-control product"><option value="">---Select---</option><option value="reserved">Reserved</option><option value="protected">Protected</option><option value="Unclassed">Unclassed</option></select></td>';
      html += '<td><input type="text" name="quantity[]" class="form-control quantity" /></td>';
      html += '<td><input type="text" name="value[]" class="form-control value" /></td>';
      html += '<td><button type="button" name="remove2" class="btn btn-danger btn-sm remove2"><span class="glyphicon glyphicon-minus"></span></button></td></tr>';
      $('#item_table2').append(html);
     });

     $(document).on('click', '.remove2', function(){
      $(this).closest('tr').remove();
     });

     $('#insert_form2').on('submit', function(event){
      event.preventDefault();
      var error = '';
      $('.species').each(function(){
       var count = 1;
       if($(this).val() == '')
       {
        error += "<p>Enter Item Name at "+count+" Row</p>";
        return false;
       }
       count = count + 1;
      });

      $('.product').each(function(){
       var count = 1;
       if($(this).val() == '')
       {
        error += "<p>Enter Item Quantity at "+count+" Row</p>";
        return false;
       }
       count = count + 1;
      });

      $('.quantity').each(function(){
       var count = 1;
       if($(this).val() == '')
       {
        error += "<p>Select Unit at "+count+" Row</p>";
        return false;
       }
       count = count + 1;
      });
      $('.value').each(function(){
       var count = 1;
       if($(this).val() == '')
       {
        error += "<p>Select Unit at "+count+" Row</p>";
        return false;
       }
       count = count + 1;
      });
      var form_data = $(this).serialize();
      if(error == '')
      {
       $.ajax({
        url:"insert2.php",
        method:"POST",
        data:form_data,
        success:function(data)
        {
         if(data == 'ok')
         {
          $('#item_table2').find("tr:gt(0)").remove();
         }
        }
       });
      }
     });
    });
</script>

插入2.php

<?php
//insert.php;

if(isset($_POST["species"]))
{
    $connect = new PDO("mysql:host=localhost;dbname=forestdb", "root", "");
    $id=uniqid();
    $sql="SELECT plantation_journal_no from plantation_journal_basic_details 
     where plantation_journal_no=(select max(plantation_journal_no) from 
     plantation_journal_basic_details);";
    $state=$connect->prepare($sql);
    $state->execute();
    $row=$state->fetch();
    $plantation_journal_no = $row['plantation_journal_no'];
    for($count = 0; $count < count($_POST["species"]); $count++)
    {  
        $query = "INSERT INTO past_history_species_details
       (id, plantation_journal_no, species, product, quantity, value) 
       VALUES (:id, :plantation_journal_no, :species, :product, :quantity, 
       :value) ";
        $statement = $connect->prepare($query);
        $statement->execute(
            array(
                ':id'                     => $id,
                ':plantation_journal_no'  => $plantation_journal_no,
                ':species'                  => $_POST["species"][$count],
                ':product'                  => $_POST["product"][$count], 
                ':quantity'             => $_POST["quantity"][$count], 
                ':value'                   => $_POST["value"][$count]
                )
            );
    }
    $result = $statement->fetchAll();
    if(isset($result))
    {
        echo 'ok';
    }
}
?>

前端表: 前端表

后端表 后端表

标签: phpjqueryajaxpdo

解决方案


我猜idpast_history_species_details表的主键。uniqid()您尝试插入的每一行都使用相同的。每次循环都需要获取一个新 ID。

for($count = 0; $count < count($_POST["species"]); $count++)
{  
    $id = uniqid();
    $query = "INSERT INTO past_history_species_details
   (id, plantation_journal_no, species, product, quantity, value) 
   VALUES (:id, :plantation_journal_no, :species, :product, :quantity, 
   :value) ";
    $statement = $connect->prepare($query);
    $statement->execute(
        array(
            ':id'                     => $id,
            ':plantation_journal_no'  => $plantation_journal_no,
            ':species'                  => $_POST["species"][$count],
            ':product'                  => $_POST["product"][$count], 
            ':quantity'             => $_POST["quantity"][$count], 
            ':value'                   => $_POST["value"][$count]
            )
        );
}

如果您将其设为自动增量列,事情会更容易。


推荐阅读