目标: 我正在创建一个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
为第二个参数