簡體   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