无法在codeigniter中获取帖子表单提交值

时间:2011-07-22 05:28:59

标签: codeigniter

我尝试了一个简单的表单提交但是我无法使用$this->input->post以及$_POST[]方法获取控制器上的表单值。我的观点部分是

<html>
<head>
    <title> Feedback page</title>       
</head>
<body>

    <?php echo form_open('feedback/save'); ?>       
    <p>
        <label>name: </label>
        <?php echo form_input('name'); ?>

    </p>
    <p>
    <label>Email: </label>
        <?php echo form_input('email'); ?>
    </p>
    <p>
    <label>Feedback: </label>
        <?php echo form_textarea('feedback'); ?>
    </p>
    <p>
        <?php echo form_submit('submit','Submit'); ?>
    </p>

    <?php echo form_close(); ?>

</body> 

</html>

和控制器部分

<?php
class Feedback extends CI_Controller {

function __construct() {
    parent::__construct();      
    $this->load->model("MFeedback");

}
function index() {

    $this->load->view('home/feedback_view.php');
    //print "loaded";


}

function save() {
    print "called";     
    print_r($this->input); 
    $name = $this->input->post('uname');
    $email = $this->input->post('email');
    $feedback = $this->input->post('feedback');
    print $name . $email . $feedback;
    $this->index();
}

}
?>

我不确定这里出了什么问题,或者我需要查看配置设置。?

10 个答案:

答案 0 :(得分:6)

我发现了问题。它实际上是重写规则。确保你有重写规则,如

RewriteEngine On
RewriteRule ^(application) - [F,L] 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L]

RewriteEngine On RewriteRule ^(application) - [F,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule .* index.php/$0 [PT,L] 在codeigniter的根文件夹上。

答案 1 :(得分:4)

看看这个: http://codeigniter.com/user_guide/libraries/form_validation.html#validationrules

当我开始使用CI时,我遇到了类似的问题。您需要为表单设置至少一个验证规则,然后检查提交的表单是否符合该规则。然后,您可以像上面那样访问提交的表单数据。

自从我使用CI以来已经有一段时间了但这样的事情可以解决你的问题: (摘自上面的链接)

    $this->load->library('form_validation');

    $this->form_validation->set_rules('uname', 'Username', 'required');
    $this->form_validation->set_rules('email', 'Password', 'required');
    $this->form_validation->set_rules('feedback', 'Feedback', 'required');
    $this->form_validation->set_rules('email', 'Email', 'required');

    if ($this->form_validation->run() == FALSE)
    {
                    // Here is where you do stuff when the submitted form is invalid.
        $this->load->view('myform');
    }
    else
    {
                    // Here is where you do stuff when the submitted form is valid.
            print "called";     
            print_r($this->input); 
            $name = $this->input->post('uname');
            $email = $this->input->post('email');
            $feedback = $this->input->post('feedback');
            print $name . $email . $feedback;
            $this->index();

    }

希望能帮助你... :)。

答案 2 :(得分:3)

您的网址应与config->config.php->$config['base_url']相同 如果你的网址是

  

http://www.test.com

然后你的配置应该是

$config['base_url'] =  'http://www.test.com/';

答案 3 :(得分:1)

我遇到了与你相同的问题,因为过去半小时无法解决任何问题。我尝试了你的解决方案,它没有帮助。但你说得对,它与路由有关。

我还将其他变量传递给我的行为,如:

domain/controller/action/value1/value2

当我的表单提交数据时:

domain/index.php/controller/action/value1/value2
它解决了这个问题。我猜你是否在最后传递值后,变量不能按预期工作。我知道它应该起作用,我猜它也一样。认为正确设置.htaccess是个问题。

答案 4 :(得分:1)

感谢我解决我的问题的想法。我有同样的问题。我的代码在WAMP中工作得很好,但是当我搬到LAMP时,我遇到了各种以前从未遇到过的有线问题,并且没有得到任何形式的后期价值就是其中之一。

根据上述建议:

我使用了form_open(index.php/controller/method)代替form_open(controller/method),而且它立刻就可以了。

但是我删除了index.php,并且它也没有显示在地址栏中。正如我所说,这是有线的......

答案 5 :(得分:1)

使用form action='domain/index.php?/controller/function name/parameter1/parameter2'

例如,您的域名为abc.com,控制器为get,函数名称为value,要在函数中传递的参数为ab 然后只需按照以下方式编写表单操作。

<form action='http:/abc.com/index.php?/get/value/a/b' method='post' >
我以这种方式解决了我的问题。希望它能为你效劳。 谢谢

答案 6 :(得分:0)

首先,在您的视图中,您已将一个输入的名称指定为name,在您的控制器中,您正在寻找uname的帖子。

其次,我不记得CodeIgniter是否对$_POST执行相同操作,但它肯定销毁 $_GET数组。如果你想要一个所有帖子输入的关联数组,你可以这样称呼:

$this->input->post();

第三,在非常罕见的情况下,您的输入可能会被XSS Filtering阻止,您可以通过像这样调用它来阻止这种情况发生(仅用于检查目的,看看有什么不对,不要使用这在生产中)

$this->input->post(NULL, FALSE);

如果某些内容通常是错误的,这些调用将返回FALSE,您应该使用===运算符对此进行测试,因为它只匹配FALSE ==也匹配NULL

第四,您应该使用简单的html表单快速测试,看起来您正在使用表单助手构建表单,但使用简单的HTML表单进行快速测试绝不会受到伤害。

除此之外,您需要提供有关您的环境/配置/生成的html / etc的更多信息......以便我们了解。你真的没有给我们很多工作。

答案 7 :(得分:0)

好吧,我遇到了同样的问题,并且.htaccess的增加有助于解决我的问题。

<Limit GET POST>
order deny,allow
deny from all
allow from all
</Limit>
<Limit PUT DELETE>
order deny,allow
deny from all
</Limit>

答案 8 :(得分:0)

$data = array('id' => 'email',
 'name' => 'email',
 'class' => 'form-control');

echo form_input($data);

如果您使用数组来设置输入等,请快速提及..别忘了包含名称=&gt; &#39; your_desired_post_variable_name&#39;在你的数组中,因为这是我的错误,我只是给它一个id,并想知道为什么我的POST数组是空白的!不要这样做! ;)

答案 9 :(得分:0)

我在本地ubuntu上遇到了类似的问题。 htaccess已正确配置,但帖子内部未包含任何内容。 我的问题是apache没有启用mod rewrite,我通过运行以下命令对其进行了修复:

sudo a2enmod rewrite
sudo service apache2 restart

在那之后,我所有的帖子数据都陷入低谷。 希望对下一个有同样问题的人有所帮助