繁体   English   中英

PHP在函数调用中重定向

[英]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框架。

您应该在重定向之前删除回显

如果您使用完整路径,则您注释掉的内容应该可以使用,例如: http://google.com : http://google.com

另一件事:你真的应该丢弃使用mysql_*函数(它会在被废弃以后 ),并使用两种mysqli_*PDO

还有一件事:您的应用程序容易受到SQL注入的攻击。

首先,我希望在与输入一起访问数据库之前,无需深入清理输入内容。

我不知道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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM