데이터베이스에 연결하고 특정 테이블을 화면에 덤프하는 작은 PHP 스크립트가 있습니다.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());
?>
내가 변수를 편집 됨 :
여기 내 연결 코드입니다. 나는 체크했다. 그리고 다른 목적을 위해 $ shadowing이나 $ 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'이되는 방법은 없습니다. mysql_connect 호출이 실패하더라도'NULL'이 아닌'FALSE'가됩니다. –
@ Dan : 연결 스크립트에서 편집했습니다. – Puppy
그 코드를 포함 시켰을 가능성은 없으며 추가 코드가 없으면'$ menu'는 null입니다. 나는 당신이'include' /'require'를 사용하지 않거나 잘못된 경로를 제공하고'include'가 실패했기 때문에 그 파일을 포함시키지 않았 으면합니다. 어두운 재미로 디버깅하지 않습니까? –