2011-08-04 49 views
0

錯誤我得到:無論我嘗試一個有效的用戶名或密碼,它總是說「對不起,用戶名已存在」。有毛病我的邏輯,特別是與此代碼塊:PHP邏輯的用戶名不工作

$q = $conn->query("SELECT uname FROM Student WHERE uname= $aRegUsr "); 
    $stmt = $conn->prepare($q); 
    $stmt->fetch($q); 
    if($stmt > 0){ #if there are 1 or more users with enter username, deny. 

dbcred.php

<?php 
$host = 'localhost'; 
$user = 'root'; 
$pass = ''; 
$db = 'databasename'; 

?> 

PHP:

<?php 
#Login Details 
require_once('dbcred.php'); 
$conn = new PDO("mysql:host=$host;dbname=$db", $user, $pass); 

$aRegUsr = $_POST['regduser']; 

#Check for Existing User 
$q = $conn->query("SELECT uname FROM Student WHERE uname= $aRegUsr "); 
$stmt = $conn->prepare($q); 
$stmt->fetch($q); 
if($stmt > 0){ #if find that username in use, deny ability to register, else{ALLOW} 
echo "Sorry, username already exists"; 
} 
else{ 
echo "Success"; 
} 

?> 

HTML

<form action="inc/check_regUsr.php" method="post" id="userLogon"> 
    <div class="field required"> 
     Username: <input type="text" name="regduser" tabindex="1" /><br /> 
     </div> 
     <div class="field required"> 
     Password: <input type="password" name="regdpass" tabindex="2" /><br /> 
     </div> 
     <input type="submit" name="submitUser" /> 
</form> 

DB表:Student img1

+1

「SELECT UNAME FROM學生WHERE UNAME = $ aRegUsr」 - 不,你會需要大約$ aRegUser單引號? SELECT uname FROM Student WHERE uname ='$ aRegUsr'例如? – Marvo

+0

$ stmt是一個對象。它總是大於0. – Endophage

回答

2

你想創建一個用戶註冊或用戶驗證腳本?我不相信你的實際目的是明確概括的,以幫助提供有效的解決方案。

「我是否嘗試使用有效的用戶名或密碼」表示用戶身份驗證,而「if($ stmt> 0){#如果有一個或多個用戶輸入用戶名,拒絕」。表示用戶註冊。

編輯:根據您的更新要求,根據部署的安全性,用戶認證可能會有點複雜。下面包含的是基於您的基本代碼的示例代碼。請注意,您可能希望找到一個預先構建的腳本並根據您的需求對其進行修改,因爲這可能會更好地爲您的目的服務。

<?php #Login Details 
require_once('dbcred.php'); 

#Variables 
$error = ''; 
$auth = 0; 
$aRegUsr = $_POST['regduser']; #Check for Existing User 
$aRegPass = $_POST['regdpass']; #Check for Existing User 

#DB stuff 
$conn = new PDO("mysql:host=$host;dbname=$db", $user, $pass); 
$sql = "SELECT uname,password FROM Student WHERE uname= $aRegUsr "; 

#Dataset stuff 
foreach($conn->query($sql) as $row){ 
    if($row['password'] != $aRegPass){ 
     $error = 'Invalid Password'; 
     $auth = 0; #If $auth = 0 then user is logged in 
    }else{ 
     $auth = 1; #If $auth = 1 then user is logged in 
    } 
} 
$conn = null; 
?> 
+0

用戶認證。這應該是一個登錄窗口,如果登錄有效,他們的「登錄」,否則,他們需要提醒回去。我打算爲此添加會話,也許是cookies – Jshee

+0

我如何編輯這個來做一些事情。請記住,我有一點點與noobie php – Jshee

+0

問題是,您當前的腳本只會試圖匹配指定的用戶名與表中的記錄。如果有匹配,則表示用戶名有效,下一步將驗證密碼。我編輯了我的答案以符合這個標準。 – RobB

0

您的代碼是不正確的。我假設您在if ($stmt > 0)中的邏輯是測試是否已有一個用戶存在該名稱。

使用這個代替 -

<?php 

#Check for Existing User 
$q = $conn->query("SELECT uname FROM Student WHERE uname= $aRegUsr "); 
$stmt = $conn->prepare($q); 
$rows = $stmt->fetchAll(); 
if ($rows > 1) { # The username already exists 
    #... rest of your code 
+0

這完全沒有什麼不同。 – Jshee