-1

電子メールとパスワードの認証を確認してからユーザー アカウントにリダイレクトする HTML ログイン フォームを作成しました。

私のPHPコードは次のとおりです。

 <?php  

 require('connect.php');//for connection to the database.


$email = $_POST['email'];
$password = $_POST['password'];

$query = "SELECT * FROM `account` WHERE pemail='$email' and password='$password'";

$result1 = mysql_query($query) or die(mysql_error());
$usercount = mysql_num_rows($result1);




if ($usercount == 1){
include 'myaccount.php';
}


else{

echo "Invalid Details.";
echo "<a href='login.php'>Back to Login</a>";
}

ここでinclude、ユーザー アカウントにリダイレクトしようとしましたが、正常に動作します。

私のインストラクターは、使用するのは間違っていると言っていますがinclude、別の方法で実装する必要があります。

includeユーザー アカウントへのリダイレクトに使用するのが間違っているのはなぜですか? 私はそれを検索しましたが、答えが見つかりませんでした。

どうか落胆しないでください...よろしくお願いします。

4

2 に答える 2

1

はい、あなたのインストラクターは正しいです。include()リダイレクト用ではなく、PHPコードを含めるためのものです。header()関数はそれを行うので、それを使用してください。の使用include() は機能しますが、それを使用する必要があるという意味ではありません。

を使用すべきではないのはなぜincludeですか?

  • include()別のファイルからコードを「含める」ための機能です。ファイルからコードをロードして実行しますが、リダイレクト専用に構築されているわけではありません。一方、 の唯一の目的はheader()生の HTTP ヘッダーを送信すること、つまりリダイレクトなどを実行することです。代わりにそれを使用してください。

  • リダイレクトに使用しているファイルに複数行のコードがある場合、リダイレクトinclude()を実行するたびに完全に実行されます。アプリケーションがリダイレクトを頻繁に使用する場合、これはパフォーマンスの低下を意味し、アプリケーションの遅延につながります。さらに、 を使用している場合は、不必要に数行のコードを実行することになりますinclude()。を使用するheader()と、この問題を回避できます。exit()(の直後に電話することによってheader()。)

コード内のその他の問題:

  • 関数を使用していmysql_*ます。このext/mysql拡張機能は非推奨であり、使用しないでください。代わりにMySQLiまたはPDOを使用してください。

  • ユーザー入力をやみくもにデータベース クエリに挿入しているため、SQL インジェクションに対して脆弱になっています。悪意のあるユーザーは、技術的に問題を引き起こしたり、データベースを完全に削除したりする可能性があります。これが起こらないようにするには、準備済みステートメントで PDO / MySQLi を使用してください。方法の詳細については、この質問を参照してください。

于 2014-04-27T12:37:56.480 に答える
0

これを試して

    if ($usercount == 1) {
        $redirect_url = "";//here goes your url where you want to redirect the user to
        header("Location: " . $redirect);
        exit();
    }

また、MySqliまたはPDO

于 2014-04-27T12:41:16.920 に答える