上下文请求地址无效错误

来源:2-4 后台登录的实现(二)

SuGi

2020-05-20 05:41:44

老师您好,请帮我看一下,我的在mysql中创建的库和表数据按照老师后来的方式测试都正常。

http://img.mukewang.com/climg/5ec4506a09232eca10540139.jpg

但是登录时出现了请求地址无效的错误。请帮我看下是什么原因呢?谢谢!!


http://img.mukewang.com/climg/5ec44d7109f7553915130220.jpg

http://img.mukewang.com/climg/5ec44d71096a650209480413.jpg

db.connect.php
<?php
function connect(){
    date_default_timezone_set('PRC');
    $config = require dirname(__FILE__).'/config.php';
    $mysqli = @mysqli_connect(
        $config['DB_HOST'].':'.$config['DB_POST'],
        $config['DB_USER'],
        $config['DB_PASS'],
        $config['DB_NAME']
    );
    if (!$mysqli){
        echo 'Could not connect: ' . iconv('gbk', 'utf-8', mysqli_connect_error());
    }else{
        echo 'Connect:Access ';
    }
    //or die('Connect Error:'.mysqli_connect_error().'-'.mysqli_connect_error());
    mysqli_set_charset($mysqli,$config['DB_CHARSET']);
    return $mysqli;
}

function queryOne($sql){
    $mysqli = connect();
    $result = mysqli_query($mysqli,$sql);
    $data = [];
    if($result && mysqli_num_rows($result) >0){
        $data = mysqli_fetch_assoc($result);
    }
    return $data;
}

function getDBPrefix(){
    $config = require dirname(__FILE__).'/config.php';
    return $config['DB_PREFIX'];
}

function execute($sql){
    $mysqli = connect();
    mysqli_query($mysqli,$sql);
    return mysqli_affected_rows($mysqli) > 0;
}
config.php
<?php
return[
    'DB_HOST' => '127.0.0.1',
    'DB_PORT' => '3306',
    'DB_USER' => 'root',
    'DB_PASS' => 'xxxx',
    'DB_NAME' => 'dbmall',
    'DB_PREFIX' => 'mall_',
    'DB_CHARSET' => 'utf8',
];
?>

tools.func.php
<?php
function setSession($key,$data,$prefix = ''){
    session_id() || @session_start();
    if(!empty($prefix)) {
        $_SESSION[$prefix][$key] = $data;
    }else{
        $_SESSION[$key] = $data;
    }
}

function getSession($key,$prefix = ''){
    session_id() || @session_start();
    if(!empty($prefix)){
        return isset($_SESSION[$prefix][$key]) ? $_SESSION[$prefix][$key] : [];
    }else{
        return isset($_SESSION[$key]) ? $_SESSION[$key] : [];
    }
}

function deleteSession($key,$prefix = ''){
    session_id() || @session_start();
    if(!empty($prefix)) {
        $_SESSION[$prefix][$key] = null;
    }else{
        $_SESSION[$key] = null;
    }
}

function setInfo($info){
    setSession('info',$info,'system');
}

function getInfo(){
    $info = getSession('info','system');
    deleteSession('info','system');
    return $info;
}

function hasInfo(){
    return !empty(getSession('info','system'));
}

login.php
<?php
require '../db.connect.php';
require '../tools.func.php';

if(!empty($_POST['adminuser'])){
    //POST
    $prefix = getDBPrefix();
    $adminuser = $_POST['adminuser'];
    $adminpsw = md5($_POST['adminpsw']);
    $sql = "SELECT id,adminuser FROM {$prefix}admin 
            WHERE adminuser = '$adminuser' 
            AND adminpsw = '$adminpsw'";
    $res = queryOne($sql);
    if($res){
        //no error
        //Session
        setSession('admin',
            ['adminuser' => $adminuser,'id' => $res['id']]
        );
        $login_at = date('Y-m-d H:i:s');
        $ip = $_SERVER['REMOTE_ADDR'] == '::1' ? '127.0.0.1' : $_SERVER['REMOTE_ADDR'];
        $login_ip = ip2long($ip);
        $sql = "UPDATE {$prefix}admin 
                SET login_at = '$login_at',login_ip = '$login_ip'
                WHERE  id='{$res['id']}";
        execute($sql);
        //jump to index.php
        header('location:index.php');
    }else{
        //error
        setInfo('Wrong username or password...');
    }
}
?>
其他的代码跟老师的一致。
写回答

1回答

SuGi

提问者

2020-05-20

自查已找到错误>_<

马虎大意将$mysqli中$config['DB_PORT']写错,之后尝试连接mysql出现mysqli_connect(): The server requested authentication method unknown to the的错误,查了一下发现是mysql8密码机制换成了cha2导致的。于是在命令行更改后一切正常...

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'xxxx';


0

0 学习 · 4928 问题

查看课程