Вставить несколько строк одновременно MySql DB

У меня есть форма с 6 текстовыми вводами для пользователей, чтобы добавить некоторые ссылки на них и добавить их в базу данных. Каждый из этих 6 входов вставляет данные в разные строки. Это мой код:

public function insertImages($img1,$img2,$img3,$img4,$img5,$img6){
$myDb = $this->_controlPanel->getMyDb();

$query = "INSERT INTO galeria (img) VALUES ('$img1'), ('$img2'),('$img3'), ('$img4'),('$img5'), ('$img6')";

$result = $myDb->performQuery($query);

if (!$result) {
die('Something went wrong, try again: ' . mysql_error());
header( "Refresh:3; url=insertnot.php");
}

else {
header( "Refresh:1; url=admin.php");

}

}

а также

if(!empty($_POST)){

$img1 = $_POST['img1'];
$img2 = $_POST['img2'];
$img3 = $_POST['img3'];
$img4 = $_POST['img4'];
$img5 = $_POST['img5'];
$img6 = $_POST['img6'];try{
$log = new classes_UserManager($myControlPanel);
$insert = $log->insertImagens($img1,$img2,$img3,$img4,$img5,$img6);
}
catch (invalidArgumentException $e){

$e->getMessage();
}

}?>
<div class="container"><h2 style="color:#666; margin-top:15vh; text-align:center;"> Inserir Imagens </h2>

<form style="margin-top:10vh;" name="img" method="POST" action=""><div class="row">

<div class="col-md-4">
<input placeholder="Imagem 1"  class="form-control" type="text" name="img1" id="title" >
</div>

<div class="col-md-4">
<input placeholder="Imagem 2"  class="form-control" type="text" name="img2" id="title" >
</div>

<div class="col-md-4">
<input placeholder="Imagem 3" class="form-control" type="text" name="img3" id="title" >
</div></div>

<br>
<br><div class="row">

<div class="col-md-4">
<input placeholder="Imagem 4"  class="form-control" type="text" name="img4" id="title" >
</div><div class="col-md-4">
<input placeholder="Imagem 5"  class="form-control" type="text" name="img5" id="title" >
</div>

<div class="col-md-4">
<input placeholder="Imagem 6" class="form-control" type="text" name="img6" id="title" >
</div>
</div><br>
<br>

<input type="submit" style="width:100%; margin:0 auto;" class="btn btn-primary form-control" name="submit" id="submit">

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

-3

Решение

Используйте «силу» объединения. Есть несколько решений вашей проблемы.

давайте рассмотрим следующую функцию:

<?php
// get all non-empty fields for POST that
// have index like img<number>
function getNonEmptyValues ($inputs , $input_prefix, $inputs_count = 7)
{
$nonempty_inputs = array();
$prefix = isset($input_prefix) ? $input_prefix : '';

// you have to be sure each of your inputs
// is indexed as range 1..N
// with some prefix
for ($i = 1; $i < $inputs_count; $i++)
{
$value = isset($inputs[$prefix.$i]) ? $inputs[$prefix.$i] : '';
if(strlen($value))
{
$nonempty_inputs []= $value;
}
}

return $nonempty_inputs;
}

// get all non-empty fields for POST that
// have index like img<number>
// but ignore all fields after 1 missing,
// e.g. : img1, img2, img3 return array of length 3
// while img1, img2, img4 will return array of length 2
function getInOrder($inputs, $input_prefix, $inputs_count = 7)
{
$nonempty_inputs = array();
$prefix = isset($input_prefix) ? $input_prefix : '';

// you have to be sure each of your inputs
// is indexed as range 1..N
// with some prefix
for ($i = 1; $i < $inputs_count; $i++)
{
$value = isset($inputs[$prefix.$i]) ? $inputs[$prefix.$i] : '';
if(strlen($value))
{
$nonempty_inputs []= $value;
}
else
{
break;
}
}

return $nonempty_inputs;
}

function buildInsertQuery ($inputs) {
if (count($inputs) === 0) {
throw new \Exception("Missing inputs. Cannot build query.");
}

$query = "INSERT INTO galeria (img) VALUES ";
$insert_values = [];

foreach( $inputs as $value ) {
$insert_values []= "('".$value."')";
}

return $query . implode(",", $insert_values) . ";";
}$_our_post = array(
"img1" => "kittenz",
"img2" => "doge",
"img4" => "me gusta");

$my_data = getNonEmptyValues($_our_post, "img");
echo buildInsertQuery($my_data);

echo "\n";

$my_data = getInOrder($_our_post, "img");
echo buildInsertQuery($my_data);

echo "\n";
0

Другие решения

что-то вроде этого:

if(!empty($_POST)) {
$images = array();
for ($i = 1; $i <= 6; $i++) {
if (!empty($_POST['img'.$i]))
$images[] = $_POST['img'.$i];
}

if (sizeof($images) > 0)
$insert = $log->insertImages($images);
...
}

а также

public function insertImages($images) {
$myDb = $this->_controlPanel->getMyDb();
$imgStr = '';
foreach($images as $k => $v) {
$imgStr += "('$v'),";
}
$imgStr = rtrim($imgStr, ',');  // remove trailing comma

$query = "INSERT INTO galeria (img) VALUES $imgStr";

...
}
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector