檢查接受的答案,如果你有一個simular問題。mysqli的註冊腳本,檢查用戶或電子郵件exsist
首先,我知道有這樣他們幾個simular問題,但非哪裏能幫助我。
我想檢查用戶名或電子郵件已經在數據庫中,我已經將它們設置爲數據庫中的唯一的,但希望這個,所以我可以顯示用戶名/電子郵件單獨的錯誤。
眼下試圖註冊,我已經花了幾個小時試圖通過自己弄明白的時候,它只是輸出一個白色的頁面..任何幫助,將不勝感激。
我周圍添加問題代碼我不能去工作的意見。
這是我的代碼:
<?php
// Include database connection and functions here.
include 'db_connect.php';
include 'functions.php';
// The hashed password from the form
$password = $_POST['p'];
// Create a random salt
$random_salt = hash('sha512', uniqid(mt_rand(1, mt_getrandmax()), true));
// Create salted password (Careful with the chilli)
$username = $_POST['username'];
$email = $_POST['email'];
//Start of problematic code
$check_stmt = $mysqli->prepare("SELECT * FROM members WHERE username=? OR email=?");
$check_stmt->bind_param('ss', $username, $email);
$check_stmt->execute();
$check_result = $check_stmt->get_result();
while ($row = $check_result->fetch_assoc()) {
if ($row->num_rows > 0)
{
if ($row['username'] > '')
{
header("Location: '..\..\..\?RegUserExsist=1'");
}
else if ($row['email'] > '')
{
header("Location: '..\..\..\?RegEmailExsist=1'");
}
}
//end of problematic code
else if(!filter_var($email, FILTER_VALIDATE_EMAIL))
{
header("Location: '..\..\..\?RegInvalidEmail=1'");
}
else if (empty($username))
{
header("Location: '..\..\..\?RegInvalidUser=1'");
}
else if (empty($password))
{
header("Location: '..\..\..\?RegInvalidPass=1'");
}
else
{
$password2 = hash('sha512', $password.$random_salt);
if ($insert_stmt = $mysqli->prepare("INSERT INTO members (username, email, password, salt) VALUES (?, ?, ?, ?)"))
{
$insert_stmt->bind_param('ssss', $username, $email, $password2, $random_salt);
// Execute the prepared query.
$insert_stmt->execute();
header("Location: '..\..\..\?success=1'");
}
else
{
header("Location: '..\..\..\?regfailed=1'");
}}}
?>
你需要比較實際的用戶名/電子郵件,而不僅僅是檢查行數。例如'選擇用戶名=? AS user_exists,email =? AS email_exists,* ...' –
???你檢查'num_rows> 0'_after_取得第一行?如果你沒有找到任何行,該怎麼辦?您還在查詢中使用電子郵件值調用'filter_var($ email,FILTER_VALIDATE_EMAIL)'_after_。我會首先檢查,並且只詢問數據庫,如果我有一個有效的電子郵件地址開始... –
你不需要在'$ check_stmt'而不是'$ row'上調用'num_rows'嗎? – andrewsi