我有两个文件,一个是我的功能,另一个是我的登录脚本,两个脚本的代码如下。我有两个用户定义的函数,一个叫做user_exists($ username),另一个叫做sanitize($ data)。我想要的功能是验证数据库中有一个名为graham的用户名和密码,密码为12345,如果有的话,if语句应该打印一条错误,说明你没有激活你的帐户,但它没有,它只是打印错误消息数组()。此外,当我输入无效的用户名和密码时,它应该打印错误,说明找不到用户名,而是错误消息只打印array()。这是我从pre-mysqli php代码转换为mysqli的代码。
本质上这篇文章的真正含义是,有人可以查看我对mysqli的mysql代码的翻译,并帮我找到错误。
以下是我正在使用的2个函数,$ dbc变量是我的数据库连接:
<?php
function user_exists($username, $dbc){
$username = sanitize($username, $dbc);
$q = "SELECT COUNT(user_id) FROM users WHERE username='$username'";
$query = mysqli_query($dbc, $q) or trigger_error('<p>Query ' . mysqli_error($dbc) . '</p>');
if (mysqli_num_rows($query) == 1){
return true;
} else {
return false;
}
}
function user_active($username, $dbc){
$username = sanitize($username, $dbc);
$q = "SELECT COUNT(user_id) FROM users WHERE username='$username' AND active = 1";
$query = mysqli_query($dbc, $q) or trigger_error('<p>Query ' . mysqli_error($dbc) . '</p>');
if (mysqli_num_rows($query) == 1){
return true;
} else {
return false;
}
}
?>
以下是login.php脚本中的代码:
<?php
include ('core/init.php');
if (empty($_POST)== false){
$username = $_POST['username'];
$password = $_POST['password'];
if (empty($username)){
$errors[] = 'You need to enter a username';
}
if (empty($password)){
$errors[] = 'You need to enter a password';
} elseif (user_exists($username, $dbc) == false){
$errors[] = 'We couldn\'t find that username, have you registered?';
} elseif (user_active($username, $dbc) == false){
$errors[] = 'You haven\'t activated your account, click on the link in the email we sent you to activate your account';
}
print_r($errors);
}
?>
以下是转换为mysqli之前的函数代码。
<?php
function user_exists($username){
$username = sanitize($username);
return (mysql_result(mysql_query("SELECT COUNT('user_id') FROM users WHERE username = '$username'"), 0) == 1) ? true : false;
}
<?php
function user_active($username){
$username = sanitize($username);
return (mysql_result(mysql_query("SELECT COUNT('user_id') FROM users WHERE username = '$username'" AND active = 1"), 0) == 1) ? true : false;
}
在我的数据库中,列active = 1表示用户的帐户处于活动状态。