2015-06-07 4 views
1

Я создаю приложение Laravel 5, где я использую плагин jQuery DataTables. в datatable у меня есть 3 поля ввода в каждой строке. что я хочу сделать, это вставить все введенные строки. В каждой строке вы должны заполнить все 3 входа, чтобы данные были опубликованы в базе данных. (База данных - это sql-сервер.) Я что-то пробовал, но он не работает. Вот что я пытался в методе контроллера магазина:Вставка в базу данных только заполненных входов в таблице html

$dates = $request->get('month'); 
    $values = $request->get('value'); 
    $comments = $request->get('comment'); 
    $reports = []; // this will keep what we input in our DB 
    /*if(!empty($row['month']) && !empty($row['value']) && !empty($row['comment'])){ 
     foreach($row as $rows){ 
      $index = +1; 
     } 
    }*/ 
    if(!empty($dates) && !empty($values)){ 
    for($i = 0; $i < count($dates); $i++) 
    { 
     //here i am dividing month and year 
     $date = explode('-', $dates[$i]); 
     $year = $date[0]; 
     $month = $date[1]; // <-- line 75 

      $reports[] = Reports::create([ 
       'month' => $month, 
       'year' => $year, 
       'value' => $values[$i], 
       'comment' => $comments[$i] 
      ]); 

     } 
    } 
    return $reports; 

Это бросает меня ошибки, хотя:

ErrorException in ReportController.php line 75: 
Undefined offset: 1 

Я искал об этом, и он говорит, что я передаю массив вместо строки.

вот StackTrace (часть):

at HandleExceptions->handleError('8', 'Undefined offset: 1', 'E:\socgen\soc-gen\app\Http\Controllers\ReportController.php', '75', array('request' => object(Request), 'dates' => array('2015-06', '2015-02', ''), 'values' => array('369', '22223', ''), 'comments' => array('878', '5466', ''), 'reports' => array(object(Reports)), 'i' => '1', 'date' => array(''), 'year' => '', 'month' => '06')) in ReportController.php line 75 

Любая помощь или подсказка ценится

+0

Каков твой код в строке 75 –

+0

Что такое '$ row'? откуда он? – itachi

+0

@itachi жаль, что это был тест, который я сделал раньше. здесь нужно было прокомментировать – xhulio

ответ

0

Официальный документ на php.net читает о взрываются функции.

Возвращает массив строк, каждая из которых является подстрокой строки формируется путем разделения его на границах сформированных строки разделителем.

, который заключает, что функция разрыва php принимает в качестве аргумента только строки, а в вашем случае вы передаете массив. Я бы предложил вам сначала поместить ваши данные в массив в строку, а затем передать его взорваться. например

for($i = 0; $i < count($dates); $i++) 
{ 
    //remove empty indexes from your array 
    array_diff($dates[$i], array('')); 

    //create a new string and put your date into it. 
    $dateString = $dates[$i]; 

    $date = explode('-', $dateString); 
    $year = $date[0]; 
    $month = $date[1]; // <-- line 75 

    //rest of your code goes here 
    } 
} 
+0

это не работает. проблема в том, что когда значения публикуются, они поступают как массив. и я хочу получить только значения, которые не являются пустыми. atm all i get is $ date ('2015-06', '2015-07', ''), если я оставлю последнюю строку без значения. – xhulio

+0

используйте isset, чтобы проверить, не является ли текущий индекс вашего массива пустым. Кроме того, вы можете использовать array_diff(); отфильтровать пустые индексы из вашего массива –

+0

вы можете отредактировать ответ? – xhulio

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