2011-02-23 8 views
0

데이터베이스에 연결하고 특정 테이블을 화면에 덤프하는 작은 PHP 스크립트가 있습니다.PHP 스크립트가 데이터베이스를 쿼리하지 않습니다

// Replaced with expanded snippet below 

이 코드는 $menu이 NULL이라는 오류를 발생시킵니다. 그러나 동일한 스크립트

// Also replaced with expanded snippet below 

를 미세 실행은 그들이 같은 접속 특성과 $menu를 얻기 위해 같은 파일을 포함한다. mysql_connectmysql_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");   
    }   
?> 

는 여기에 보안 구멍이 있다는 것을 알고 있지만, 지금은 문제가되지입니다.

+5

디버깅을 돕기 위해 포함시키려는 다른 코드를 공유해야합니다. '$ menu'가 자체적으로'NULL'이되는 방법은 없습니다. mysql_connect 호출이 실패하더라도'NULL'이 아닌'FALSE'가됩니다. –

+0

@ Dan : 연결 스크립트에서 편집했습니다. – Puppy

+0

그 코드를 포함 시켰을 가능성은 없으며 추가 코드가 없으면'$ menu'는 null입니다. 나는 당신이'include' /'require'를 사용하지 않거나 잘못된 경로를 제공하고'include'가 실패했기 때문에 그 파일을 포함시키지 않았 으면합니다. 어두운 재미로 디버깅하지 않습니까? –

답변

1

spew_bookings() $menu은 정의되지 않았습니다. 이 경우에 당신은 PHP에 의해 발생 행에 두 가지 오류를 얻을 것입니다 :

  1. $menu가 정의되지 않았다는 경고
  2. $menu

어쩌면 당신이 필요로하는 당신의 mysql_query 전화의 null 없다는 오류 기능 시작시 global $menu?

+0

우리 모두가 그걸 놓쳤다 고 생각합니다 ... @DeadMG : 오류 위치가 해당 기능의 메뉴에 대한 참조와 일치하면 문제가 발생합니다. '$ _SESSION','$ _POST'와 같은 슈퍼 글로벌을 통해 접근하지 않는 한, 함수 밖에서 정의 된 변수는 전역 키워드없이 내부에서 참조 될 수 없으므로 어떤 점에서 오류가 발생하지는 않습니다. '$ _GLOBALS' 등. [가변 범위] (http://php.net/manual/en/language.variables.scope.php)를보십시오 – prodigitalson

+0

경고를받지는 못했지만 오류. 문제가 해결되었습니다. 덕분입니다. – Puppy

0

먼저해야 할 일은 오류 메시지입니다. IT 부서는 어떤 라인과 파일 $menunull에 있는지 알려줄 것입니다. 그 라인을 찾은 다음, 역순으로 일어나는 모든 것을보십시오.

다른 사람들이 자신의 의견에 connect 및 select_db 함수의 결과가 null 값을 생성 할 수 없다고 말했고 ... 변수가 정의되었습니다 (그렇지 않으면 null 대신 정의되지 않은 와인이됩니다). 그래서 어딘가에 전화 스택 및 somethign 포함 변수를 nulling입니다.

관련 문제