PHP脚本赢得';t查询数据库

PHP脚本赢得';t查询数据库,php,mysql,Php,Mysql,我有一个小的PHP脚本,它只连接到数据库并将某个表转储到屏幕上 // Replaced with expanded snippet below 此代码抛出一个错误,指出$menu为空。但是一模一样的剧本 // Also replaced with expanded snippet below 执行精细-它们包含相同的文件以获得具有相同连接特征的$menu。mysql\u connect和mysql\u select\u db函数都被称为func()或die(mysql\u error()),

我有一个小的PHP脚本,它只连接到数据库并将某个表转储到屏幕上

// Replaced with expanded snippet below
此代码抛出一个错误,指出
$menu
为空。但是一模一样的剧本

// Also replaced with expanded snippet below
执行精细-它们包含相同的文件以获得具有相同连接特征的
$menu
mysql\u connect
mysql\u select\u db
函数都被称为
func()或die(mysql\u 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");           
    }           
?>


我知道这里有安全漏洞,但现在不需要担心。

首先要注意错误消息。它将告诉您,
$menu
null
所在的行和文件。找到那条线。。。然后以相反的顺序看发生的一切


正如其他人在评论中所说,connect和select_db函数的结果不能产生空值。。。变量已经被定义(否则它会被认为是未定义的而不是null),所以在调用堆栈中的某个地方,包括某个东西,会将该变量置零。

在函数中
spew\u bookings()
您引用了未定义的
$菜单
。在这种情况下,php抛出的一行中会出现两个错误:

  • 未定义
    $menu
    的警告
  • mysql\u查询
    调用中出现一个错误,指出
    $menu
    为空

  • 也许你需要一个
    global$菜单
    ,在你的函数开始时?

    如果你想让我们帮你调试它,你必须分享你包含的其他代码。
    $menu
    不可能只靠自身的力量变成
    NULL
    。即使是失败的
    mysql\u connect
    调用也会导致
    FALSE
    ,而不是
    NULL
    @Dan:I在连接脚本中编辑。除非有其他代码,否则不可能包含该代码,
    $menu
    为NULL。我希望您未能包含该文件,原因可能是未使用
    include
    /
    require
    ,或者您提供了错误的路径,并且
    include
    失败。在黑暗中调试不是很有趣吗?连接代码在一个名为“connection\u php\u mysql.htm”的文件中?您的服务器是否设置为以PHP方式处理.htm文件?最初的问题是关于该文件,查询选择了
    PHP\u bookingtable
    对吗?这似乎不包括
    menu.php
    ,只包括
    db.php
    ,这可能不会在名为
    $menu
    的变量中创建连接?当包含文件时,您可能希望开始使用
    require
    而不是
    include
    作为策略,如果这些文件不存在,将导致其余代码中断。他们是必需的:)我不敢相信我们都错过了@DeadMG:如果错误位置对应于该函数中的菜单引用,那么这就是问题所在。如果你没有一个错误,但你会在某一点上,因为变量定义的函数外不能引用没有全局关键字内。。。除非您通过超级全局访问它们,如
    $\u会话
    $\u帖子
    $\u全局
    等。。看一看,我没有收到警告,但确实收到了错误。这解决了问题-谢谢。