2014-02-13 2 views
-1

Добрый вечер, прекрасные люди,PHP MySQL Вставка нескольких массивов

У меня возникли проблемы с моим запросом. Запрос должен вставить каждый продукт, который вводится на странице. Моя таблица продукты имеет 4 поля: id, product_name, количество и цена.

HTML, выглядит как это:

<form action="" method="post"> 

    Product name: <input type="text" name="product_name[]" value="" /> 
    Quantity: <input type="text" name="quantity[]" value="" /> 
    Price: <input type="text" name="price[]" value="" /> <br /> <br /> 

    <input type="submit" name="submit" value="Insert new products" /> 

</form> 

Я хочу, чтобы мои пользователи, чтобы иметь возможность добавлять новые продукты в нашей таблице базы данных продукции. Кстати, я создал функцию javascript, которая добавляет больше полей в форму, поэтому мои сотрудники не должны отправлять форму каждый раз, когда он или она хочет добавить новый продукт, но вместо этого просто добавить столько полей, которые он или она необходимо представить. Надеюсь, вы поймете, о чем я говорю :)

Поскольку я не являюсь экспертом в области PHP-кодирования, то я пробовал самостоятельно, что в моем случае не срабатывало особенно хорошо. Конечно, я читал некоторые статьи в Интернете о запросе данных массива, но, к сожалению, не повезло.

До сих пор, код PHP выглядит следующим образом:

<? 
if(isset($_POST['submit'])){ 
    $product_name = addslashes($_POST['product_name']); 
    $quantity  = addslashes($_POST['product_name']); 
    $price  = addslashes($_POST['product_name']); 

    $db->query("INSERT INTO products (product_name, quantity, price) VALUES ('".$product_name."', '".$quantity."', '".$price."')"); 
} 
?> 

Если мои сотрудники должны вставить каждый продукт один за другим это не было проблемой. Но так как они могут добавить больше полей в форму, это становится проблемой.

Надеюсь, есть логическое объяснение, но я не могу понять это самостоятельно. И, конечно, я знаю, что я не избежал переменных, но этот код предназначен только для тестирования. У вас хорошие вечерние люди :)

+0

'addslashes' является довольно слабой формой защиты от SQL инъекций. – kapa

+0

Ваши данные '$ _POST' - это массив - вам нужно будет перебирать его, поэтому лучше всего искать [' for() '] (http://www.php.net/for) или [' foreach () '] (http://www.php.net/foreach) – kero

+0

Вы можете найти учебники по вставке данных из мультиселектов, которые очень похожи на то, что вы пытаетесь сделать. См. Например, [этот вопрос] (http://stackoverflow.com/questions/15509742/php-multiple-select-form-to-insert-multiple-rows-in-mysql) –

ответ

2

Вам нужно пройти все значения в массиве $_POST['product_name'] и выдать запрос вставки БД один раз для каждого члена массива. Данные форм для каждого набора полей представляются и обрабатываются как массив в PHP, как:

$ _POST [ 'product_name'] = массив (0 => 'имя', 1 => «второго имени », 2 =>„третье имя“и т.д.)

Вот код:

if(isset($_POST['submit'])){ 
    $ct=0; 
    foreach($_POST['product_name'] as $k=> $value){ // loop through array 
     $product_name = addslashes($value); // set name based on value 
     $quantity  = addslashes($_POST['quantity'][$ct]); // set qty using $ct to identify # out of total submitted 
     $price  = addslashes($_POST['price'][$ct]); // same as set qty 

     $db->query("INSERT INTO products (product_name, quantity, price) VALUES ('".$product_name."', '".$quantity."', '".$price."')"); 
     $ct++; // increment +1 
    } 
} 

обновить (не ВСТАВИТЬ) вам нужно передать идентификационный номер вместе с полями ввода в вашей HTML.

<input type="hidden" name="modify_id[]" value="7" /> 
Product name: <input type="text" name="product_name[]" value="" /> 
Quantity: <input type="text" name="quantity[]" value="" /> 
Price: <input type="text" name="price[]" value="" /> <br /> <br /> 

Затем с помощью PHP:

if(isset($_POST['submit'])){ 
    $ct=0; 
    foreach($_POST['product_name'] as $k=> $value){ // loop through array 
     $product_name = addslashes($value); // set name based on value 
     $quantity  = addslashes($_POST['quantity'][$ct]); // set qty using $ct to identify # out of total submitted 
     $price  = addslashes($_POST['price'][$ct]); // same as set qty 

     $id   = (int)$_POST['modify_id'][ $ct ]; 

     $db->query("UPDATE products SET product_name = '$product_name', quantity = '$quantity', price = '$price' WHERE id = '$id' LIMIT 1"); 
     $ct++; // increment +1 
    } 
} 
+1

Зачем использовать '$ ct', когда вы уже есть '$ k'ey? – kero

+0

Действительный пункт. Вы можете заменить '$ k' для всех экземпляров' $ ct' для других массивов и удалить строки '$ ct = 0;' и '$ ct ++;'. Но, я думаю, данные в '$ k' являются строками, а не целыми. –

+0

И как это будет работать для обновления текущих полей на одной странице? –

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