2011-01-26 2 views
1

У меня есть таблица с именем фрукты:PHP POST несколько строк в MySQL

id  fruit 
1  Apple 
1  Banana 
2  Apple 
2  Apple 
2  Pear

Я хотел бы иметь возможность добавить несколько строк одновременно с помощью PHP.

Я пробовал иметь два набора из двух текстовых полей (для id и фруктов), но только вставить 1 строку, используя последний набор текстовых полей.

EDIT:

Тогда что мне делать, если у меня есть таблица вроде этого:

id  fruit  taste 
1  Apple  Good 
1  Banana  Okay 
2  Apple  Good 
2  Apple  Bad 
2  Pear  Good

ответ

3

Вы должны назвать свои текстовые поля правильно с помощью кронштейнов [], чтобы сформировать массив, а затем петлю через ваш массив POST'ed в вставьте данные. Убедитесь, что вы избегаете данных перед запуском запроса, используя mysql_real_escape_string или подготовленные запросы.

EDIT: Обновление примеров, потому что OP добавила информацию на вопрос.

В расширенном примере, который вы предоставили, похоже, что у taste есть только несколько вариантов. В этом случае я бы использовал элемент <select> над текстовым полем. Посмотрите мои примеры на то, как лично я это сделаю.

Форма
Заметные изменения: С помощью простого цикла в PHP, вы можете указать количество полей, которые вы хотите показать и легко добавить другие параметры в окне выбора вкуса. Я помещаю произвольное число в пределах [], чтобы быть уверенным, что мы связываем фрукты со вкусом, когда обрабатываем форму.

<?php 
$n = 5; //Number of fields to show 
$tastes = array('Great', 'Good', 'Okay', 'Bad', 'Horrible'); 

for($i=0;$i<$n;$i++) { 
    echo '<p>'; 
    echo '<input type="text" name="fruit['.$i.']" /> '; 
    echo '<select name="taste['.$i.']">'; 
    foreach($tastes as $t) { 
    echo '<option value="'.htmlentities($t).'">'.$t.'</option>'; 
    } 
    echo '</select>'; 
    echo '</p>'; 
} 
echo '<input type="submit" name="submit" value="Submit" />'; 
?> 

процесса Код
Заметные изменения: Я проверяю, чтобы убедиться, что плод имеет значение, в противном случае он не будет вставлять. Я использую это произвольное значение (которое является ключом массива $k), чтобы выбрать вкус, соответствующий плоду.

<?php 
if($_POST['submit']) { 
    foreach($_POST['fruit'] as $k => $v) { 
    if(!empty($v)) { 
     $query = "INSERT INTO fruits (fruit, taste) VALUE ('".mysql_real_escape_string($v)."', '".mysql_real_escape_string($_POST['taste'][$k])."')"; 
     mysql_query($query); 
    } 
    } 
} 
?> 
+0

В условия производительности было бы лучше сделать одну вставку с несколькими значениями одновременно. – thedom

+0

Производительность действительно не проблема: P –

+0

Привет, извините, я отредактировал мой OP. – Brian

0

В вашей вставки заявление просто добавить значения, например, так:

INSERT INTO имя_таблицы (a, b, c) ЗНАЧЕНИЯ (1,2,3), (4,5,6), (7,8,9);

так для примера,

INSERT INTO фрукты (плоды) VALUES ('Orange'), ('Lemon'), ('Лайм');

должно работать.

http://dev.mysql.com/doc/refman/5.5/en/insert.html

+0

** - ** 1 не будет работать -> строки должны быть помещены под ' '' – thedom

+0

Добавлено цитаты для лучшего понимания – awestover89

0

MySQL поддерживает несколько вставок в одном запросе:

INSERT INTO table (field1, field2) VALUES (values1a, values2a), (values1b, values2b), etc... 
0

Вы можете сделать HTML массив элементов, например

в HTML

<form action='save.php' method='post'/> 
<input name='fruits[]' value='' /> 
<input name='fruits[]' value='' /> 
<input name='fruits[]' value='' /> 
</form> 

Тогда в save.php

$fruits = ''; 
foreach($_POST['fruits'] as $fruit) { 
$fruits .= "({$fruit})," 
} 

$fruits = rtrim($fruits,','); 

$sql = "INSERT INTO fruits(fruit) VALUES {$fruits}"; 
1

Одно вставка с помощью функции взрываться.

Ваш HTML

<input type="text" name="fruit[]" /> 
<input type="text" name="fruit[]" /> 
<input type="text" name="fruit[]" /> 

Ваш PHP

foreach($_POST['fruit'] as $fruit) $values[] = "('".mysql_real_escape_string($fruit)."')"; 
if(count($values) > 0) mysql_query("INSERT INTO fruits (fruitName) VALUES " . implode(',', $values)); 
Смежные вопросы