【问题标题】:Codeigniter Hidden Form Becomes NULLCodeigniter 隐藏表单变为 NULL
【发布时间】:2016-04-22 05:05:16
【问题描述】:

我有一个非常奇怪的问题,我似乎无法弄清楚或理解。所以基本上我有一个获取通过 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”,然后直接点击提交,效果很好。

谁能帮助我或告诉我为什么会这样?

非常感谢。

【问题讨论】:

    标签: php mysql forms codeigniter


    【解决方案1】:

    如果你想给你的控制器的函数添加一个参数,你必须把它添加到:function func($parameter = 0)(= 0 是可选的默认值)。 在这种情况下,您可以通过$parameter访问参数。

    在您的视图文件中,您可以打开表单以发布到当前 url。为此,您需要在控制器中加载 url 帮助程序:$this-&gt;load-&gt;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();
    ?>
    

    【讨论】:

    • 谢谢斯凯勒。我已经尝试过您的解决方案,但是现在我提交时它甚至不会加载下一页(只是一个空白页)。我用 form_hidden 和 form_input 都试过了。请注意,在 form_input 中,表单确实填充了正确的 ID,但现在它甚至不会像以前那样提交到数据库。
    • 抱歉,忘了注意'url'助手已经自动加载了,我不明白你的意思是“你的form_hidden声明也很糟糕。”?我的语法与提供的示例完全相同,唯一的区别是它位于 foreach 函数中,因此我可以加载变量。干杯。
    • 我想你的$league_id 在这种情况下没有任何价值(这就是为什么你在发布后看不到任何东西)。我不想更改您代码中的所有内容,因此请使用您的解决方案,但请尝试使用form_hidden('leagues_id', $league_id); 而不是您的form_hidden($data)
    • 是的,我也尝试将 form_hidden 更改为您的建议。结果还是一样。
    • 没有。您的 form_hidden 声明很糟糕。这是您的数组:$data = array('name' =&gt; 'leagues_id', 'value' =&gt; $league_id, ); 正确的声明是:$data = array('leagues_id' =&gt; $league_id); 数组的键 是输入名称,数组的值 是输入的值。
    猜你喜欢
    • 2018-02-12
    • 1970-01-01
    • 1970-01-01
    • 2017-07-24
    • 2012-02-10
    • 2013-07-07
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多