2015-12-15 2 views
2

Я прочитал этот вопрос: https://stackoverflow.com/questions/20255690/php-insert-a-variable-number-of-records-to-mysql-from-a-html-form#=PHP MySQL вставки/обновить несколько строк сразу

Но я не могу понять, как применить это к форме с несколькими входами. Я хочу, чтобы эти входы попадали в одну строку (для каждого идентификатора массива).

Мой PHP делает следующий HTML:

<div class="panel-body"> 
    <div class="row"> 
     <div class="col-xs-12 col-sm-6 col-md-4 col-lg-3 employee-container"> 
      <label for="visible-107"> 
       <img title="Jane Doe" src="/images/prof-pics/default.jpg" class="img-responsive img-circle" alt="Jane Doe"> 
      </label> 
      <h4><input type="checkbox" name="visible[0]" id="visible-107"> <label for="visible-107">Jane Doe</label></h4> 
      <div class="input-group"> 
       <span class="input-group-addon">Function</span> 
       <input type="text" class="form-control" name="function[0]" id="function-107"> 
      </div> 
      <div class="input-group"> 
       <span class="input-group-addon">Order</span> 
       <select class="form-control" name="order[0]" id="order-107"> 
        <option value="">-- select one --</option> 
        <option value="1">1</option> 
        <option value="2">2</option> 
        <option value="3">3</option> 
        <option value="4">4</option> 
       </select> 
      </div> 
      Description<br> 
      <textarea class="form-control" name="description[0]" id="description-107"></textarea> 
     </div> 
     <div class="col-xs-12 col-sm-6 col-md-4 col-lg-3 employee-container"> 
      <label for="visible-2"><img title="John Doe" src="/images/prof-pics/default.jpg" class="img-responsive img-circle" alt="John Doe"></label> 
      <h4><input type="checkbox" name="visible[1]" id="visible-2"> <label for="visible-2">John Doe</label></h4> 
      <div class="input-group"> 
       <span class="input-group-addon">Function</span> 
       <input type="text" class="form-control" name="function[1]" id="function-2"> 
      </div> 
      <div class="input-group"> 
       <span class="input-group-addon">Order</span> 
       <select class="form-control" name="order[1]" id="order-2"> 
        <option value="">-- select one --</option> 
        <option value="1">1</option> 
        <option value="2">2</option> 
        <option value="3">3</option> 
        <option value="4">4</option> 
       </select> 
      </div> 
      Description<br> 
      <textarea class="form-control" name="description[1]" id="description-2"></textarea> 
     </div> 
    </div> 
</div> 

Как бы я перебирать эти массивы так, что я могу вставить/обновить их в виде строки в массив ID?

После реализации ответ Наны Partykar в

function set_team($web_mysqli, $mysqli, $uid, $visible, $function, $order, $description, $action, $update_id = null) { 
    $number_empl = sizeof($function); 

    for($i=0; $i<$number_empl; $i++) { 
     $uid = $uid[$i]; 
     $visible = $visible[$i]; 
     $function = $function[$i]; 
     $order = $order[$i]; 
     $description = $description[$i]; 

     $name = get_full_name($mysqli, $uid, false); 

     $sql = "INSERT INTO team (name, function, description, displayorder, visible) VALUES ('$name', '$function', '$description', '$order', '$visible')"; 
     $web_mysqli->query($sql) or die(mysqli_error($web_mysqli)); 
    } 

    $_SESSION['success'] = "Employee list website updated"; 
    header("Location: ".BASE_PATH."/includes/views/list-employees.php"); 
    exit(); 

if(isset($_POST['submit-btn'])) { 
    set_team($web_mysqli, $mysqli, $_POST['uid'], $_POST['visible'], $_POST['function'], $_POST['order'], $_POST['description'], 'insert'); 
} 

Когда я сохранить только первое имя вставляется в таблицу, а затем 3 пустых строк.

+0

Исправлено, что вы будете использовать два раза [] или функцию [] или нет ограничений. Просто спрашиваю –

+0

Нет, это не исправлено, это переменная, основанная на количестве извлеченных записей. – MartijnICU

+0

Хорошо. Ждите ответа. –

ответ

2

Нет необходимости для name[0],

<input type="checkbox" name="visible[0]" id="visible-107"> 
<input type="text" class="form-control" name="function[0]" id="function-107"> 
<select class="form-control" name="order[0]" id="order-107"> 
<textarea class="form-control" name="description[0]" id="description-107"></textarea> 

Сделать

<input type="checkbox" name="visible[]" id="visible-107"> 
<input type="text" class="form-control" name="function[]" id="function-107"> 
<select class="form-control" name="order[]" id="order-107"> 
<textarea class="form-control" name="description[]" id="description-107"></textarea> 

SomePage.php (Добавить страницу)

<? 
extract($_POST); 
$sizeOfFunc=sizeof($function); 

for($i=0;$i<$sizeOfFunc;$i++) 
{ 
    $Visible=$visible[$i]; 
    $Function=$function[$i]; 
    $Order=$order[$i]; 
    $Description=$description[$i]; 

    echo $Visible." ".$Function." ".$Order." ".$Description; 

    //Use $Visible, $Function, $Order, $Description in your query 
} 

?> 

обновленный код

Не используйте одно и то же имя переменной. Поменять имя переменной.

Это неправильно.

$uid = $uid[$i]; 
$visible = $visible[$i]; 
$function = $function[$i]; 
$order = $order[$i]; 
$description = $description[$i]; 

Это правильно

$Uid = $uid[$i]; 
$Visible = $visible[$i]; 
$Function = $function[$i]; 
$Order = $order[$i]; 
$Description = $description[$i]; 

Я изменил свой код. Используйте приведенный ниже код. Это будет работать.

<? 
function set_team($web_mysqli, $mysqli, $uid, $visible, $function, $order, $description, $action, $update_id = null) { 
    $number_empl = sizeof($function); 

    for($i=0; $i<$number_empl; $i++) { 
     $Uid = $uid[$i]; 
     $Visible = $visible[$i]; 
     $Function = $function[$i]; 
     $Order = $order[$i]; 
     $Description = $description[$i]; 

     $name = get_full_name($mysqli, $Uid, false); 

     $sql = "INSERT INTO team (name, function, description, displayorder, visible) VALUES ('$name', '$Function', '$Description', '$Order', '$Visible')"; 
     $web_mysqli->query($sql) or die(mysqli_error($web_mysqli)); 
    } 

    $_SESSION['success'] = "Employee list website updated"; 
    header("Location: ".BASE_PATH."/includes/views/list-employees.php"); 
    exit(); 

if(isset($_POST['submit-btn'])) { 
    set_team($web_mysqli, $mysqli, $_POST['uid'], $_POST['visible'], $_POST['function'], $_POST['order'], $_POST['description'], 'insert'); 
} 
?> 

Я проверил ваш код в своей системе после редактирования. Он отлично работает.

<? 

error_reporting(0); 
extract($_POST); 

echo $number_empl = sizeof($function); 

for($i=0; $i<$number_empl; $i++) 
{ 
    $Visible = $visible[$i]; 
    $Function = $function[$i]; 
    $Order = $order[$i]; 
    $Description = $description[$i]; 
    $name="Just"; 

    echo $sql = "INSERT INTO team (name, function, description, displayorder, visible) VALUES ('$name', '$Function', '$Description', '$Order', '$Visible')"."<br>"; 

} 
?> 
+0

не должен '$ visible = visible [$ i]' be '$ visible = $ visible [$ i]'? – MartijnICU

+0

Да. Да. Ошибка Typo @MartijnICU. –

+0

Я обновил свой код. @MartijnICU. Пожалуйста, смотрите. И, дайте мне знать, что случилось? –

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