2011-08-04 50 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