[英]PHP redirect within a function call
我看过其他一些关于类似主题的文章,但我无法按照他们的指示进行。
基本上我的问题是这样,在成功重置密码后,我想重定向到我网站的主登录页面。
这是我到目前为止的内容:
if (isset($_POST['Resetpw'])) {
if ($query == $_GET['token'] & $_POST['password'] == $_POST['confirmed_password']) {
$passwordTest = $_POST['password'];
$result = mysql_query("SELECT `tempTicket` FROM users WHERE `username` = '" . $_POST['username'] . "'limit 1;");
$query = mysql_fetch_array($result);
mysql_query("UPDATE users SET `tempPass` = '$passwordTest' WHERE `username` = '" . $_POST['username'] . "' ");
echo '<div class="success">Password successfully changed!</div> ';
//header("Location: www.google.com");
//exit;
这一切都在一个函数中,注释掉的部分是我要重定向到我的网页的地方。
因此,要总结一下,我可以在函数完成后强制将函数重定向到起始页。 如果重要的话,我正在为此项目使用KISSMVC框架。
首先,我希望在与输入一起访问数据库之前,无需深入清理输入内容。
我不知道KISSMVC。 但是我知道PHP和浏览器与服务器之间的交互是如何发生的。 因此,我将以这种格式处理您的问题。
我在这里看到两件事。 一种是您希望在交易成功发生时向用户发出警报。 可以通过重定向动态完成此操作,但这取决于您将它们发送到何处。 如果您将用户发送到您无法控制的位置(您引用的示例google.com),则您将不得不使用javascript和ajax来发送警报(以及您的输入)。 这样做的原因是,如果您已经将某些输出发送到用户的浏览器,则标题重定向将不起作用。 因此,您将需要在代码中实现一些.js
,以对执行您的代码的脚本进行AJAX调用,并返回成功/失败标志,然后触发消息(成功/失败)。
如果您确实可以控制要重定向到的内容,并且不想触摸任何.js
,则可以重定向到使用您创建的变量来保存成功/失败消息的中间页,然后将其输出到浏览器,然后是一个链接到您的下一页的按钮,并将数据附加到查询字符串中。 所有这些都可以在php / MySQL中完成。
是的,只需在它之前删除echo
语句即可。 在header
调用之前,您无法在屏幕上显示任何内容。
您可能还想添加一些错误处理,以便您确实确定它已成功,并切换到准备好的语句以避免sql注入。
输出缓冲
这里的其他所有人都说您不能在标头调用之前回显任何内容(包括空格)。 但这是不正确的。 例如,如果您在php.ini文件中使用输出缓冲来输出整个页面的缓冲区-那么您可以在脚本中随意使用header(),只要代码不手动刷新它即可。 http://php.net/manual/en/outcontrol.configuration.php
您想在php.ini中进行设置
output_buffering =开;
然后,您可以在代码中的任何位置使用header()。 只要记住,在重定向之后,可以使用die()或exit()来防止PHP页面在重定向后继续执行。
没有输出缓冲
您不得在浏览器中打印任何内容(包括空格),否则标头已发送,无法再由PHP修改。 输出缓冲停止了此操作,因为在脚本末尾一次性发送了整个生成的页面,这意味着可以在脚本中的任何位置随意更改标头。
PS
就像其他人提到的那样,您的SQL容易受到SQL注入的攻击,您不应该再使用mysql_ *,而应使用mysql_ *,而改用pdo或mysqli_ *。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.