一次插入几行 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">

这运行良好,但是当用户只填写两个或三个输入时,如何避免输入空白行?

使用串联的"幂"。您的问题几乎没有解决方案。

让我们考虑以下函数:

<?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";

这样:

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";
    ...
}

最新更新