2016-02-19 15 views
5

Tôi mới dùng Laravel và đang thực hiện dự án trong Laravel 5.2 cho mục đích học tập của mình. Nhưng tôi đã bị mắc kẹt với một số lỗi khi cập nhật dữ liệu trong biểu mẫu. Các truy vấn chèn, chọn và xóa đang hoạt động tốt mà không có bất kỳ lỗi nào. Nhưng khi sử dụng cập nhật truy vấn nó được hiển thị lỗi như đưa ra dưới đây:laravel 5.2: ErrorException: preg_replace(): Tham số không khớp, mẫu là một chuỗi trong khi thay thế là một mảng

ErrorException phù helpers.php 683: preg_replace(): Thông số không phù hợp, pattern là một chuỗi thời gian thay thế là một mảng

in helpers.php line 683 
at HandleExceptions->handleError('2', 'preg_replace(): Parameter mismatch, pattern is a string while replacement is an array', 'F:\xampp\htdocs\multidatatechnologies.com\vendor\laravel\framework\src\Illuminate\Support\helpers.php', '683', array('search' => '\?', 'replace' => array(array('menutype' => 'Fast Food', 'status' => '1'), '2'), 'subject' => 'update `menutypes` set `0` = ? where `id` = ?', 'value' => array('menutype' => 'Fast Food', 'status' => '1'))) 
at preg_replace('/\?/', array('menutype' => 'Fast Food', 'status' => '1'), 'update `menutypes` set `0` = ? where `id` = ?', '1') in helpers.php line 683 
at str_replace_array('\?', array(array('menutype' => 'Fast Food', 'status' => '1'), '2'), 'update `menutypes` set `0` = ? where `id` = ?') in QueryException.php line 56 
at QueryException->formatMessage('update `menutypes` set `0` = ? where `id` = ?', array(array('menutype' => 'Fast Food', 'status' => '1'), '2'), object(PDOException)) in QueryException.php line 39 
at QueryException->__construct('update `menutypes` set `0` = ? where `id` = ?', array(array('menutype' => 'Fast Food', 'status' => '1'), '2'), object(PDOException)) in Connection.php line 653 
at Connection->runQueryCallback('update `menutypes` set `0` = ? where `id` = ?', array(array('menutype' => 'Fast Food', 'status' => '1'), '2'), object(Closure)) in Connection.php line 611 
at Connection->run('update `menutypes` set `0` = ? where `id` = ?', array(array('menutype' => 'Fast Food', 'status' => '1'), '2'), object(Closure)) in Connection.php line 416 
at Connection->affectingStatement('update `menutypes` set `0` = ? where `id` = ?', array(array('menutype' => 'Fast Food', 'status' => '1'), '2')) in Connection.php line 359 
at Connection->update('update `menutypes` set `0` = ? where `id` = ?', array(array('menutype' => 'Fast Food', 'status' => '1'), '2')) in Builder.php line 1904 
at Builder->update(array(array('menutype' => 'Fast Food', 'status' => '1'))) in AdminController.php line 84 
at AdminController->updatemenutype(object(Request)) 
at call_user_func_array(array(object(AdminController), 'updatemenutype'), array(object(Request))) in Controller.php line 76 
at Controller->callAction('updatemenutype', array(object(Request))) in ControllerDispatcher.php line 146 
at ControllerDispatcher->call(object(AdminController), object(Route), 'updatemenutype') in ControllerDispatcher.php line 94 
at ControllerDispatcher->Illuminate\Routing\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103 
at Pipeline->then(object(Closure)) in ControllerDispatcher.php line 96 
at ControllerDispatcher->callWithinStack(object(AdminController), object(Route), object(Request), 'updatemenutype') in ControllerDispatcher.php line 54 
at ControllerDispatcher->dispatch(object(Route), object(Request), 'App\Http\Controllers\AdminController', 'updatemenutype') in Route.php line 174 
at Route->runController(object(Request)) in Route.php line 140 
at Route->run(object(Request)) in Router.php line 703 
at Router->Illuminate\Routing\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in VerifyCsrfToken.php line 64 
at VerifyCsrfToken->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(VerifyCsrfToken), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in ShareErrorsFromSession.php line 49 
at ShareErrorsFromSession->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(ShareErrorsFromSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in StartSession.php line 62 
at StartSession->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(StartSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 37 
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(AddQueuedCookiesToResponse), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in EncryptCookies.php line 59 
at EncryptCookies->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(EncryptCookies), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103 
at Pipeline->then(object(Closure)) in Router.php line 705 
at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 678 
at Router->dispatchToRoute(object(Request)) in Router.php line 654 
at Router->dispatch(object(Request)) in Kernel.php line 246 
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in CheckForMaintenanceMode.php line 44 
at CheckForMaintenanceMode->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103 
at Pipeline->then(object(Closure)) in Kernel.php line 132 
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 99 
at Kernel->handle(object(Request)) in index.php line 54 

Dưới đây đưa là mã được viết bởi tôi cho các tập tin quan điểm của các hình thức updation (editmenutype.blade.php):

<form class="form-horizontal" method="post" action="{{action('[email protected]')}}"> 
      <input type="hidden" name="_token" value="{{csrf_token()}}" /> 
      <input type="hidden" name="eid" value="{{$row->id}}" />       
       <div class="box-body"> 
       <label>Menu-Type Name:</label> 
       <div class="input-group"> 
        <div class="input-group-addon"> 
        <i class="fa fa-fire"></i> 
        </div> 
      <input type="text" name="menutype" class="form-control" value="{{$row->menutype}}" placeholder="Enter Menu-Type Name..." required="required" maxlength="100"> 
       </div><!-- /.input group --> 
       </div><!-- /.form group -->  
       <div class="box-body"> 
       <label>Publishing Status:</label> 
       <div class="input-group"> 
        <div class="input-group-addon"> 
        <i class="fa fa-globe"></i> 
        </div> 
        <select name="status" class="form-control" style="width: 100%;" required="required"> 
         <option value="{{$row->status}}" disabled="disabled"><?php if($row->status==1){echo "Yes"; }else{echo "No";} ?></option>       
         <option value="1">Yes</option> 
         <option value="0">No</option> 
        </select> 
       </div><!-- /.input group --> 
       </div><!-- /.form group -->      
       <div class="box-footer"> 
        <input type="reset" name="reset" class="btn btn-default" value="Cancel"> 
        <input type="submit" name="submit" class="btn btn-info pull-right" value="Edit Menu-Type"> 
       </div> 
       </form> 

Dưới đây nhất định là chức năng tương ứng của tôi viết bằng bộ điều khiển để cập nhật dữ liệu (AdminController.php):

public function editmenutype($id) { 
    $row = DB::table('menutypes')->where('id',$id)->first(); 
    return view('admin.editmenutype')->with('row',$row); 
} 

public function updatemenutype(Request $request) { 
    $post=$request->all(); 
    print_r($post); 
    //var_dump($post); 
    $v=\Validator::make($request->all(), 
    [ 
     'menutype' => 'required', 
     'status' => 'required', 
    ]); 
    if($v->fails()) 
    { 
     return redirect()->back()->withErrors($v->errors()); 
    } 
    else 
    { 
     $data = array(
     [ 
      'menutype' => $post['menutype'], 
      'status' => $post['status'], 
     ]); 
     $i = DB::table('menutypes')->where('id',$post['eid'])->update($data); 
     if($i > 0) 
     { 
      \Session::flash('message','* Menu-Type Updated Successfully.'); 
      return redirect('/admin/managemenutypes'); 
     } 
    } 
} 

Dưới đây nhất định là các mã tương ứng i đưa ra trong các tập tin định tuyến (routes.php) để gọi các trang tương ứng:

Route::get('admin/editmenutype/{id}','[email protected]'); 
Route::post('admin/updatemenutype','[email protected]'); 

Tại sao lỗi này xảy ra trong trường hợp chỉ truy vấn cập nhật? Xin hãy giúp tôi với một phương pháp ổn định và chính xác để khắc phục vấn đề này ... Cảm ơn trước.

Trả lời

2

array() and \[\] are both declarations of an empty array.

Trong AdminController.php bạn, hãy xem:

public function updatemenutype(Request $request) { 
    ... 
    if($v->fails()) 
    { 
     return redirect()->back()->withErrors($v->errors()); 
    } 
    else 
    { 
     //Error is here: array within array 
     $data = array(
     [ 
      'menutype' => $post['menutype'], 
      'status' => $post['status'], 
     ]); 
    ...   
} 

Thay vào đó, nó phải là:

public function updatemenutype(Request $request) { 
    ... 
    if($v->fails()) 
    { 
     return redirect()->back()->withErrors($v->errors()); 
    } 
    else 
    { 
     //Single array declaration 
     $data = 
     [ 
      'menutype' => $post['menutype'], 
      'status' => $post['status'], 
     ]; 
    ...   
} 
+0

Yes. Cảm ơn rất nhiều. Nó hoạt động hoàn hảo ngay bây giờ. Nhưng trong trường hợp chèn truy vấn cũng tôi đã đưa ra như mảng trong mảng và nó hoạt động hoàn hảo. Sau đó, tại sao nó không hoạt động cho truy vấn cập nhật khi đưa ra như mảng trong mảng? –

+1

Sau khi kiểm tra lớp ngữ pháp chiếu sáng ('Illuminate \ Database \ Query \ Grammars \ Grammar'), Chèn được thực hiện bằng cách sử dụng hàm' parameterize', nó sẽ kích hoạt mảng giá trị. Trong khi đó, hàm cập nhật, xây dựng một chuỗi theo định dạng 'name = value', do đó mảng của bạn trong mảng sẽ là' 0 = mảng', trong quá trình cập nhật, do đó sự cố. – Mysteryos

+0

oh. Ừ ừ. cảm ơn vì đã giải thích rõ vấn đề này. –

Các vấn đề liên quan