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;

これはすべて関数内にあります。コメントアウトされた部分は、Web ページにリダイレクトしたい場所です。

まとめとして、関数の終了後に関数を強制的に開始ページにリダイレクトすることはできますか? それが重要な場合、私はこのプロジェクトに KISMVC フレームワークを使用しています。

4

4 に答える 4

3

リダイレクトの前にエコーを削除する必要があります。

フルパスを使用すると、コメントアウトした内容が機能するはずですhttp://google.com

もう1つのこと:関数の使用を実際にやめて(将来mysql_*廃止される予定です)、またはのいずれかを使用する必要があります。mysqli_*PDO

さらに別のこと: あなたのアプリケーションはSQL インジェクションに対して脆弱です。

于 2012-04-30T18:54:49.683 に答える
2

まず、データベースにアクセスする前に入力をサニタイズすることについて深く掘り下げる必要がないことを願っています。

私は KISSMVC を知りません。しかし、PHP とブラウザーとサーバーの相互作用がどのように発生するかは認識しています。ですから、その形式からあなたの質問にアプローチします。

ここで 2 つのことがわかります。1 つは、トランザクションが正常に行われたときにユーザーにアラートを送信することです。これはリダイレクトを使用して動的に行うことができますが、送信先によって異なります。コントロールできない場所 (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で設定したい

output_buffering = オン;

そして、コードのどこでも header() を使用できます。リダイレクト後、die() または exit() を使用して、リダイレクト後に PHP ページが実行されないようにすることを覚えておいてください。

出力バッファリングなし

空白を含むものをブラウザに出力しないでください。そうしないと、ヘッダーがすでに送信されており、PHP で変更できなくなります。出力バッファリングは、生成されたページ全体がスクリプトの最後に一度に送信されるため、これを停止します。つまり、ヘッダーはスクリプト内のどこでも自由に変更できます。

PS

他の人が述べたように、SQL はSQL インジェクションに対して脆弱であり、mysql_* を使用するのではなく、代わりに mysql_* が廃止されたため、pdo または mysqli_* に切り替える必要があります。

于 2012-11-23T12:40:17.290 に答える