编写php函数

时间:2009-05-02 04:30:04

标签: php

我是php新手并尝试编写登录功能。有点卡住并得到错误。 在这里我的功能:

<?php

if(!defined('_VALID_ACCESS')) die('direct access is not allowed.');
include('includes/connect.php'); 

function login($username, $password)
{
    $username = trim($username);
    $password = trim($password);
    echo $username;
    echo $password;
    $login_sql  = "SELECT * FROM user WHERE user = '".($username)."' 
    AND pass = '".(md5($password))."'";
    $login_result = $mysqli->query($login_sql) or die(mysqli_error());
    $row=$login_result->fetch_row();
    if($row[0] == 1)
    {
        return true;
    }
    else
    {
        return false;
    }
}
?>

connect.php

<?php
$db_name = "coolmates";
$db_server = "localhost";
$db_user = "justron";
$db_pass = "Justron9004";

$mysqli = new MySQLi($db_server, $db_user, $db_pass, $db_name) or die(mysqli_error());

?>

注意:未定义的变量:第14行的.. \ login.php中的mysqli

致命错误:在第14行的.. \ login.php中的非对象上调用成员函数query()

帮帮我。

2 个答案:

答案 0 :(得分:4)

您缺少全局标识符。即:

function login($username, $password)
{
    global $mysqli;
    $username = trim($username);
    $password = trim($password);
    echo $username;
    echo $password;
    $login_sql  = "SELECT * FROM user WHERE user = '".($username)."' 
    AND pass = '".(md5($password))."'";
    $login_result = $mysqli->query($login_sql) or die(mysqli_error());
    $row=$login_result->fetch_row();
    if($row[0] == 1)
    {
        return true;
    }
    else
    {
        return false;
    }
}

我想补充一点:不要像那样构造SQL,特别是在使用mysqli时。使用绑定参数。这样做:

$login_result = $mysqli->query("SELECT COUNT(1) result FROM user WHERE user = ? AND pass = ?");
$login_result->bind_param("ss", $username, md5($password));
$login_result->execute();
$login_result->bind_result($count);
$login_result->fetch();
if ($count == 1) {
  // success
} else {
  // failure
}

答案 1 :(得分:4)

问题是“包括”默默地死了。这是PHP的一个很好的功能,包括不会告诉你什么时候不成功。

将“include”替换为“require”,以便在找不到文件时致命地死亡。

另外,请阅读SQL注入和XSS安全 NOW 。您的SQL非常不安全,尝试使用用户名设置登录(字面意思,包括引号)

' or true or '' = ' 

将立即让潜在的攻击者生活变得更轻松。

select 'hello' = '' or true or '' = '' and 'world' = '1';
你知道

返回“true”。