2011-08-06 3 views
1

$id 변수에 대해 정의되지 않은 변수 오류가 발생했습니다. & 21, 이유를 설명해주세요. 나는 그 문제가 무엇인지 알 수 없다.정의되지 않은 변수?

<?php 
function userIsLoggedIn() 
{ 
    if (isset($_POST['action']) and $_POST['action'] == 'login') 
    { 
     if (!isset($_POST['email']) or $_POST['email'] == '' or 
      !isset($_POST['password']) or $_POST['password'] == '') 
     { 
      $GLOBALS['loginError'] = 'Please fill in both fields'; 
      return FALSE; 
     } 
     $password = md5($_POST['password'] . 'chainfire db'); 

     if (databaseContainsAuthor($_POST['email'], $password, $id)) 
     { 
     include 'db.inc.php'; 
      session_start(); 
      $_SESSION['loggedIn'] = TRUE; 
      $_SESSION['email'] = $_POST['email']; 
      $_SESSION['password'] = $password; 
      $_SESSION['id'] = $id; 
      return TRUE; 
     } 
     else 
     { 
      session_start(); 
      unset($_SESSION['loggedIn']); 
      unset($_SESSION['email']); 
      unset($_SESSION['password']); 
      unset($_SESSION['id']); 
      $GLOBALS['loginError'] = 'The specified email address or password was incorrect.'; 
      return FALSE; 
     } 
    } 
    if (isset($_POST['action']) and $_POST['action'] == 'logout') 
    { 
     session_start(); 
     unset($_SESSION['loggedIn']); 
     unset($_SESSION['email']); 
     unset($_SESSION['password']); 
     unset($_SESSION['id']); 
     header('Location: ' . $_POST['goto']); 
     exit(); 
    } 
    session_start(); 
    if (isset($_SESSION['loggedIn'])) 
    { 
     return databaseContainsAuthor($_SESSION['email'], $_SESSION['password'], $_SESSION['id']); 
    } 
} 
function databaseContainsAuthor($email, $password, $id) 
{ 
    include 'db.inc.php'; 

    $email = mysqli_real_escape_string($link, $email); 
    $password = mysqli_real_escape_string($link, $password); 

    $sql = "SELECT COUNT(*) FROM author 
      WHERE email='$email' AND password='$password'"; 
    $result = mysqli_query($link, $sql); 

    if (!$result) 
    { 
     $error = 'Error searching for author.'; 
     include 'error.html.php'; 
     exit(); 
    } 
    $row = mysqli_fetch_array($result); 

    $sql = "SELECT id FROM author 
      WHERE email='$email'"; 
    $id = mysqli_query($link, $sql); 
    if (!$id) 
    { 
     $error = 'Error searching for id.'; 
     include 'error.html.php'; 
     exit(); 
    }  

    if ($row[0] > 0) 
    { 
     return TRUE; 
    } 
    else 
    { 
     return FALSE; 
    } 
} 

변수 $id 다음 그래서 자연스럽게 $_SESSION['id'] 세션에 저장 $id = mysqli_query($link, $sql); 통과해야, databaseContainsAuthor($email, $password, $id)에 정의되어 있지만 그렇지 않아입니까?

+0

[ "Notice : Undefined variable"및 "Notice : Undefined index"] 가능한 복제물 (http://stackoverflow.com/questions/4261133/php-notice-undefined-variable-and-notice-undefined-index) – animuson

답변

1

몇에게 : 당신은 또한이 같은 전역 변수를 사용할 수 있습니다

<?php 
function changeVariabe(&$person) { 
    $person = 'Bob'; 
} 
$person = 'Alice'; 
changeVariable($person); 
echo "Hello $person!"; // Outputs: Hello Bob! 

things 변수 $ id를 사용하기 전에 정의해야합니다 (필수는 아니지만 좋은 습관).

그래서 또한 databaseContainsAuthor 함수 내부 $ ID 설정

$id = NULL; 
if (databaseContainsAuthor($_POST['email'], $password, $id)) 

대해 $ 그 ID가 해당 기능의 범위에 변화 의미하지 않는다.

당신은 그것을 글로벌 만들 수 있지만 나쁜 관행

고려하면 함수 databaseContainsAuthor

이 코드 TRUE 또는 FALSE를 반환합니다

if ($row[0] > 0) 
{ 
    return TRUE; 
} 
else 
{ 
    return FALSE; 
} 

을 포함하고 있습니다. 하지만 코드 값을 반환하면, 코드의 어느 것도 그것이 그것이

$sql = "SELECT id FROM author 
      WHERE email='$email'"; 

    $id = mysqli_query($link, $sql); 
    if (!$id) 
    { 
     $error = 'Error searching for id.'; 
     include 'error.html.php'; 
     exit(); 
    }  

실행되지 않습니다 return 문 이후뿐만 아니라, 주석 수 있습니다이 부분을 의미

실행되지 않습니다 후주의
+0

고맙습니다. $ id 변수를 사용하는 이유는 authors ID를 session()에 저장하여 작성자가 제출 한 기사와 ID를 연결할 수 있기 때문입니다. 현재 사용자의 ID를 저장하는 더 좋은 방법이 있다면, 그것은 세션에 현재 로그인 한 사용자입니다(), 나는 그것을 위해 모든 것입니다. – rumspringa00

+0

당신이하려고하는 것은 괜찮습니다. $ id = mysqli .....를 할당하는 코드의 뒤에 if/return 문을 넣으십시오.이 함수 정의를 databaseContainsAuthor ($ email, $ password, & $ id)로 변경하십시오. – bumperbox

+0

나는 당신이 제안한 것을했으나 여전히 14, 21 행의 $ id에 대한 정의되지 않은 변수 오류가 발생합니다. Op는 수정 된 코드로 업데이트됩니다. 감사. – rumspringa00

2

함수 내에서 변경되거나 정의 된 변수는 나머지 스크립트에 영향을주지 않습니다. 이것은 다음과 같이 참조로 변수를 전달하여 방지 할 수 있습니다

<?php 
function changeVariabe($person) { 
    $person = 'Bob'; 
} 
$person = 'Alice'; 
changeVariable($person); 
echo "Hello $person!"; // Outputs: Hello Alice! 

: 예를 들어

<?php 
function changeVariabe() { 
    global $person; 
    $person = 'Bob'; 
} 
$person = 'Alice'; 
changeVariable(); 
echo "Hello $person!"; // Outputs: Hello Bob! 
관련 문제