Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP登录表单不会使用正确的凭据登录用户_Php_Mysql_Login_Web_Phpmyadmin - Fatal编程技术网

PHP登录表单不会使用正确的凭据登录用户

PHP登录表单不会使用正确的凭据登录用户,php,mysql,login,web,phpmyadmin,Php,Mysql,Login,Web,Phpmyadmin,我有一个php表单,当用户提交不正确的凭据时,会收到相应的错误消息,但当使用正确的凭据时,不会收到登录成功消息,只是收到相同的错误凭据消息。我已经尝试了哈希密码和没有运气。这是我的登录功能代码: function login($username, $password) { $host = 'localhost'; $user = 'jamaixan_bobsled'; $pass = 'v67fvg7gk_&g'; $db = 'db_for_site_67'; mysql_conne

我有一个php表单,当用户提交不正确的凭据时,会收到相应的错误消息,但当使用正确的凭据时,不会收到登录成功消息,只是收到相同的错误凭据消息。我已经尝试了哈希密码和没有运气。这是我的登录功能代码:

function login($username, $password) {

$host = 'localhost';
$user = 'jamaixan_bobsled';
$pass = 'v67fvg7gk_&g';
$db = 'db_for_site_67';
mysql_connect($host, $user, $pass);
mysql_select_db($db);
$connected = mysql_select_db($db);

$user_id = user_id_from_username ($username);
$password = md5($password);

return(mysql_result(mysql_query("SELECT COUNT(`id_user`) FROM `table_of_users` WHERE 

`email_user` = `$username` AND `password_user` = `$password`") , 0) == 1) ? $user_id : `false`;
    }

您不应该将用户名和密码值放在反勾中,而应该将它们放在引号中。您甚至在backticks中放置了
false
。这样做:

$result = mysql_query("SELECT COUNT(`id_user`) FROM `table_of_users` WHERE 
            `email_user` = '$username'  AND `password_user` = '$password'");

return  (mysql_num_rows($result)>0) ? $user_id : false;

我建议您使用PDO,这是一种处理DB请求的更安全的方法。mysql_*函数已弃用


使用mysqli_*或pdo。。。mysql已被弃用

function login($username, $password) 
{
    $cn = mysqli_connect('localhost', 'jamaixan_bobsled', 'v67fvg7gk_&g', 'db_for_site_67') or die('Connection error!');

    $SQL = "SELECT COUNT(id_user) FROM table_of_users WHERE email_user = '%s' AND password_user = '%s'";

    $Query = sprintf($SQL, mysqli_real_escape_string($username), md5($password));

    $Result = mysqli_query($cn, $Query) or die( mysqli_error($cn) );

    $Rows = mysqli_fetch_array($Result);

    return ( isset($Rows[0]) && ($Rows[0] > 0) );
}

仍然没有登录成功。我只是在我的index.php页面中调用这个函数,所以不要这样做,这一定是登录函数的问题。看看更新plzYeah Im,几年前的一个教程,这就是我使用MYSQL的原因。但是,尝试了您建议的方法,但仍然没有成功。不确定问题出在哪里,因为我只是在index.php页面中调用登录函数。为什么
$username
$password
在backticks中?什么是backticks?我只是分离了连接函数,仅此而已。我不明白你的意思哦…对不起。。。遗漏了…将更正它..thx它们必须在引号中:(quote=
)变量
$user\u id
已定义但未使用。此外,该查询复制了OP的SQL注入漏洞-我认为这些漏洞不应在未修复的情况下被逐字复制。在每个
mysql
函数后放置
if
语句,以确保它返回您期望的值。我可以看到四个没有检查返回值的地方。此外,此代码中存在SQL注入漏洞,因此不要将其激活。
function connectdb()
{
    $dbhost='localhost';
    $dbname='db_for_site_67';
    $dbuser="jamaixan_bobsled";
    $pwd="v67fvg7gk_&g";

    try
    {
        $db=mysql_connect($dbhost,$dbuser,$pwd);
        if($db)
        {
            try
            {
                $dbselect=mysql_select_db($dbname,$db); 
                if(!$dbselect)
                {
                    throw new Exception("Unable to select database: $dbname with error ". mysql_error());
                }
            }
            catch(Exception $e)
            {
                echo $e->getMessage();
            }  
        }
        else
        {
            throw new Exception("Unable to connect to database with error ". mysql_error());
        }
    }
    catch(Exception $e)
    {
        echo $e->getMessage();
    }
    return $db;
}


function login($username, $password) {

$user_id = user_id_from_username ($username);
$password = md5($password);
$conn1=connectdb();
$sql1="SELECT COUNT(`id_user`) FROM `table_of_users` WHERE `email_user` = $username AND `password_user` = $password";
$res1=mysql_query($sql1);
$res1=mysql_fetch_array($res1);
$res1=$res1['COUNT(`id_user`)'];
if($res1==1){
    echo "login sucessful";
} else {
    echo "login Failed";
}

    }