PHPとMySQLでユーザー登録とログインを設定しようとしています。私はそれがうまくいかなければならないように思えますが、実際にRegisterボタンをクリックして空白のページ以外のものを手に入れようとしています。 db.phpファイルの資格情報を変更するとエラーが発生するため、データベースが正常に接続されていることがわかります。私はPHPのエラーを表示しようとしたが、役に立たない、まだ空白のページ!サブミット後に空白のページが表示されるユーザー登録フォーム
次のコードには、問題を引き起こす可能性のあるものがありますか?登録が成功したかどうかにかかわらずフォームを表示するエラー処理コードがありますが、それは空白でしか表示されません。
<html>
<head>
<title>Registration</title>
<link rel="stylesheet" href="css/style.css" />
</head>
<body>
<?php
require('db.php');
if (isset($_REQUEST['username'])) // If form submitted, insert values into the database.
{
$username = stripslashes($_REQUEST['username']); // removes backslashes
$username = mysqli_real_escape_string($con,$username); //escapes special characters in a string
$email = stripslashes($_REQUEST['email']);
$email = mysqli_real_escape_string($con,$email);
$password = stripslashes($_REQUEST['password']);
$password = mysqli_real_escape_string($con,$password);
$query = "INSERT INTO users (username, password, email) VALUES ('$username', '".md5($password)."', '$email')";
$result = mysqli_query($con,$query);
echo $result;
if($result) {
echo "<div class='form'><h3>You are registered successfully.</h3><br>Click here to <a href='login.php'>Login</a></div>";
}
} else {
?>
<div class="form">
<h1>Registration</h1>
<form name="registration" action="" method="post">
<input type="text" name="username" placeholder="Username" required />
<input type="email" name="email" placeholder="Email" required />
<input type="password" name="password" placeholder="Password" required />
<input type="submit" name="submit" value="Register" />
</form>
</div>
<?php } ?>
</body>
a)の文字列エスケープは完全にSQLインジェクションからあなたを保護しません - **パラメータ化された文を使用** b)の使用'password_hash()'と 'password_verify()'を使って) 'var_dump($ result)'を試してください - 'echo'は何も印刷しませんfalse –
'ini_set( 'display_errors'、1)を追加します。 ini_set( 'log_errors'、1); error_reporting(E_ALL); mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 'をスクリプトの先頭に追加します。これにより、 'mysqli_'エラーは、あなたが見逃したり無視したりすることができないように、例外を生成するための に強制されます。 – RiggsFolly
これは、文字通りこのようなことをするための私の最初の一見です。ベストプラクティスを適用する前にセキュリティ保護されていないバージョンが動作することを期待していました。しかし、私もそれを得るために苦労しています。 – LegendEater