这让我真的很香蕉。它简单易行,但我无法弄清楚它有什么问题。
我想在我的控制器中填充我的复选框值(用于测试目的)。
这是我的表格。
<a href='#' name='submitForm'>submit the form</a>
//I have jquery attached to this tag and will submit the form when user clicks it
echo form_open('test/show');
echo form_checkbox('checkbox[]','value1');
echo form_checkbox('checkbox[]','value2');
echo form_checkbox('checkbox[]','value3');
echo form_checkbox('checkbox[]','value4');
echo "<input type='text' name='text1' value='ddd'>";
echo form_close();
//My controller test
public function show(){
$data1=$this->input->post('text1');
//I can get text1 value from input box
$data2=$this->input->post('checkbox');
//it keeps giving me undefined index 'checkbox'
$data3=$_POST['checkbox'];
//same error message
//WTH is going on here!!!!!
}
请帮忙。这件事让我疯了!感谢。
更新
谢谢您的帮助。更准确地说,我的提交按钮是<a>
标记,位于form
标记之外。看来我必须在<a>
标记中加入form
标记才能使其有效。真的吗?
答案 0 :(得分:2)
如果未选中该复选框,则复选框将不会提交任何数据,因为它们不被视为成功(as per the w3c specification here)
如果你真的打勾并提交,它会起作用 - 事实上它确实如此,我刚刚测试过它。
您需要在isset()
函数中包含对$_POST
的调用。
if( isset( $_POST['checkbox'] ) ) {}
调用$this->input->post('checkbox')
不应该为您提供未定义的索引错误,因为该方法处理此可能性。 Input::post()
方法返回false或复选框的值。
编辑 -
在回答您对问题的修改时,您必须使用input
类型的元素并设置type
属性,以便在不使用Javascript等的情况下提交表单数据。按钮必须位于您要提交的<form></form>
内。
<input type="submit" value="Submit">
type="submit"
会导致浏览器在发生提交事件时发送数据。如果您希望使用另一个元素内部或外部的表单来执行此操作,您需要使用Javascript。但是,这可以基于每个浏览器/用户禁用,因此不可靠。
// Standard Javascript
<form name="myform"...
<a onclick="javascript:document.myform.submit();" href="javascript:void(0)">Submit</a>
// jQuery
$('#my-a-tag-submit-button').live( 'click', function() {
$('#my-form').submit();
}