2013-01-17 46 views
0

我已经为我正在开发的应用上的用户创建了一个任意的登录系统,并且我正在使用mysqli从MySQL切换。不过,我有问题,因为无论您输入什么数据,它都会成功登录。显然这是错误的,我认为这与我的读取语句有关。下面是代码:mysqli bind_result和提取

$sid = /* arbitrary value */ 
$con = new mysqli($mysql_host,$mysql_user,$mysql_password,$mysql_database); 

$stmt = $con->prepare("SELECT uid, pwd FROM schools WHERE uid=?"); 

$stmt->bind_param("i", $sid); 
$stmt->execute(); 

$stmt->bind_result($schoolid, $password); 
$stmt->fetch(); 

$stmt->close(); 

有人知道是怎么回事,并能够描述它用简单的英语,以相对编码新手?

编辑:其余的代码是这样的检查系统。输入的用户ID是$sid,输入的和加密的密码是$cleanpwd

if ($sid == $schoolid and $cleanpwd == $password) { 
    header('Location: loginsuccess.php'); 
    } 

else { 
    header('Location: login.php?error=1'); } 
+0

“i”在哪里定义? – Madbreaks

+0

你有表格吗?哪个发送密码/用户名的数据?如果是这样,参考$ _POST ['密码']与$密码,如果匹配然后登录,否则重定向回主页 –

+0

@Madbreaks你是什么意思'我'?解释哪一行?因为我没有看到'我'? –

回答

0

看来,如果这是一个登录表单,你是首先获取数据,然后处理,如果它是正确的?或者你是否试图处理它是否正确(SQL中的用户名和密码组合)?因为从这里开始,您只需放入一个用户标识并获取用户标识和密码,而不检查输入的密码是否与该用户标识关联的数据库密码匹配。

如果你想看看在SQL的用户名和密码匹配,你应该试试这个:

$stmt = $con->prepare("SELECT uid, pwd FROM schools WHERE uid=? AND pass=?"); 
$stmt->bind_param("is", $sid,$form_password); 
$stmt->execute(); 

否则,你需要检查,如果数据以后相匹配。

if($_POST['form_pass'] == $password){ 
//log the user in 
}