2015-02-14 2 views
0

Я пытаюсь вставить несколько записей в мою таблицу базы данных, но все, что я получаю, это нули (0), вставленные в поля. Ниже я попытался. Я попытался использовать петлю foreach для вставки, но это не работает для меня. Там любой простой способ сделать it.thanksВставка нескольких записей в mysql с использованием php

HTML-

<form method="post" action="data_handlers/purchase_entry_process.php"> 
    <table> 
    <thead> 
    <tr class="titlerow"> 
    <th>Item name</th> 
    <th>Quantity</th> 
    <th>Purchase Price</th> 
    <th>Amount</th> 
    <th>Description</th> 
    </tr> 
    </thead> 
     <tr> 
     <td class="col-md-3"><select name="item_code[]"> 
     <option></option> 
     <?php 
     $tempholder = array(); 
     $query = $link->query("SELECT * FROM items"); 
     $nr = mysqli_num_rows($query); 
     for($i=0; $i<$nr; $i++) { 
     $row = mysqli_fetch_array($query); 
     if(!in_array($row['item_code'],$tempholder)) 
     { 
     echo"<option value=\"{$row['item_code']}\" >{$row['item_name']}</option>"; 
     } 
     } 
     ?> 
     </select></td> 
     <td><input type="text" name="qty"></td> 
     td><input type="text" name="purchase_price"></td> 
     <td><input type="text" name="sub_total"></td> 
     <td><input type="text" name="description"></td>      
     </tr> 
     <tr> 
     <td class="col-md-3"><select name="item_code[]"> 
     <option></option> 
     <?php 
     $tempholder = array(); 
     $query = $link->query("SELECT * FROM items"); 
     $nr = mysqli_num_rows($query); 
     for($i=0; $i<$nr; $i++) { 
     $row = mysqli_fetch_array($query); 
     if(!in_array($row['item_code'],$tempholder)) 
     { 
     echo"<option value=\"{$row['item_code']}\" >{$row['item_name']}</option>"; 
     } 
     } 
     ?> 
     </select></td> 
     <td><input type="text" name="qty"></td> 
     td><input type="text" name="purchase_price"></td> 
     <td><input type="text" name="sub_total"></td> 
     <td><input type="text" name="description"></td>      
     </tr> 
    </table> 
    </form> 

PHP

$item_code = $_POST['item_code']; 
$qty = $_POST['qty']; 
$pur_price = $_POST['purchase_price']; 
$sub_total = $_POST['sub_total']; 
$desc = $_POST['description']; 

foreach($item_code as $item_codes); 
$insert_inventory = $link->query("INSERT INTO inventory VALUES ('NULL','$item_codes','$qty','$pur_price','$qty','$desc','$sub_total')"); 
+0

Вы пытаетесь вставить массив как $ item_code. Количество, цена, общее количество и описание содержат только информацию из второй строки полей ввода. Ниже приведена справка запроса POST из вашей формы, первая строка получена (1) в качестве входных данных, вторая строка получена двумя (2). 'array (5) {[" item_code "] => array (2) {[0] => string (1)" 1 "[1] => string (1)" 2 "} [" qty "] => string (1) "2" ["purchase_price"] => string (2) "22" ["sub_total"] => string (3) "222" ["description"] => string (4) "2222"} ' – Baldvin

+0

@Baldvin, пожалуйста, помогите мне. как его исправить – ASM

ответ

1

Чтобы получить количество, цена, sub_total и описание из всех полей, вы должен сделать их массивами, как вы делали с item_code.

<td><input type="text" name="qty[]"></td> 
<td><input type="text" name="purchase_price[]"></td> 
<td><input type="text" name="sub_total[]"></td> 
<td><input type="text" name="description[]"></td> 

Для обработки PHP и сделать его готовым для запроса вы могли бы сделать что-то похожее на

<?php 
    // Prepare the query 
    $query = "INSERT INTO inventory VALUES "; 

    // Go through all the entries 
    foreach ($_POST['item_code'] as $key => $value) { 

     // If an item has been selected from the drop-down 
     // we process it for the query. 
     if (!empty($value) && $value != "") { 
      $query .= ($key > 0 ? ", " : ""); 
      $query .= "(NULL, '" . $value . "', '" . $_POST['qty'][$key] . "', '" . $_POST['purchase_price'][$key] . "', '" . $_POST['sub_total'][$key] . "', '" . $_POST['description'][$key] . "')"; 
     } 
    } 

    // Example output from $query 
    // INSERT INTO inventory VALUES (NULL, '1', '1', '11', '111', '1111'), (NULL, '2', '2', '22', '222', '2222') 
?> 

Я бы рекомендовал бросать в некоторых escaping of the variables, а также, чтобы предотвратить инъекции SQL.

+0

Я сделал это, но он только вставлял одну запись. Спасибо – ASM

+0

Я думаю, что это вопрос, который меня путает. не могли бы вы разбить его для меня. У меня есть другой вход для добавления в запрос. Спасибо – ASM

+0

Переменная '$ query' должна содержать завершенную строку, которую вы затем выполнили бы с помощью функции' $ link-> query ($ query) '. Если вы сомневаетесь в том, что возвращает запрос, попробуйте повторить его, чтобы получить значение. – Baldvin

Смежные вопросы