2017-01-20 6 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"; 

 Смежные вопросы

  • Нет связанных вопросов^_^