Входной массив multi [] вставить php sql

Вот моя форма ввода -

<input type = "text" multiple name = "name[]">  
<input type = "text" multiple name = "mobile[]"> 
<input type = "text" name = "invoice_no">

Вот php-скрипт для вставки mySQL, который я пробовал:

$name=mysqli_real_escape_string($con, $_POST['name']);
$mobile=mysqli_real_escape_string($con, $_POST['mobile']);
$invoice_no=mysqli_real_escape_string($con, $_POST['invoice_no']);


foreach($mobile as $a => $b){

$sql = "INSERT INTO `customer` (`name`, `mobile`, `invoice_no`)
VALUES('$name[$a]', '$mobile[$a]', '$invoice_no')";

}

if ($con->query($sql) === TRUE) {
echo "Success";
} else {
echo("Error: " . mysqli_error($con));
}

Я пытаюсь вставить массив name [] и mobile [] как отдельную строку вместе с invoice_no, который является фиксированными данными. Как это сделать?

моя ошибка! отредактировал.

Zils 01.05.2018 23:35

Вы используете mysqli_real_escape_**string** на $_POST['name'] массиве. вы также запускаете запрос только один раз вне цикла, поэтому фактически будет вставлен только последний. лучше объединить значения для одного запроса

user9487972 01.05.2018 23:37

В декларации $sql замените $mobile[$a] на ${mobile[$a]} (то же самое для name)

Romain Ciaccafava 01.05.2018 23:41

Это только вставка последней строки с использованием $ {$ mobile [$ a]}, а также удаление mysqli_real_escape_string

Zils 01.05.2018 23:46

он вставляет только последнюю строку, потому что (как я сказал выше) вы запускаете запрос только один раз вне цикла, а не внутри цикла для каждого элемента массива

user9487972 02.05.2018 00:18
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
5
39
1

Ответы 1

Вам нужно ввести экранирование строки в цикл - как указал @smith, mysqli_real_escape_string следует применять к строке, а не к массиву. Кроме того, вы выполняете только запрос, который вставляет один набор значений, а не тот, который вставляет все значения. Таким образом, вы можете либо перевести выполнение запроса в цикл, либо создать запрос, который будет вставлять все строки сразу. Последний наиболее эффективен:

$invoice_no = mysqli_real_escape_string($con, $_POST['invoice_no']);
$sql = "INSERT INTO `customer` (`name`, `mobile`, `invoice_no`) VALUES ";
$values = array();
foreach ($_POST['mobile'] as $key => $value) {
    $name = mysqli_real_escape_string($con, $_POST['name'][$key]);
    $mobile = mysqli_real_escape_string($con, $value);
    $values[] = "('$name', '$mobile', '$invoice_no')";
}
$sql .= implode(',', $values);
if ($con->query($sql) === TRUE) {
    echo "Success";
} else {
    echo("Error: " . mysqli_error($con));
}

Обратите внимание, что во избежание возможной атаки путем инъекции вам действительно следует использовать подготовленные операторы. См. Руководство по mysqli_prepare, чтобы узнать, как их использовать.

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

user9487972 02.05.2018 00:52

Другие вопросы по теме