Codeigniter隐藏形式变为NULL

时间:2016-04-22 05:05:16

标签: php mysql forms codeigniter

我有一个非常奇怪的问题,我似乎无法理解或理解。所以基本上我有一个获取通过Codeigniter URI传递的ID,让它填充一个隐藏的表单,然后提交。但是,当我将表单提交为隐藏时,它会返回说数据为NULL。我已经尝试将其更改为form_input,并且工作正常。任何人都可以帮助我或向我解释为什么会这样吗?

我尝试了以下解决方案。

网址

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”并立即单击“提交”并且工作正常。

任何人都可以帮助我或建议为什么会这样吗?

非常感谢。

1 个答案:

答案 0 :(得分:0)

如果要将参数添加到控制器的功能中,则必须将其添加到:function func($parameter = 0) (= 0是默认值可选)。 在这种情况下,您可以通过$parameter访问参数。

在您的查看文件中,您可以打开表单以发布到当前网址。为此,您需要在控制器中加载url帮助器:$this->load->helper('url');(或者您可以在application / autoload.php中自动加载它。)

你的form_hidden声明也很糟糕。如果要使用array()声明它,则必须使用以下语法:

$data = array(
              'name'  => 'John Doe',
              'email' => 'john@example.com'
            );

echo form_hidden($data);

// Would produce:

<input type="hidden" name="name" value="John Doe" />
<input type="hidden" name="email" value="john@example.com" />

有关表单助手的更多信息: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();
?>