PHP脚本赢得';t查询数据库
我有一个小的PHP脚本,它只连接到数据库并将某个表转储到屏幕上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()),
// 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全局
等。。看一看,我没有收到警告,但确实收到了错误。这解决了问题-谢谢。