我正在重写我的登录脚本。这个练习的重点是让我的连接处理程序关闭页面,因为我被告知这个。我所说的就是这个。
var = mysqli_connect(x.x.x.x)
所以我已经把它变成了一个函数。
function openDB() {
include("/assets/configs/db_config.php");
$conn = mysqli_connect('x', 'x', 'x', 'x');
//$conn = mysqli_connect($config["host"] , $config["username"], $config["password"],$config["dbname"]);
// 1. Create a database connection
//$conn = mysqli_connect("x" , "x", "","x");
if (!$conn)
{
$this->error_msg = "connection error could not connect to the database:! ";
return false;
}
$this->conn = $conn;
return true;
}
但是,正如我所知,我已经在另一个问题中提到了这一点,我不会要求任何人特别回过头来看这个功能。基本上无论我尝试什么,我都陷入困境,因为mysqli_real_escape_string协议正在收到错误(对象而不是连接)
继续,我有一些其他函数包含mysqli_real_escape_string
用法,所以我想调整一个用于登录函数使用。这是一个有效的。它是一个更新功能。
function member_update($mid, $name, $address, $postcode, $photo)
{
$esc_mid = mysqli_real_escape_string($this->conn, $mid);
$esc_name = mysqli_real_escape_string($this->conn, $name);
$esc_address = mysqli_real_escape_string($this->conn, $address);
$esc_postcode = mysqli_real_escape_string($this->conn, $postcode);
$esc_photo = mysqli_real_escape_string($this->conn, $photo);
$sql = "UPDATE member SET
mid='{$esc_mid}',
name='{$esc_name}',
address='{$esc_address}',
postcode='{$esc_postcode}',
photo='{$esc_photo}'
WHERE mid='{$esc_mid}'";
$result = mysqli_query($this->conn, $sql);
if ($result) {
$numofrows = mysqli_affected_rows($this->conn);
echo("$esc_mid, {$esc_name}, $esc_address, {$esc_postcode}, $esc_photo"); /*see id*/
$numofrows = mysqli_affected_rows($this->conn);
return $numofrows;
}
else
$this->error_msg = "could not connect for some wierd reason";
return false ;
}
现在,它代表着,这就是我被困住的地方。我试图将上述功能修改为一个我可用于处理登录的功能。在这里。
function logcon($user, $password )
{
$esc_user = mysqli_real_escape_string($this->conn, $user);
$esc_password = mysqli_real_escape_string($this->conn,$password);
$sql = "select * all from users where username ='{$user}' AND password='{$password}'";
$result = mysqli_query($this->conn, $sql);
if ($result) {
$numofrows = mysqli_affected_rows($this->conn);
return $numofrows;
}
else
$this->error_msg = "could not connect for some wierd reason";
return false ;
}
据我所知,逻辑足够接近它应该有效。但它并没有。我在这段代码中被mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given
页面蜇了。 $row=mysqli_fetch_array($result, $sqL);
这是我的登录脚本(减去CSS和表格)
if(isset($_POST['submit'])){
$user=$_POST['user'];
$password=$_POST['password'];
//To ensure that none of the fields are blank when submitting the form if
if(isset($_POST['user']) && isset($_POST['password']))
{
$user = stripslashes($user);
$password = stripslashes($password);
$db1=new dbmember();
$db1->openDB();
$sql="SELECT * FROM users WHERE username='{$user}' AND password='{$password}'";
$result=$db1->logcon($user, $password);
$row=mysqli_fetch_array($result, $sqL);
if($row[0]==1)
{
session_start();
$_SESSION['user'] = $user;
$_SESSION['password'] = $password;
$_SESSION['loggedin'] = "true";
header("location:index.php");
}
else
{
print ('<div id="error">Acess denied, wrong username or password?</div>');
}
}
else
{
print ('<div id="error">Enter something!</div>');
}
}
?>
答案 0 :(得分:0)
在您的函数中
if ($result) {
$numofrows = mysqli_affected_rows($this->conn);
return $numofrows; << returns a number
} else {
$this->error_msg = "could not connect for some wierd reason";
return false ; << returns a boolean
}
返回数字或布尔值。
mysqli_fetch_array(result,resulttype)
需要一个mysqli_result对象(参见http://at1.php.net/manual/de/mysqli-result.fetch-array.php)。 除此之外,你的代码缺少大量的花括号。
此外,如果问题只发生在几行中,则不必上传这么多代码。
答案 1 :(得分:-1)
所以我很确定我的评论提供了答案:
$sql = "select * all from users where..
* all
???可能是由于那里的错误查询。它是函数logcon中的SQL
此外,您不返回mysqli结果集,但如果失败则返回计数或FALSE。如果你返回FALSE,你应该检查你给出的错误!
if(($result = $db1->logcon($user, $password)) !== FALSE)
{
// do stuff
}
else
{
//error handling
}
function logcon
应该包含类似
if ($result)
{
return $result;
}
如果您想使用结果。