2016-11-14 3 views
1

Я создаю систему баз данных для размещения и получения счетов-фактур для розничного продавца/компании. Я ищу способ добавить несколько записей в базу данных mysql через форму php, не добавляя каждый элемент отдельно. Моя форма выглядит;Добавить несколько записей в базу данных mysql через форму php

<div class="new_invoice"> 
<form action="addCustomerInvoice.php" method = "post" enctype= "multipart/form-data"> 
<fieldset> 
<legend> Add new invoice for <?php echo $rsCustomer['forename']; echo ' '; echo $rsCustomer['surname']; ?></legend> 
<h4>Invoice Number:</h4> 
<input type="text" name="invoice_no"> 
<h4>Item Quantity:</h4> 
<input type="text" name="quantity"> 
<h4>Item Name:</h4> 
<input type="text" name="item_name"> 
<h4>Item Category:</h4> 
<input type="text" name="item_category"> 
<h4>Manufacturer:</h4> 
<input type="text" name="item_manufacturer"> 
<h4>Item Description:</h4> 
<input type="text" name="item_description"> 
<h4>Item Price:</h4> 
<input type="text" name="item_price"> 
<h4>Item Information:</h4> 
<input type="text" name="item_info"> 
<input type="submit" value="Add new record"> 
</fieldset> 
</form> 
</div> 

И процесс нравится;

<?php 
          include 'database_conn.php'; 
           $InvoiceNumber = $_POST['invoice_no']; 
           $Quantity = $_POST['quantity']; 
           $ItemName = $_POST['item_name']; 
           $ItemCat = $_POST['item_category']; 
           $ItemMan = $_POST['item_manufacturer']; 
           $ItemDesc = $_POST['item_description']; 
           $ItemInfo = $_POST['item_info']; 
          $sql = "INSERT INTO hlinvoicetable (invoice_no, quantity, item_name, item_category, item_manufacturer, item_description, item_info) VALUES ('$InvoiceNo', '$Quantity', '$ItemName', '$ItemCat', '$ItemMan', '$ItemDesc', '$ItemInfo')"; 
           $queryresult = mysqli_query($conn,$sql) or die(mysqli_error()); 
          echo "New invoice added. 

          mysqli_close($conn); 
          ?> 

мне интересно, есть ли способ, чтобы повторить форму и иметь его добавить новую запись в базу данных, если поля не оставлены пустыми и поэтому игнорируется, и ни одна строка не добавляется? Также могут ли все элементы добавить один и тот же первичный ключ (invoice_no)?

Заранее благодарен!

+0

Если я этого не скажу, кто-то другой будет: не вставлять 'INSERT' unsanitized данные. Просмотрите правила безопасного использования кода для PHP на [bobby-tables.com] (http://bobby-tables.com/). (В случае с mysqli используйте подготовленные операторы.) –

+0

Вы правы, я просто хотел снять код, чтобы попытаться сохранить его так просто, как только мог, но ваш совет хорошо принят! –

ответ

0

Вам нужно использовать имена массивов на входах. Например:

<input type="text" name="invoice_no[]"> 
... 
<input type="text" name="invoice_no[]"> 

Тогда в PHP вы бы получить значения из $_POST['invoice_no'][0], $_POST['invoice_no'][1] и т.д.

Вы можете перебираем значения, как:

foreach ($_POST['invoice_no'] as $key => $invoice) { 
    if (!empty($_POST['invoice_no'][$key]) 
     && !empty($_POST['quantity'][$key]) 
     && !empty($_POST['item_name'][$key]) 
     //... include all fields that can't be left empty 
    ) { 
     // Do insert 
    } 
} 

Кроме того, как уже упоминалось выше, , обязательно используйте связанные параметры вместо того, чтобы вводить данные, предоставленные пользователем, непосредственно в SQL-запросы. Это действительно не намного лишний код и необходим, чтобы спасти вас от атак SQL-инъекций.