Вставить несколько строк в mysql по php

268
29 сентября 2017, 19:45

Как передать массивные данные из формы в mysql - одним Запросом? И чтобы данные каждого цикла, были добавлены в отдельную строку в таблице БД.

Пробую так:
Цикл input-ов откуда передаются данные

while($myrow=mysql_fetch_array($rsm)) {
    <input type="checkbox" checked name="visited[]">
    <input type="hidden" name="user_id[]" value="'.$myrow['user_id'].'">
    <input type="hidden" name="day[]" value="'.$textday.'">
    <input type="hidden" name="dates[]" value="'.$today.'">
}

INSERT

foreach($_POST[visited] as $visited){
$sql= mysql_query ("INSERT into dates (user_id,dates,visited) Values ($user_id,$dates,$visited)");
}  
Answer 1

Покажу реализацию на вышем примере, а вообще советую перейти на PDO подход, и как то фильтровать данные перед тем как вставить в запрос.

К примеру ваш POST запрос выглядел бы вот так:

$_POST = [
    'visited' => [
        1,
        1,
        1
    ],
    'user_id' => [
        20,
        30,
        30
    ],
    'dates' => [
        '12-12-2015',
        '12-12-2016',
        '12-12-2017',
    ]
];

Чтобы его сохранить достаточно этого кода:

$query = 'INSERT INTO dates (user_id,dates,visited) VALUES ';
$values_array = [];
foreach ($_POST['visited'] as $key => $visited) {
    $values_array[] = sprintf("('%s', '%s', '%s')", $_POST['user_id'][$key], $_POST['dates'][$key], $visited); //Лучше заменить '%d', '%s', '%d' но я не знаю как лежат у вас данные, так что этот вариант чтобы наверняка
}
$values_string = implode(', ', $values_array);
$query .= $values_string;
$sql = mysql_query($query);

В итоге в переменной $query лежит вот такая строка:

string(128) "INSERT INTO dates (user_id,dates,visited) VALUES ('20', '12-12-2015', '1'), ('30', '12-12-2016', '1'), ('30', '12-12-2017', '1')"
Answer 2

Вам нужно сформировать SQL-запрос, который вставит сразу несколько строк в таблицу. В MySQL этот запрос обычно имеет следующий вид:

INSERT INTO table_name (a, b, c) VALUES (1, 2, 3), (2, 3, 4);

, где a, b, c - имена полей, в которые нужно вставить значения, а данные в каждой паре круглых скобок соответственно значения этих полей. Одни скобки - одна вставленная строка.

Для того, чтобы сформировать запрос для вашего случая, нужно сделать так:

$sql = 'INSERT INTO dates (user_id, dates, visited) VALUES ';
foreach($_POST[visited] as $visited) {
    $sql .= '($user_id, $dates, $visited),';
}
$sql = rtrim($sql, ',');
mysql_query($sql);

Обращаю огромнейшее внимание на то, что у вас не проверяются вводимые пользователем данные, из-за чего любой пользователь сможет применить SQL-инъекцию и выполнить практически любой запрос. Но это не касается темы вашего вопроса, поэтому я это и не исправлял - советую перейти на PDO и почитать про SQL-инъекции.

READ ALSO
Как установить PHP 5.5 на macOS?

Как установить PHP 5.5 на macOS?

Если не ошибаюсь с macOS сразу идет PHP, но новыйУ меня стоит локальный сервер MAMP и он отображает версию 7

150
активный неактивный yii2

активный неактивный yii2

как по условию сделать некоторые строки неактивными, точнее как пройдет дата окончания они должны стать неактивными, а щяс на данном рисунке...

176
Как спарсить с сайта с установленной recaptcha?

Как спарсить с сайта с установленной recaptcha?

Итак, есть сайт, на нем ajax-форма поиска информации с рекапчей от гугла (без галочки), ответ формы мне нужно спарсить

185