重新设计我的登录脚本功能.如何继续


Redesigning my login script function. How to proceed?

我正在重写登录脚本。这个练习的全部目的是让我的连接处理程序关闭页面,因为我已经被告知了这一点。我说的是这个。

var=mysqli_connect(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>');
        }
}
    ?>

在您的函数中

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)。除此之外,您的代码还缺少很多大括号。

此外,如果问题只出现在其中的几行中,则不必上传这么多代码。

所以我确信我的评论提供了答案:

$sql = "select * all from users where.. 

* all???可能是因为那里的查询不正确。它是函数logcon 中的SQL

此外,您不会返回mysqli结果集,但如果失败,则返回count或FALSE。如果您返回FALSE,您应该检查您返回的错误!

if(($result = $db1->logcon($user, $password)) !== FALSE) 
{
   // do stuff 
} 
else 
{ 
    //error handling 
}

function logcon应该包含类似的内容

if ($result) 
{
    return $result;
}

如果您希望使用结果。