2017-08-16 107 views
1

我想添加一些静态行和多行同时到mysql以及发票。我可以将行添加到mysql中。但是,当我添加多行然后插入第一行所有字段完全但不插入所有字段从其他行,只插入动态字段到MySQL。例如规范,数量插入不错,但pur,appb,日期,appn不从第二行插入。任何人都可以帮助我。 我的代码都低于...通过php插入多行到mysql

<form action="ps.php" method="POST"> 
     <table id="customers"> 
     <tr> 
     <td>Project/Purpose</td><td><input type="text" name="pur[]" required="required" /></td> 
     <td>Approved Budget:</td><td><input type="text" name="appb[]" required="required" /></td> 
     </tr> 
     <tr> 
     <td>Expected Delivery Date:</td><td><input type="date" name="expdate[]" required="required" /></td> 
     </tr> 

     <td>Approve by:</td><td><input type="text" name="appn[]" required="required" /></td> 
     </tr> 
     </table> 

     <fieldset style="background-color:#00FFFF"><h2>Purchase Information</h2></fieldset> 


    <div id="page-wrap"> 
    <table id="customers"> 

      <tr> 
       <th>Goods/Services(include description and specifications)</th> 
       <th>Qty Required(Goods only)</th> 
       <th>Qty on Hand(Goods only)</th>    
       <th>Qty to Order</th> 
       <th>Est. Unit Price</th> 
       <th>Total Estimated Cost</th> 
      </tr> 

      <!-- add remove row dynamically --> 
      <tr class="item-row"> 
       <td class="item-name"><div class="delete-wpr"><a class="delete" href="javascript:;" title="Remove row">X</a><textarea class="noscrollbars" name="specification[]" onkeyup="autoGrow(this);"></textarea></div></td> 
       <td ><input type="number" name="" /></td> 
       <td ><input type="number" name="" /></td> 
       <td><input type="number" class="qty" name="qty[]" /></td> 
       <td><input type="number" class="cost" name="esp[]" /> </td> 

       <td><span class="price">0.00</span></td> 
      </tr> 

      <!-- add remove row dynamically --> 

      <tr class="item-row"> 
       <td class="item-name"><div class="delete-wpr"><a class="delete" href="javascript:;" title="Remove row">X</a><textarea class="noscrollbars" name="specification[]" onkeyup="autoGrow(this);"></textarea></div></td> 
       <td ><input type="number" name="" /></td> 
       <td ><input type="number" name="" /></td> 
       <td><input type="number" class="qty" name="qty[]" /></td> 
       <td><input type="number" class="cost" name="esp[]" /> </td> 
       <input type="hidden" name="empid[]" value='<?php echo $empid;?>' /> 
       <td><span class="price">0.00</span></td> 

      </tr> 

      <tr id="hiderow"> 
      <td colspan="6"><a id="addrow" href="javascript:;" title="Add a row">Add a row</a></td> 
      </tr> 

      <tr> 
       <td colspan="4" class="blank"> </td> 
       <td colspan="1" class="total-line">Total</td> 
       <td class="total-value"><div id="total">0.00</div></td> 
      </tr> 
      <tr> 
       <td colspan="4" class="blank"> </td> 
       <td colspan="1" class="total-line"><input type="submit" name="submit" value="Submit" /></td> 

       <td class="blank"><textarea id="paid" style="display:none;" ></textarea></td> 
      </tr> 

     </table> 



    </div> 



    </form> 

ps.php

if(isset($_POST)==true && empty($_POST)==false): 
       $pur = $_POST['pur'];   
       $appb=$_POST['appb']; 
       $expdate=$_POST['expdate'];   

       $appn=$_POST['appn']; 
       $specification=$_POST['specification'];     
       $qty=$_POST['qty']; 
       $esp=$_POST['esp'];        
       $empid=$_POST['empid']; 

       foreach($qty as $a => $b){     



        $result = mysqli_query($mysqli, "INSERT INTO `pr`(`pur`, `empid`, `appb`, `expdate`, `appn`, `specification`, `qty`, `esp`) VALUES ('$pur[$a]','$empid[$a]','$appb[$a]','$expdate[$a]','$appn[$a]','$specification[$a]','$qty[$a]','$esp[$a]')");  

        } 

        echo "Your entry has been successfully recorded, Thank you!";  
      else: echo "Some things went wrong please try again"; 
      endif; 
+1

了解准备好的语句以防止SQL注入 – Jens

+1

首先,您的代码对SQL注入开放,所以您可能试图执行该SQL语句中的任何内容。这导致了这一点...当查询失败时,查询是什么?什么是MySQL的错误?你目前没有检查这些东西。 – David

回答

1

只是字段名称和使用破灭功能,而将数据做成了。

例如:

$data['name'] = 'abc'; 
    $data['description'] = 'description'; 
    $data['created'] = date("Y-m-d H:i:s"); 

查询:

 $fields = array_keys($data); 
     $sql = "INSERT INTO table_name . (`" . implode('`,`', $fields) . "`) 
       VALUES('" . implode("','", $data) . "')"; 
2

试试这个:

$qry = "INSERT INTO `pr`(`pur`, `empid`, `appb`, `expdate`, `appn`, `specification`, `qty`, `esp`) VALUES "; 
$i = 0; 
foreach($qty as $a => $b) {     

    $qry .= "('$pur[$a]','$empid[$a]','$appb[$a]','$expdate[$a]','$appn[$a]','$specification[$a]','$qty[$a]','$esp[$a]')"; 
    if($i == count($qty)) { 
     $qry .= ";"; 
    } else { 
     $qry .= ","; 
    } 

$i++; 
} 

$result = mysqli_query($mysqli, $qry); 

如果您有大量的数据,然后使用插入查询一次,它会提高效率。