我遇到的错误:无论我尝试输入有效的用户名还是密码,它总是显示“抱歉,用户名已存在”。我的逻辑有问题吗,特别是这个代码块:
$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>
数据库表:学生
最佳答案
您是否正在尝试创建用户注册或用户身份验证脚本?我不认为您的实际目的已明确概述以帮助提供有效的解决方案。
“我是否尝试输入有效的用户名或密码”表示用户身份验证,而“if($stmt > 0){ #if There are 1 or more users with Enter username, Deny.”表示用户注册。
编辑:根据您更新的要求,用户身份验证可能会变得有点复杂,具体取决于您的部署的安全性。下面包含基于您的基本代码的示例代码。请注意,您可能需要找到一个预先构建的脚本并根据您的需要对其进行修改,因为这可能会更好地满足您的目的。
<?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;
?>
关于PHP 用户名逻辑不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6948798/