2012-12-07 39 views
1

我register.php一切工作正常,當您嘗試註冊它說,這是所有工作正常,但沒有出現在我的數據庫。難道我做錯了什麼?我註冊的PHP腳本心不是工作

<?php 
echo "<h1>Register:</h1>"; 
$submit = $_POST['submit']; 
//form data $fullname = strip_tags($_POST['fullname']); 
$username = strip_tags($_POST['username']); 
$password = strip_tags($_POST['password']); 
$repeatpassword = strip_tags($_POST['repeatpassword']); 
if ($submit) { 
    // check for existance 
    if ($fullname && $username && $password && $repeatpassword) { 
    if ($password == $repeatpassword) { 
     //check char length of username and fullname 
     if (strlen($username > 25) || strlen($fullname) > 25) { 
      echo "Length of username or fullname is too long! Max 25 characters for each!"; 
     } else { 
      //check password length 
      if (strlen($password) > 25 || strlen($password) < 6) { 
       echo "Password must be between 6 and 25 characters"; 
      } else { 
       //register the user! 
       //encrypt password 
       $password = ($password); 
       $repeatpassword = ($repeatpassword); 
       //open database 
       $connect = mysql_connect("localhost","user","password") 
        or die ("Couldn't Connect!"); 
       mysql_select_db("user_phplogin"); 
       //select database 
       $queryreg = mysql_query(" 
        INSERT INTO `user_phplogin`.`users` (`id`, `fullname`, `username`, `password`) VALUES (NULL,'$fullname','$username','$password') "); 
       die("You have been registered! <a href='login.html'> Return to login page</a>"); 
       echo "Success!!"; 
      } 
     } 
    } else 
     echo "Your passwords do not match!"; 
} else 
    echo "Please fill in <b>all</b> fields!"; 
} 
?> 
+4

請格式化代碼! –

+0

你能格式化你的代碼嗎,這太難閱讀了。 – piddl0r

+3

**警告**您的代碼易受SQL注入攻擊! –

回答

1

的第一個問題,我會指出的是,你正在使用已過時的mysql_xx()函數。您應該切換到mysqli_xx()函數或PDO庫。單靠這一點無法解決問題,但指出這一點很重要。

下一頁:數據衛生。您正在使用strip_tags()函數清理數據。這會阻止您的用戶發佈HTML代碼,但不足以使您的查詢免受SQL注入攻擊和其他問題的影響。您需要轉義數據以使其在SQL字符串中安全使用。使用您現有的代碼,您需要使用mysql_real_escape_string()來執行此操作。如果您遵循我的建議並切換到另一組SQL函數,則可以使用mysqli_real_escape_string()PDO::quote()。有關如何使用這些功能的更多信息,請參閱相關的PHP手冊頁。這對於修復非常重要。

第三點:錯誤處理。看到你的代碼的相關部分:

$queryreg = mysql_query(" 
       INSERT INTO `user_phplogin`.`users` (`id`, `fullname`, `username`, `password`) VALUES (NULL,'$fullname','$username','$password') "); 
die("You have been registered! <a href='login.html'> Return to login page</a>"); 
echo "Success!!"; 

在此代碼,您呼叫的查詢功能,但後來始終報告「您已註冊」的消息,不管是什麼查詢函數返回的。查詢函數可能失敗並拋出一個錯誤,這幾乎可以肯定發生了什麼,但是你沒有做任何事來檢查錯誤是什麼。

PHP提供了錯誤處理函數來幫助你做到這一點。您需要檢查$queryreg是否已填充,如果沒有,請報告解釋錯誤的消息。例如:

if(!$queryreg) { 
    die("Something went horribly wrong. SQL error message: ".mysql_error()); 
} 

mysql_error()或(在庫MySQLi或PDO庫等同的功能)的輸出將是準確的錯誤消息的MySQL輸出當查詢失敗。這應該足以幫助您調試問題,所以它對測試非常有用。然而,當你的代碼在生產時,你可能不應該打印這樣的消息給用戶,因爲(a)它很亂,(b)通過告訴他們你的查詢和你的數據結構給黑客提供了不必要的幫助。一般來說,最好記錄這樣的錯誤,以便讀取它們,但向用戶報告更一般的錯誤消息。

我希望幫助你的工作出了問題。

+0

謝謝@SDC我試過了,得到了以下結果:有些事情發生了可怕的錯誤。 SQL錯誤消息:INSERT命令拒絕用戶'用戶'@'localhost'表'用戶' –

+0

沒問題,這樣可以讓您很好地瞭解問題的性質。您在mySQL連接中使用的用戶無權在用戶表上執行插入命令。你需要去你的數據庫配置工具(phpMyAdmin,或者你用來設置數據庫的任何東西)並修復它。這是一個數據庫配置錯誤;不是你可以在PHP中修復的東西。 – SDC

+0

然而,我的其他觀點仍然相關 - 您仍然需要解決您的安全問題! – SDC

0

爲什麼要添加ID?在你的表中是「autoincrement」id列?

$queryreg = mysql_query("INSERT INTO `users` (`fullname`, `username`, `password`) VALUES ('$fullname','$username','$password') "); 

,你不執行

echo "Success"; 

因爲你用模具()之前和腳本將終止有