如何正确地将视图中的后变量传递给CodeIgniter中的控制器?

时间:2014-01-29 14:23:02

标签: php mysql forms codeigniter post

近一年来我没有使用过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个变量。

任何人都能解释为什么我这么努力失败吗?

1 个答案:

答案 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