我有一个小的PHP脚本,它只是连接到数据库并将某个表转储到屏幕上。
// Replaced with expanded snippet below
此代码抛出错误,指出$menu
为NULL。但是一个相同的脚本
// Also replaced with expanded snippet below
执行正常 - 它们包含相同的文件以获得具有相同连接特征的$menu
。 mysql_connect
和mysql_select_db
函数都被称为func() or die(mysql_error())
,我没有收到任何错误。知道原因是什么吗?
这是我的连接代码:
<?php
# FileName="Connection_php_mysql.htm"
# Type="MYSQL"
# HTTP="true"
$hostname_menu = "";
$database_menu = "";
$username_menu = "";
$password_menu = "";
$menu = mysql_connect($hostname_menu, $username_menu, $password_menu) or die(mysql_error());
$menu_db = mysql_select_db($database_menu, $menu) or die(mysql_error());
?>
我编辑了变量。我已经检查过,没有文件阴影或使用$ menu用于其他目的。
这是索引页面。我没有写这个,只是你知道。
<?PHP
session_start();
if($_SESSION['login'] != "true"){
header("Location: login.php");
}else{}
?>
<?PHp include("includes/top.php"); ?>
<?PHP include("includes/menu.php"); ?>
<div id="main_page">
<div id="page2">
<?PHP
if($_REQUEST['page'] == ""){
include("pages/index.php");
}else{
include("pages/".$_REQUEST['page'].".php");
}
?>
</div>
</div>
<?PHP include("includes/bottom.php"); ?>
其他PHP包含的实际上是纯HTML,并没有定义任何其他变量。上面的第一个代码段扩展为
<!-- semester1.php -->
<?php
include('includes/db.php');
function spew_bookings() {
$roomquery = "SELECT * FROM php_bookingtable";
$result = mysql_query($roomquery, $menu);
while($row = mysql_fetch_assoc($result)) {
foreach($row as $key => $value) {
echo $key; echo '<br>'; echo $value;
}
}
}
function spew_user_bookings(){
}
if ($_SESSION['deptid'] == 'Central Administrator') {
spew_bookings();
} else {
spew_user_bookings();
}
?>
并包含在上面的index.php中。另一个文件被重定向,不包括在内,如下所示:
<?PHP
session_start();
include("../includes/db.php");
$loginQuery = "SELECT * FROM php_usertable WHERE username = '".$_REQUEST['username']."'";
$loginResult = mysql_query($loginQuery, $menu);
$loginRow = mysql_fetch_array($loginResult);
$password = $_REQUEST['password'];
//-- get their department from their department id --//
$deptQuery = "SELECT * FROM php_departmenttable WHERE deptid = '".$loginRow[3]."'";
$deptResult = mysql_query($deptQuery, $menu);
$deptRow = mysql_fetch_array($deptResult);
if(md5($password) == $loginRow[2]){
//-- set all the users information into sessions --//
$_SESSION['username'] = $loginRow[1]; //-- from usertable --//
$_SESSION['deptid'] = $deptRow[1]; //-- from depttable --//
$_SESSION['extension'] = $loginRow[4];
$_SESSION['email'] = $loginRow[5];
$_SESSION['login'] = "true";
header("Location: ../index.php");
}else{
header("Location: ../login.php");
}
?>
我知道这里有安全漏洞,但现在它们并不是一个问题。
答案 0 :(得分:1)
spew_bookings()
中的
你引用了未定义的$menu
。在这种情况下,您将获得由php抛出的一行中的两个错误:
$menu
未定义$menu
来电mysql_query
为空的错误
醇>
也许您在功能开始时需要global $menu
?
答案 1 :(得分:0)
要做的第一件事是注意错误信息。 IT会告诉您$menu
是null
的哪一行和哪个文件。找到那条线......然后查看以相反顺序发生的一切。
正如其他人在他们的评论中所说的那样,你的connect和select_db函数的结果不能产生空值......并且已经定义了变量(否则它会因为它是未定义的而不是null)所以在堆栈的某个地方调用并包括somethign会使该变量归零。