PHP POST несколько строк в MySQL - PullRequest
1 голос
/ 26 января 2011

У меня есть таблица с именем fruits:

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

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

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

РЕДАКТИРОВАТЬ:

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

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

Ответы [ 5 ]

3 голосов
/ 26 января 2011

Вам нужно правильно назвать свои текстовые поля, используя скобки [], чтобы сформировать массив, а затем перебрать массив POST для вставки данных.Перед выполнением запроса убедитесь, что вы экранировали данные, используя mysql_real_escape_string или подготовленные запросы.

РЕДАКТИРОВАТЬ: Обновление примеров, поскольку 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);
    }
  }
}
?>
1 голос
/ 26 января 2011

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

Ваш 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));
0 голосов
/ 26 января 2011

Вы можете создать 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}";
0 голосов
/ 26 января 2011

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

INSERT INTO table (field1, field2) VALUES (values1a, values2a), (values1b, values2b), etc...
0 голосов
/ 26 января 2011

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

INSERT INTO tbl_name (a, b, c) VALUES (1,2,3), (4,5,6), (7, 8,9);

так, например,

ВСТАВИТЬ В фрукты (фрукты) ЦЕННОСТИ («Апельсин»), («Лимон»), («Лайм»);

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...