我正在 CodeIgniter 中开发注册页面。 问题是,我的帖子数据没有通过。以下代码总是产生“失败”:
class Signup extends CI_Controller {
function index()
{
if ($this->input->post())
{
echo 'success';
}
else
{
echo 'fail';
echo form_open('signup');
echo form_input('username', 'Username');
echo form_input('email_address', 'Email address');
echo form_submit('submit', 'Create Acccount');
echo form_close();
}
}
}
可能是什么问题?
更有趣的是,在我的本地主机上,表单工作得很好。失败时是在远程服务器上。
更新 1: 根据要求,这是服务器输出的内容:(我隐藏了 url,我处于保密状态)
<form accept-charset="utf-8" method="post" action="http://www.url.com/signup">
<input type="text" value="Username" name="username">
<input type="text" value="Email address" name="email_address">
<input type="submit" value="Create Account" name="submit">
</form>
更新 2: 我看到本地主机和远程服务器之间的另一个行为差异:提交表单后刷新(cmd R 或 F5)页面时,在本地主机上我的浏览器询问我再次发送表格。远程服务器上的同一页面不会从浏览器调用该问题,因此看起来像是某些重定向或 url 问题导致了问题?
更新 3: 似乎在远程服务器上,用户被 301 重定向。(永久移动)我仍然不知道这个重定向是从哪里来的。重定向有效地杀死了后数据,因此它解释了为什么 post() 返回 false。
那么,有人知道我为什么被 301 吗?
更新 4: 通过将我的 base_url 设置为 http://www.url.com,我在 CodeIgniter 中被重定向了代替 http://url.com
改了之后,问题解决了! :)
最佳答案
问题可能是由来自远程服务器的 301 重定向(位置 HTTP header 指令)引起的。如果您使用 Firefox,您可以使用插件 TamperData 来检查这一点。当然,您也可以只查看 http://www.url.com/signup
在请求页面时是否被重定向。
如果 HTTP header Location
是 http://url.com/signup
(没有 www
),那么最简单的解决方案是使用 http://url.com/signup
进行表单操作。请注意,如果表单在同一台服务器上,您也可以省略服务器地址。您可以改用 /signup
。
关于php - 由于不需要的 301,$this->input->post() 总是返回 FALSE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6007928/