私は、電子メールアドレスとパスワードを使用してログインする必要があるプロジェクトで作業しています。そうするためには、データベースにあるものと一致するかどうかを確認するために入力したパスワードがあるかどうかをテストする必要があります。私はpassword_verify()を使ってMySQLiクエリ(SELECT password FROM users WHERE email='$email_login'
)をコンパイルする方法でMySQLiクエリを取得しようとしています。 mysqliクエリを文字列として取得
<h1>Sign in</h1>
<form class="form" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="POST">
<input type="email" name="email_login" size="25" placeholder="Email address" required>
<br>
<br>
<input type="password" name="pass_login" placeholder="Password" required>
<br>
<br>
<input type="submit" name="login" value="Login">
</form>
すべてが2 password_verifyを除いて、それが必要として動作します。私はこのPHP/MySQLiをコードしています。フォームデータベースここ
--------------------------------------------------------------------
id | first_name | last_name | username | email | password |
1 John Doe john17 [email protected] (hashed)
との
$email_login = $_POST["email_login"];
$pass_login = $_POST["pass_login"];
if(isset($_POST["email_login"]) && isset($_POST["pass_login"])) {
$sql_query = mysqli_query($conn, "SELECT password FROM users WHERE email='$email_login'");
$pass_query = print_r($sql_query, 1);
echo $pass_query;
$pass_test= password_verify($pass_login, $pass_query);
$sql = mysqli_query($conn, "SELECT id FROM users WHERE email='$email_login' AND password='$pass_test' LIMIT 1");
$userCount = mysqli_num_rows($sql);
if($userCount == 1) {
while($row = mysqli_fetch_array($sql)) {
$id = row["id"];
}
$_SESSION["email_login"] = $email_login;
header("Location: index.php");
exit();
} else {
echo "It looks like you have an issue with your credentials.";
exit();
}
}
スキーマです()行。試してみて、間違っているかを把握するために、私がしますprint_r()を使用して文字列として$pass_test
変数を印刷し、この得た:
mysqli_result Object ([current_field] => 0 [field_count] => 1 [lengths] => [num_rows] => 1 [type] => 0)
私は形にmysqliのクエリの結果を得ることができ、安全な方法はありますがpassword_verify()を使ってテストできますか?
私はこのコードはオンラインチュートリアルの一部であると確信しています。私はすでに何かを見た気分がある。そして、それは非常に悪いチュートリアルだと言わざるを得ない。 –
'フェッチする '必要があります。これはSQLインジェクションに開放されています。 – chris85
@YourCommonSense実際、私はYouTubeでのチュートリアルを見ながらこれに取り組んできましたが、これは時代遅れです。私は、最新のphp/mysqliを使用している間、この時点でサンプルとして使用しています。 – dashd90e8