2015-04-20 133 views
0

我想爲類的項目測試一個簡單的用戶帳戶註冊頁面,並且我正在嘗試創建一個檢查,通知用戶他們的電子郵件是否已經在數據庫中,因此不會再添加到它。這是我的PHP代碼。如何檢查用戶是否已經存在於SQL數據庫中?

<?php 
$collegeid = mysql_real_escape_string('1'); 
$email = mysql_real_escape_string('[email protected]'); 
$password = mysql_real_escape_string(md5('test1')); 
$name = mysql_real_escape_string('Test Test'); 
$bday = mysql_real_escape_string('1900-01-01'); 
$class = mysql_real_escape_string('Freshman'); 
//echo "<p>Test</p>"; 
$servername = "localhost"; 
$username = redacted; 
$serverpassword = redacted; 
$dbname = redacted; 

$conn = new mysqli($servername, $username, $serverpassword, $dbname); 

if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

$checkquery = "SELECT * FROM Student WHERE Email = '$email'"; 
$insertquery = "INSERT INTO Student (CollegeID, Name, Birthday, Email, Classification, Password) VALUES ('$collegeid', '$name', '$bday', '$email', '$class', '$password')"; 

if (mysql_num_rows($conn->query($checkquery)) > 0) 
{ 
    echo "Error: Email already in use"; 
} 

else 
{ 
    $conn->query($insertquery); 
    echo "Account Created."; 
} 

?> 

但是,無論用戶是否在數據庫中,它總是會告訴我帳號已創建。

+0

確定查詢成功,你通常會檢查爲好。 – adeneo

+0

請[停止使用'mysql_ *'函數](http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php)。他們不再被維護,並[正式棄用](https://wiki.php.net/rfc/mysql_deprecation)。瞭解[準備的陳述](http://en.wikipedia.org/wiki/Prepared_statement),並使用[PDO](http://jayblanchard.net/demystifying_php_pdo.html)。 –

+0

你的代碼是怎麼回事?你用mysql_設置的轉義字符串,使用mysql_num_rows函數,但使用mysqli?它到處都是。使用mysqli準備的語句和適當的mysqli函數。 – Devon

回答

4

你在混合mysql和mysqli函數。你不應該使用mysql函數,因爲它們被棄用,你似乎幾乎所有的東西都使用mysqli,除了轉義你的值和檢查找到的行數。

該問題是由您使用mysql_real_escape_string引起的。如果找不到mysql_*數據庫連接,則返回false,它與空字符串等效,因此您正在檢查數據庫中的空值,並且每次沒有找到該值時,都會添加一個新行。

爲了防止在mysqli上進行sql注入,您應該切換到準備語句而不是使用mysqli_real_escape_string

編輯:這也是mysql_num_rows是返回一個錯誤的情況下,假的... ...

+1

好的答案 - 我可以補充一下:考慮爲電子郵件實現一個唯一的密鑰,如果您只希望該值在表中存在一次 - http://www.w3schools.com/sql/sql_unique.asp(無論這是主鍵或不將它設置爲唯一的將在這種情況下有用) –

+0

@MattBarber這將是一個有用的補充。如果錯誤得到正確處理,當然。 – jeroen

相關問題