2017-01-20 23 views
-3

私は、6つのテキスト入力を持つフォームを用意して、ユーザーにいくつかのリンクを追加してデータベースを追加します。これら6つの入力のそれぞれは、異なる行にデータを挿入します。これは私のコードです:複数の行を一度に挿入するMySql DB

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

これがうまく機能しているが、ユーザーが唯一の二、三の入力のようにいっぱいになるとどのように私は、空白行を入力しないのですか?このような

+1

を教えてください。これを解決すれば、あなたは下の答えを受け入れるつもりですか?あなたの他のすべての質問はもちろんのこと、他の人たちが彼らの自由時間をあきらめて解決するのをとても喜んでお勧めします。 –

答えて

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

あなたが気にしないことを望むなら、あなたはとにかく近くにいた、私はちょうど – RiggsFolly

0

連結の "力" を使用してください。あなたの問題に対する解決策はほとんどありません。

の機能を以下の考える:

<?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"; 
関連する問題