我只是制定這個答案爲了向你展示檢查重複和插入的基礎知識。
您應該最終在給定列上設置UNIQUE約束,並根據錯誤結果使用條件語句。
請查閱我的腳註以下關於安全。
旁註#1:如果您不想檢查電子郵件和用戶名是否存在,您可以刪除OR Username= '".$username."'
。
旁註#2: - 我不確定您的列名是不是混合大小寫,因此您可能需要做一些調整。
- 電子郵件或電子郵件 - 密碼或密碼 - 用戶名或用戶名
旁註#2: - 確保所有元素中保存的name屬性和形式確實使用POST方法。
先查詢,然後如果用戶/電子郵件不存在,請執行INSERT。
假設您已經建立了DB connection :(請參考腳註下的其他註釋,「建立數據庫連接」)。
if(isset($_POST['submit'])){
$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];
$query = "SELECT * FROM users
where email='".$email."'
OR Username= '".$username."'";
$result = mysql_query($query);
if(mysql_num_rows($result) > 0){
echo "A record already exists.";
exit;
}
else{
$insert = mysql_query("INSERT into users (email, Username, Password)
VALUES ('".$email."','".$username."', '".$password."')");
}
if($insert){
echo "Success";
}
else{
echo "There was an error " . mysql_error();
}
mysql_close();
} // brace for if(isset($_POST['submit']))
您還可以
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
$email = mysql_real_escape_string($_POST['email']);
更換
$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];
一些附加的安全,直到你開始使用預處理語句。
腳註:
關於安全。
不要使用舊的mysql_
API,也不應該以純文本形式存儲密碼。使用mysqli
with prepared statements或PDO with prepared statements。
對於密碼存儲,請使用CRYPT_BLOWFISH或PHP 5.5的password_hash()
函數。對於PHP < 5.5使用password_hash() compatibility pack
。
將錯誤報告添加到您的文件頂部將有助於查找錯誤。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
旁註:錯誤報告只應在分期完成,並且從不生產。
建立一個數據庫連接:
即從mysql_select_db()
手冊:
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die('Not connected : ' . mysql_error());
}
// make foo the current db
$db_selected = mysql_select_db('foo', $link);
if (!$db_selected) {
die ('Can\'t use foo : ' . mysql_error());
}
設置UNIQUE約束或使用'mysql_num_rows()'或'COUNT()'。另外,不要以純文本存儲密碼;危險。 –
首先使用select來檢查用戶名!然後嘗試插入它! –
唯一約束是唯一可接受的約束。 numrows/count是外生的,可能/會導致問題。 –