【问题标题】:Why "Undefined variable" error?为什么“未定义的变量”错误?
【发布时间】:2015-02-24 10:11:06
【问题描述】:

我正在自学 PHP。我正在使用 Slim 框架Medoo 并创建登录页面,执行登录页面时没有错误。但是当调用“call_query”函数时出现错误说:

未定义变量:数据库在 C:\xampp\htdocs\class\blog\pages\login.php 在第 8 行

致命错误:在非对象上调用成员函数 select() C:\xampp\htdocs\class\blog\pages\login.php 在第 8 行

在代码中,我创建了一个对象$database,然后在其上使用select 方法。

<?php
require_once 'medoo.php';
$database = new medoo();
session_start();
$login_error = $br = null;

function call_query(){
    $data = $database->select('user', 'user_name', [
        'user_name'=>$_POST['u_name'],
        'password'=>$_POST['pass']
        ]);
    if (count($data) == 1) {
        header("location : localhost/class/blog");
    }else{
        $login_error = "Wrong Username or Password";
        $br = "<br><br>";
    }
}

if ($_SERVER['REQUEST_METHOD'] == 'POST' && $_POST['submit'] == 'submit'){
    if (isset($_POST['u_name']) && isset($_POST['pass']) && !empty($_POST['u_name']) && !empty($_POST['pass'])) {
        if (isset($_SESSION['username']) && isset($_SESSION['password'])) {
            if ($_SESSION['username'] == $_POST['u_name'] && $_SESSION['password'] == $_POST['pass']) {
                header("location : localhost/class/blog");
            }else{
                call_query();
            }
        }else{
            call_query();
        }
    }else{
        $login_error = "Enter both Username and Password to login.";
        $br = "<br><br>";
    }
}

echo '<form action = "pages/login.php" method = "post">
        <label>Username : </label><input type ="text" name ="u_name"><br><br>
        <label>Password : </label><input type = "password" name = "pass"><br><br>
        '.$login_error.$br.'
        <input type ="submit" name = "submit" value = "submit">
     </form>';
?>

【问题讨论】:

  • 提及第 8 行中的哪一行
  • 也许 $database 它在 call_query() 函数中不可用。检查@jeroen 链接。
  • 将 $database 设为全局变量。我认为它会工作
  • 第 8 行是 call_query function() 中的 ($data = $database->select('user', 'user_name', [)]

标签: php slim medoo


【解决方案1】:

M$database 作为全局变量起作用。 谢谢 @lmarcelocc、@jeroen、@Md。萨哈达·侯赛因。

现在的代码是:

<?php
require_once 'medoo.php';
$database = new medoo();
session_start();
$login_error = $br = null;

function call_query($username, $password){
    global $database, $login_error, $br;
    $data = $database->select('user', 'user_name', ['user_name'=>$username, 'password' => $password]);
    if (!empty($data)) {
        print_r($data);
        $_SESSION['username'] = $username;
        $_SESSION['password'] = $password;
        header("location: localhost/class/blog");
    }
}

if ($_SERVER['REQUEST_METHOD'] == 'POST' && $_POST['submit'] == 'submit'){
    if (isset($_POST['u_name']) && isset($_POST['pass']) && !empty($_POST['u_name']) && !empty($_POST['pass'])) {
        if (isset($_SESSION['username']) && isset($_SESSION['password'])) {
            if ($_SESSION['username'] == $_POST['u_name'] && $_SESSION['password'] == $_POST['pass']) {
                $_SESSION['username'] = $_POST['u_name'];
                $_SESSION['password'] = $_POST['pass'];
                header("location: /");
                echo "logged by session";
            }else{
                call_query($_POST['u_name'], $_POST['pass']);
                $login_error = "Invalid Username or Password.";
                $br = "<br><br>";
            }
        }else{
            call_query($_POST['u_name'], $_POST['pass']);
            $login_error = "Invalied Username or Password.";
            $br = "<br><br>";
        }
    }else{
        $login_error = "Enter both Username and Password to login.";
        $br = "<br><br>";
    }
}

echo '<form action = "pages/login.php" method = "post">
        <label>Username : </label><input type ="text" name ="u_name"><br><br>
        <label>Password : </label><input type = "password" name = "pass"><br><br>
        '.$login_error.$br.'
        <input type ="submit" name = "submit" value = "submit">
     </form>';
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 2021-12-04
    相关资源
    最近更新 更多