我尝试了一个简单的表单提交但是我无法使用$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();
}
}
?>
我不确定这里出了什么问题,或者我需要查看配置设置。?
答案 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']
相同
如果你的网址是
然后你的配置应该是
$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
,要在函数中传递的参数为a
和b
然后只需按照以下方式编写表单操作。
<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
在那之后,我所有的帖子数据都陷入低谷。 希望对下一个有同样问题的人有所帮助