变量$connection未定义.不可能,那里发生了什么


Variable $connection is undefined. Impossible, what is happening there?

目标: 我正在创建一个php登录脚本。

问题: 我似乎无法使我的包含识别$connection变量,即使它应该在connection.php中明确定义。因此,我的变量的值为none/NULL。

我尝试的: 我从mysql开始,但很快注意到这是错误的方法,并将我的代码转换为mysqli。我检查了所有$connection变量中的错别字。我确保路径是正确的。作为最后的手段,我做了谷歌搜索,但没有找到答案或任何有用的提示我的情况。

问题: 变量没有定义的原因是什么?

错误消息:

所有这些消息都与这个由于某种原因没有定义的变量相关:

Php注意:未定义变量:连接在C:'xampp'htdocs'aspie'Php'Core'Common.php第4行

Php警告:mysqli_real_escape_string()期望参数1为mysqli, null在C:'xampp'htdocs'aspie'Php'Core'Common.php第4行

Php注意:未定义的变量:连接在C:'xampp'htdocs'aspie'Php'Core'Functions'Members.php第4行

Php警告:mysqli_query()期望参数1为mysqli, null在C:'xampp'htdocs'aspie'Php'Core'Functions'Members.php第4行

Php警告:mysqli_num_rows()期望参数1为mysqli_result, null在C:'xampp'htdocs'aspie'Php'Core'Functions'Members.php第5行

<<p> //初始化/strong>
<?php
session_start();
// error_reporting(NULL);
include 'Connection.php';
include 'Common.php';
include 'Functions/Members.php';
?>

**//错误信息**

<?php
$connection_error = 'Our website is experiencing technical issues, please come back later.';
$wrong_login = 'Password and name are wrong.';
$member_registered = 'Access has been denied. You do not seem to be a registered user.';
?>

**//CONNECTION **

<?php
include 'Errors.php';
$connection = mysqli_connect('localhost', 'root', '', 'project') or exit ($connection_error);
?>

**//COMMON **

<?php
error_reporting();
function sanitize($connection, $data) {
    global $connection;
    global $data;
    return mysqli_real_escape_string($connection, $data);
}
?>

**//成员

<?php
function member_registered($connection, $name) {
    $name = sanitize($connection, $name);
    $query = mysqli_query($connection, "SELECT COUNT(`id`) FROM `members` WHERE `name` = '$name'");
    return (mysqli_num_rows($query) == 1) ? true : false;
}
?>

**//LOGIN **

<?php
include 'Php/Core/Initializer.php';
    if (member_registered($connection, 'ee')) {
        echo "exists";
    }
    die("eee");
    echo error_reporting();
if (empty($_POST) == false) {
    $name = $_POST['name'];
    $password = $_POST['name'];
    if (empty($name) OR empty($password)) {
        echo $wrong_login;
    }
    else if (member_registered($connection, $name) == false) {
        echo $member_registered;
    }
}
?>
更新:

现在我得到的是:existsee;

条件句现在不工作,即使它已经设置好了。Username不存在,所以它不应该回显"exists:

if (member_registered($connection, 'ee')) {
    echo "exists";
}
die("eee");

在您的示例中,无法访问清理函数中的$connection变量。

尝试将$connection变量传递到函数中,如下所示:

function sanitize($data, $connection) {
    return mysqli_real_escape_string($connection, $data);
}

在这里阅读更多信息:http://php.net/manual/en/language.variables.scope.php

在**//MEMBERS **中,你需要包括新的参数:

function member_registered($name, $connection) {
    $name = sanitize($name, $connection);
    $query = mysqli_query($connection, "SELECT COUNT(`id`) FROM `members` WHERE `name` = '$name'");
    return (mysqli_num_rows($query) == 1) ? true : false;
}

,因为你的**//LOGIN **也应该更新:

include 'Php/Core/Initializer.php';
    if (member_registered('ee', $connection)) {
        echo "exists";
    }
    die("eee");
    echo error_reporting();
if (empty($_POST) == false) {
    $name = $_POST['name'];
    $password = $_POST['name'];
    if (empty($name) OR empty($password)) {
        echo $wrong_login;
    }
    else if (member_registered($name, $connection) == false) {
        echo $member_registered;
    }
}

并确保$connection变量在您需要它的任何地方都可以访问。

更新# 2

回复你的更新:

应该是这样的:

if (member_registered('ee', $connection)) {
    echo "exists";
}

而不是像这样:

if (member_registered($connection, 'ee')) {
    echo "exists";
}

$connection为第二个参数