我有一个非常奇怪的问题,我似乎无法弄清或理解。因此,从本质上讲,我有一个要获取通过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”,然后直接单击“提交”,效果很好。
谁能帮助我或建议原因为何?
非常感谢。
最佳答案
如果要将参数添加到控制器的功能,则必须将其添加到:function func($parameter = 0)
(对于默认值,= 0是可选的)。
在这种情况下,您可以通过$parameter
访问参数。
在您的View文件中,您可以打开表单以发布到当前URL。为此,您需要在控制器中加载url帮助器:$this->load->helper('url');
(或者您可以在application / autoload.php中自动加载它)。
您的form_hidden声明也很糟糕。如果要使用array()进行声明,则必须使用以下语法:
$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();
?>
关于php - Codeigniter隐藏表格变为NULL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36785247/