近一年来我没有使用过CodeIgniter,而且我似乎已经忘记了很多基础知识。
我正在尝试从表单中检索post变量并将它们传递给一个将它们插入到mysql中的模型。
我的表单提交的控制器函数如下所示:
public function validation() {
$this->load->helper("form");
$this->load->model("contact_form");
$data = array(
"name" => $this->input->post("name"),
... etc. etc. ....
);
if ($this->contact_form->new_form($data)) {
$this->load->view("header");
$this->load->view("submitted");
} else echo "Sorry, there was a problem adding the form to the database.";
}
视图中的表单结构如下:
<? echo form_open("form/validation");?>
<div id="one" style="display: block;">
<h1>A Heading</h1>
<p>Some Text</p>
<p class="bold">Name: <input type="text" name="name" class="single" value="<?php echo set_value('name'); ?>"></p>
<p class="bold">Email: <input type="text" name="email" class="single" value="<?php echo set_value('email'); ?>"></p>
<p class="bold">And then some radio buttons</p>
<p> yes <input type="radio" name="registered" value="yes"> no <input type="radio" name="registered" value="no"></p>
<p class="bold">And a textarea...</p>
<textarea name="description" class="fill" value="<?php echo set_value('description'); ?>"></textarea>
<a href="#" onclick="show('two'); hide('one')" class="right big">next</a>
</div>
<div id="two" style="display:none;">
<h1>Another Heading...</h1>
<p class="bold">And some more textareas</p>
<textarea name="audience" class="fill"></textarea>
... There are four divs in total with further textarea fields ...
<p class="bold"><input type="submit" name="submit" value="submit" class="center"></p>
<a href="#" onclick="show('three'); hide('four')" class="left big">back</a>
</div>
<? echo form_close();?>
最后我的模型非常简单:
class contact_form extends CI_Model {
public function new_form($data) {
$query = $this->db->insert("contact", $data);
if ($query) {
return true;
} else return false;
}
}
表单处理没有任何错误,但数据在MySQL中只显示为0。如果我在任何时候尝试输出$_POST
的值,则会返回BOOL (false)
或$this->input->post('something')
;它返回NULL
。
您会注意到没有进行实际验证。最初我使用$this->form_validation->run()
并获得相同的结果。我想也许我在验证方面遇到了麻烦所以我把它剥离了,现在我很确定我的问题是我没有正确传递$_POST
个变量。
任何人都能解释为什么我这么努力失败吗?
答案 0 :(得分:0)
我现在已经解决了这个问题。
出于某种原因,<? echo form_open("form/validation");?>
正在实施GET
而不是POST
。用<form method="post" accept-charset="utf-8" action="form/validation"/>
替换该行解决了这个问题。
根据CodeIgniter documentation,默认情况下,form_open
应使用POST
- 我不知道为什么在我的情况下决定使用GET
。