2017-05-29 64 views
0

我是新來的PHP,我試圖創建一個註冊表單。我不知道爲什麼我的代碼沒有將新用戶添加到數據庫,它不會給任何錯誤消息只是進入白屏。我不知道它是否連接到數據庫,但我相信這是否會給我一個錯誤信息,對不對?我的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

提交變量存在於調用此代碼的窗體中?我認爲函數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他忘記在'$ query'之前添加'$ con,'' – Rtra

+0

如果他應該試試這個代碼,它會工作 – Rtra

1

有在腳本中一些問題。

  1. 你並沒有看到錯誤消息,是因爲mysqli_error()需要作爲參數的連接,這是$con在您的實例,並在"SELECT * FROM users WHERE email_user = $_POST[email]' AND passw_user = '$_POST[password]'")缺少一個單引號應該是"SELECT * FROM users WHERE email_user = '$_POST[email]' AND passw_user = '$_POST[password]'")
  2. 變量的作用域,你的職責function NewUser()function SignUp()內,他們無法訪問$con$db,有幾種解決方案:

    我。爲了使變量成爲GLOBAL,但不推薦這樣做,因爲在PHP中使用GLOBAL關鍵字通常不是一個好習慣。

    ii。通過$con以作爲參數,所以您的功能將變爲function NewUser($con),function SignUp($con)在這種情況下

    iii。使用類來解決這個問題。

3.對於你的查詢語句,它總是一個好主意,SELECT col1, col2正是您所需要的,而不是作爲SELECT *最佳實踐列。

4.檢查POST參數的空值以及對輸入參數進行一些清理以防止注入和不需要的標記/ javascripts也是一個好主意。

如果您有任何其他問題,請讓我知道。

相關問題