2017-02-21 5 views
0

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> 

+1

a)の文字列エスケープは完全にSQLインジェクションからあなたを保護しません - **パラメータ化された文を使用** b)の使用'password_hash()'と 'password_verify()'を使って) 'var_dump($ result)'を試してください - 'echo'は何も印刷しませんfalse –

+0

'ini_set( 'display_errors'、1)を追加します。 ini_set( 'log_errors'、1); error_reporting(E_ALL); mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 'をスクリプトの先頭に追加します。これにより、 'mysqli_'エラーは、あなたが見逃したり無視したりすることができないように、例外を生成するための に強制されます。 – RiggsFolly

+0

これは、文字通りこのようなことをするための私の最初の一見です。ベストプラクティスを適用する前にセキュリティ保護されていないバージョンが動作することを期待していました。しかし、私もそれを得るために苦労しています。 – LegendEater

答えて

0

RiggsFollyによって私に与えられたいくつかのエラー報告のおかげで、私は、電子メールアドレスの列名が間違っていたことを確認するために管理。これを修正して私の問題を解決しました。

ハンディチップ。ありがとうございました。

0

これは間違っています。

if (isset($_REQUEST['username'])) 

フォームを提出しているとREQUEST変数にフォームの名前があるはずです。代わりにそれながら

はする必要がありますこれを行う

if (isset($_REQUEST['registration'])) 

それとも

if (isset($_POST['submit'])) 
{ 
    $username = stripslashes($_POST['username']); 

    $email = stripslashes($_POST['email']); 

    $password = stripslashes($_POST['password']); 
+0

それは私のやり方もあります。あなたの方法に利益がありますか? – LegendEater

+0

はい、実際にあなたは 'isset($ _ POST ['submit'])'これでどのフォームが送信されたのかを知ることができます!フォームが正しく提出されるようにします。 –

関連する問題