【问题标题】:Insert several rows at once MySql DB一次插入多行MySql DB
【发布时间】:2017-06-05 14:38:37
【问题描述】:

我有一个带有 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 mysql post input insert


【解决方案1】:

类似这样的:

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

    ...
}

【讨论】:

  • 希望你不要介意,反正你离得太近了,我只是修复了一些东西
【解决方案2】:

使用串联的“力量”。您的问题几乎没有解决方案。

让我们考虑以下函数:

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

【讨论】:

    猜你喜欢
    • 2016-08-13
    • 1970-01-01
    • 2012-09-12
    • 2014-08-08
    • 1970-01-01
    • 2017-10-26
    • 1970-01-01
    • 1970-01-01
    • 2020-03-27
    相关资源
    最近更新 更多