2016-04-22 19 views
1

我有一個非常奇怪的問題,我似乎無法弄清楚或理解。所以基本上我有一個抓取通過Codeigniter URI傳遞的ID,讓它填充一個隱藏的表單,然後提交。但是,當我提交表單隱藏時,它回來說數據是NULL。我已經嘗試並將其更改爲form_input,它工作正常。任何人都可以幫助我或向我解釋爲什麼會出現這種情況?Codeigniter隱藏表單變爲NULL

我試過以下解決方案。

URL

http://localhost/list/players/add/1/ 

在我想要URI 3( '1')以在傳遞給形式和提交。

解決方案1 ​​ - 具有URI直傳遞到數據陣列

控制器

function add() { 

      if($this->form_validation->run() == FALSE) { 

          $data['view_file'] = 'add'; 
          $this->load->module('template'); 
          $this->template->cmslayout($data); 

         } else { 
         $league_id = $this->uri->segment(3); 

         $data = array(
          'leagues_id' => $league_id, 
            ); 

         if($this->_insert($data)){ 
          return $query; 
       } 
       redirect ('/players/'); 
      } 
     } 

解決方案2 - 抓住URI和填充隱藏表單

控制器

function add() { 

     $league_id = $this->uri->segment(3); 

     $this->load->module('leagues'); 
     $data['leagues_list'] = $this->leagues->get_where($league_id); 

      if($this->form_validation->run() == FALSE) { 

          $data['view_file'] = 'add'; 
          $this->load->module('template'); 
          $this->template->cmslayout($data); 

         } else { 

         $data = array(
          'leagues_id' => $this->input->post('leagues_id'), 
            ); 

         if($this->_insert($data)){ 
          return $query; 
       } 
       redirect ('/players/'); 
      } 
     } 

查看

<?php 
echo form_open('players/add/'); 
?> 

<?php 
echo "<br>"; 
echo "<br>"; 

echo "League Name"; 
echo "<br>"; 
foreach ($leagues_list->result() as $row) { 
    $league_id = $row->id; 
    $league_name = $row->league_name; 

    echo $league_name; 

    $data = array( 'name'   =>  'leagues_id', 
        'value'   =>  $league_id, 
    ); 
    echo form_hidden($data); 
} 

echo "<br>"; 
echo "<br>"; 

$data = array( 'value'   =>  'Set Player', 
    'name'   =>  'submit', 
    'class'   =>  'submit-btn', 
); 
echo form_submit($data); 

echo form_close(); 
?> 

在這兩種情況下,對提交回來了一個錯誤,說leagues_id爲NULL。現在我已經嘗試在解決方案2中從「form_hidden」更改爲「form_input」,並立即單擊提交併且工作正常。

任何人都可以幫助我或建議爲什麼這是這種情況?

非常感謝。

回答

0

如果要爲控制器的功能添加參數,則必須將其添加到:function func($parameter = 0)(= 0對於默認值爲可選)。 在這種情況下,您可以通過$parameter訪問參數。

在您的視圖文件中,您可以打開表單發佈到當前網址。爲此,您需要在您的控制器中加載url助手:$this->load->helper('url');(或者您可以自動將其加載到application/autoload.php中)。

您的form_hidden聲明也不好。如果你想用數組(聲明一下),那麼你就必須使用這個語法:

$data = array(
       'name' => 'John Doe', 
       'email' => '[email protected]' 
      ); 

echo form_hidden($data); 

// Would produce: 

<input type="hidden" name="name" value="John Doe" /> 
<input type="hidden" name="email" value="[email protected]" /> 
表格幫手

的更多信息:https://ellislab.com/codeigniter/user-guide/helpers/form_helper.html

對於正確的解決方案,試試這個:

控制器

function add($league_id = 0) 
{ 
    if($league_id != 0) 
    { 
     $this->load->module('leagues'); 
     $data['leagues_list'] = $this->leagues->get_where($league_id); 

     if($this->form_validation->run() == FALSE) 
     { 
      $data['view_file'] = 'add'; 
      $this->load->module('template'); 
      $this->template->cmslayout($data); 
     } 
     else 
     { 
      $data = array(
       'leagues_id' => $this->input->post('leagues_id'), 
      ); 
      if($this->_insert($data)) 
      { 
       return $query; 
      } 

      redirect ('/players/'); 
     } 
    } 

查看

<?php 
echo form_open(current_url()); 
echo "<br /><br />"; 

echo "League Name <br />"; 
foreach ($leagues_list->result() as $row) 
{ 
    $league_id = $row->id; 
    $league_name = $row->league_name; 

    echo $league_name; 

    echo form_hidden('leagues_id', $league_id); 
} 

echo "<br /><br />"; 

$data = array(
    'value'   =>  'Set Player', 
    'name'   =>  'submit', 
    'class'   =>  'submit-btn' 
); 
echo form_submit($data); 

echo form_close(); 
?> 
+0

謝謝skyyler。我已經嘗試了您的解決方案,但是現在當我提交時(甚至是空白頁面),它甚至不會加載下一頁。我已經嘗試了這兩個form_hidden和form_input。注意在form_input中,表單確實填充了正確的ID,但現在它甚至不會提交到數據庫,而之前它已經做到了。 –

+0

對不起,忘了注意'url'助手已經自動加載了,我不明白你的意思是「你的form_hidden聲明太糟糕了。」?我的語法和提供的例子完全一樣,唯一不同的是它在一個foreach函數中,所以我可以加載變量。乾杯。 –

+0

我想你的'$ league_id'在這種情況下沒有任何價值(這就是爲什麼你在發佈後沒有看到任何東西)。我不想在你的代碼中改變所有的東西,所以請使用你的解決方案,但試試'form_hidden('leagues_id',$ league_id);'而不是'form_hidden($ data)'。 – skyyler