0

我查看了其他一些关于类似主题的帖子,但我无法按照他们的指示进行操作。

基本上我的问题是这样的,我想在成功重置密码后重定向到我网站的主登录页面。

这是我到目前为止所拥有的:

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 框架。

4

4 回答 4

3

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

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

另一件事:您应该真正放弃使用函数(将来mysql_*会弃用)并使用or 。mysqli_*PDO

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

于 2012-04-30T18:54:49.683 回答
2

首先,我希望在使用它们访问数据库之前,我不需要深入了解您的输入内容。

我不知道 KISSMVC。但我知道 PHP 和浏览器-服务器交互是如何发生的。因此,我将从该格式处理您的问题。

我在这里看到两件事。一个是您希望在交易成功发生时向用户发出警报。这可以通过重定向动态完成,但这取决于您将它们发送到哪里。如果您将用户发送到您无法控制的位置(您的示例引用了 google.com),那么您将必须使用 javascript 和 ajax 传递您的警报(和您的输入)。这样做的原因是,如果您已经将一些输出发送到用户的浏览器,则标头重定向将不起作用。因此,您需要.js在代码中实现一些对执行代码并返回成功/失败标志的脚本进行 AJAX 调用,然后触发消息(成功/失败)。

如果您确实可以控制要重定向到的内容,并且不想触摸任何内容.js,则可以重定向到使用您创建的变量来保存成功/失败消息的中间页面,将其输出到浏览器并一个按钮,在此之后链接到您的下一页,并将数据附加到查询字符串中。所有这些都可以在 php/MySQL 中完成。

于 2012-04-30T19:02:35.757 回答
0

是的,只是摆脱echo它之前的声明。通话前您无法在屏幕上回显任何内容header

您可能还想添加一些错误处理,以便您确定它是成功的并切换到准备好的语句以避免 sql 注入。

于 2012-04-30T18:54:30.463 回答
0

输出缓冲

这里的其他人都说你不能在标题调用之前回显任何东西(包括空格)。但这是不正确的。例如,如果您在 php.ini 文件中使用输出缓冲来输出缓冲整个页面 - 那么您可以在脚本中的任何地方使用 header() (只要代码不手动刷新它)。http://php.net/manual/en/outcontrol.configuration.php

你想在 php.ini 中设置它

输出缓冲=开;

然后您可以在代码中的任何位置使用 header() 。请记住,在重定向后,使用 die() 或 exit() 来防止 PHP 页面在重定向后继续执行。

没有输出缓冲

您不得向浏览器打印任何内容,包括空格,否则标头已经发送,PHP 无法再对其进行修改。输出缓冲阻止了这种情况,因为整个生成的页面在脚本末尾一次性发送,这意味着标题可以在脚本中的任何位置自由更改。

附言

正如其他人所提到的,您的 SQL 容易受到SQL 注入的影响,您不应该再使用 mysql_* 而是切换到 pdo 或 mysqli_* 因为 mysql_* 已被弃用。

于 2012-11-23T12:40:17.290 回答