2017-05-29 11 views
0

私はPHPには新規ですし、登録フォームを作成しようとしています。なぜ自分のコードがデータベースに新しいユーザーを追加していないのか分かりませんが、エラーメッセージは表示されず、白い画面に変わります。私はそれがDBに接続しているかどうかは分かりませんが、そうでないとエラーメッセージが表示されます。私のPHPデータベースは自分のデータベースに追加されていません

これは私のPHPコードである:ここで

<?php 
    define('DB_HOST', 'localhost'); 
    define('DB_NAME', 'class_rate'); 
    define('DB_USER', 'root'); 
    define('DB_PASSWORD', 'password'); 

    $con = mysqli_connect(DB_HOST, DB_USER,DB_PASSWORD) or die("Failed to connect" . mysqli_error()); 

    $db = mysqli_select_db($con, DB_NAME) or die("Failed to connect" . mysqli_error()); 

    function NewUser(){ 

    $name = $_POST['nome']; 
    $email = $_POST['email']; 
    $password = $_POST['password']; 
    $query = "INSERT INTO users (nome_user,email_user,passw_user) VALUES ('$name','$email','$password')"; 
    $data = mysqli_query($query)or die(mysql_error()); 
    if($data) { 
     echo "YOUR REGISTRATION IS COMPLETED..."; 
    } 
    } 

function SignUp(){ 
    if (!empty($_POST['email'])) { 
     $query = mysqli_query("SELECT * FROM users WHERE email_user = $_POST[email]' AND passw_user = '$_POST[password]'") or die(mysqli_error()); 
    } 

    if(!$row = mysqli_fetch_array($query) or die(mysqli_error())){ 
     NewUser(); 
    } 
    else{ 
     echo "Email already registered!"; 
    } 
} 

if (isset($_POST['submit'])) { 
    SignUp(); 
} 


?> 
+0

submit変数はこのコードを呼び出すフォームに存在しますか? Signup関数内のクエリは失敗します。あなたは電子メールを渡して間違って渡します。 – iubema

+0

機能パラメータについて学ぶ – metalbox

+0

https://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php?rq=1 –

答えて

-2

あなたのスクリプト内のいくつかの問題があり、このコード

<?php 
    define('DB_HOST', 'localhost'); 
    define('DB_NAME', 'class_rate'); 
    define('DB_USER', 'root'); 
    define('DB_PASSWORD', 'password'); 

    $con = mysqli_connect(DB_HOST, DB_USER,DB_PASSWORD) or die("Failed to connect" . mysqli_error()); 

    $db = mysqli_select_db($con, DB_NAME) or die("Failed to connect" . mysqli_error()); 

    function NewUser(){ 
    global $con; 
    $name = $_POST['nome']; 
    $email = $_POST['email']; 
    $password = $_POST['password']; 
    $query = "INSERT INTO users (nome_user,email_user,passw_user) VALUES ('$name','$email','$password')"; 
    $data = mysqli_query($con, $query)or die(mysqli_error()); 
    if($data) { 
     echo "YOUR REGISTRATION IS COMPLETED..."; 
    } 
    } 

function SignUp(){ 
    global $con; 
    if (!empty($_POST['email'])) { 
     $query = mysqli_query($con, "SELECT * FROM users WHERE email_user = $_POST[email]' AND passw_user = '$_POST[password]'") or die(mysqli_error()); 
    } 

    if(!$row = mysqli_fetch_array($query) or die(mysqli_error())){ 
     NewUser(); 
    } 
    else{ 
     echo "Email already registered!"; 
    } 
} 

if (isset($_POST['submit'])) { 
    SignUp(); 
} 


?> 
+2

あなたは何を修正しましたか? –

+0

@JaredFarrish彼は '$ con'の前に' $ con 'を追加するのを忘れていました – Rtra

+0

このコードを試してみると、 – Rtra

1

を試しに行きます。

  1. あなたはエラーメッセージを参照してくださいいけないがmysqli_error()は、パラメータとして接続を必要とするため、それはあなたのインスタンスで$conだ、と"SELECT * FROM users WHERE email_user = $_POST[email]' AND passw_user = '$_POST[password]'")で1つの引用符が不足して"SELECT * FROM users WHERE email_user = '$_POST[email]' AND passw_user = '$_POST[password]'")でなければならないことです。

    I:

  2. 変数のスコープ、あなたの機能function NewUser()function SignUp()の内側に、彼らは$con$dbにアクセスすることができない、いくつかの解決策があります。変数をGLOBALにするには、PHPでGLOBALキーワードを使用するのが一般的ではないので、これはお勧めしません。

    ii。 $conをパラメータとして関数に渡すと、関数はfunction NewUser($con),function SignUp($con)、この場合は

    iiiとなります。この問題を解決するには、クラスを使用します。

3.Forクエリ文は、それは常にあなたが必要とする代わりに、ベストプラクティスとしてSELECT *だけの列SELECT col1, col2することをお勧めします。

4.注射や不要なタグ/ JavaScriptを防ぐために、POSTパラメータの空の値と入力パラメータのクリーンアップを確認することもお勧めします。

他に質問がある場合はお知らせください。

関連する問題