2015-11-02 3 views
1

Это мои html-коды для динамических строк таблицы. Это дублирует поля таблицы, нажав кнопку «Добавить новую». Проблема в том, что я не могу вставить все заполненные данные в базу данных. Было бы неплохо, если бы вы могли мне помочь. Большое спасибо.Как вставить данные динамической таблицы строк в базу данных сразу

<!-- Time&Task --> 

        <div class="box-body"> 
        <div class="form-group"> 
         <label class="col-sm-2 control-label"></label> 
         <div class="col-sm-10"> 

         <br> 
     <table class="table table-striped" id="maintable" width="50%" cellpadding="0" cellspacing="0" class="pdzn_tbl1" border="0px"> 
     <tr> 
       <th>Time Start:</th> 
       <th>Time End:</th> 
       <th>Task:</th> 
       <th>Comment:</th> 
     </tr> 

     <tr class="rows"> 
      <td style="padding:5px;"> 
       <input type="time" name="item[0][timestart]" /> 
      </td> 
      <td style="padding:5px;"> 
       <input type="time" name="item[0][timeend]" /> 
      </td> 
      <td style="padding:5px;"> 
       <input type="text" name="item[0][tasks]" /> 
      </td> 
      <td style="padding:5px;"> 
       <input type="text" name="item[0][comment]" /> 
      </td> 
     </tr> 

    </table> 
    <div id="add_new">ADD NEW</div> 


    <?php 
if (isset($_POST['item']) && is_array($_POST['item'])) { 
    $items = $_POST['item']; 
    $i = 0; 
    foreach($items as $key => $value) { 
     echo 'Item '.$i++.': '.$value['timestart'].' '.$value['timeend'].' '.$value['tasks'].' '.value['comment'].'<br />'; 
    } 
} 
?> 

         </div> 
        </div> 
        </div><!-- /.box-body --> 

Это мой SQL-запрос для вставки. вот проблема. Я не знаю, как петля вставить в БД. Благодарю. : D

<?php 
    if (isset($_POST['data']) && !empty($_POST['data'])) { 

    $timestart = htmlspecialchars($_POST['timestart']); 
    $timeend = htmlspecialchars($_POST['timeend']); 
    $tasks = htmlspecialchars($_POST['tasks']); 
    $comment = htmlspecialchars($_POST['comment']); 

    include('DBConnect.php'); 


     $SQL = "INSERT INTO TSTable (timestart,timeend,tasks,comment) VALUES ('$timestart','$timeend','$tasks','$comment')"; 

    if (mysqli_query($conn, $SQL)) { 

} else { 
    echo "Error: " . $sql . "<br>" . mysqli_error($conn); 
} 
    } 

! Привет всем, я нашел решение уже. Вот правильные коды. Надеюсь, это поможет кому-то, кто в этом нуждается. html все тот же, и только часть запроса sql, необходимая для исправления.


if (isset($_POST['data'])) { 

    $timestart = $_POST['timestart']; 
    $timeend = $_POST['timeend']; 
    $tasks = $_POST['tasks']; 
    $comment = $_POST['comment']; 

    include('DBConnect.php'); 

$count= count($timestart); 
for ($i=0; $i< $count; $i++){ 
    if($timestart[$i] != null || !empty($timestart[$i])){ 

     $SQL = "INSERT INTO TSTable (timestart,timeend,tasks,comment) VALUES ('$timestart[$i]','$timeend[$i]','$tasks[$i]','$comment[$i]')";  
} 
if (mysqli_query($conn, $SQL)) { 

} else { 
    echo "Error: " . $sql . "<br>" . mysqli_error($conn); 
} 
} 

    } 
+0

http://stackoverflow.com/questions/11483799/php-mysql-dynamic-prepared-statement-with-insert-update-query –

ответ

0

Есть несколько вещей здесь, которые сделают вашу жизнь легче, если изменились.

Элементы ввода с таким же именем будут представлены в виде массива в том порядке, в котором они отображаются. Стандартная процедура заключается в том, чтобы разместить ваш html так (несколько полей удалены для краткости);

<td><td><input name=timestart><input name=timeend><input name=tasks></td></tr> 
<td><td><input name=timestart><input name=timeend><input name=tasks></td></tr> 
<td><td><input name=timestart><input name=timeend><input name=tasks></td></tr> 
... etc 

Это даст вам структуру почты, такую ​​как;

Array 
(
[timestart] => Array 
    (
     [0] => timestart 1 
     [1] => timestart 2 
     [2] => timestart 3 
    ) 

[timeend] => Array 
    (
     [0] => timeend 1 
     [1] => timeend 2 
     [2] => timeend 3 
    ) 

[task] => Array 
    (
     [0] => task 1 
     [1] => task 2 
     [2] => task 3 
)); 

И вставить с;

$timestart = $_POST['timestart']; 
$timeend = $_POST['timeend']; 
$task = $_POST['task']; 

for($i=1 ; $i < count($timestart) ; $i++) 
{ 
    $sql = "INSERT INTO TSTable VALUES($timestart[$i],$timeend[$i],$task[$i]);" 
    ... more code goes here.. 
} 
+0

Привет. Все еще не работает. Спасибо за ответ, хотя. : D – Sam

+0

Когда «Элементы ввода с таким же именем будут представлены как массив, в порядке их появления. «правда? – chris85

+1

@ chris85 вот что происходит, когда кто-то пытается использовать код, который не работает, а? ;-) –

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