2014-12-18 4 views
1

간단한 등록/로그인 양식을 작성하는 중입니다. 현재 데이터베이스 연결에 액세스하는 데 문제가 있습니다. "정의되지 않은 변수"가 계속 나타납니다. 여기정의되지 않은 변수가 실제로 정의 되었습니까?

이 내 코드 내 연결 : 내 PHP 파일이 포함함으로써

<?php 

$hostName = 'localhost'; 
$userName = 'root'; 
$userPass = ''; 
$database = 'test'; 

$con = new mysqli($hostName, $userName, $userPass, $database); 

if($con->connect_errno){ 
    printf("Connect failed..."); 
    exit(); 
} 

, 나는 $ 사기꾼에 액세스 할 수 없습니다해야합니까? 또는 파일에 액세스 할 때마다 연결을 재정의해야합니까?

내가 그것을 재정의해야 할 필요가 없기 전에 내 경험에 비추어 볼 때, 나는 그 일에 회의적이다. 다음은 그것을 작동시키는 함수입니다.

<?php 

include 'user-functions.php'; 
include 'connect.php'; 

function checkDuplicateEmail($email){ 
    $query = "SELECT `playerEmail` FROM `players` WHERE `playerEmail` = '$email'"; 

    $result = $con->query($query); 

    if($result->num_rows > 1){ 
     addError("Duplicate email: " . $email); 
     return True; 
    } 
    return False; 
} 

function checkDuplicateUserName($userName){ 
    $query = "SELECT `playerName` FROM `players` WHERE `playerName` = '$userName'"; 

    $result = $con->query($query); 

    if($result->num_rows > 1){ 
     addError("Duplicate username: " . $userName); 
     return True; 
    } 
    return False; 
} 

?> 

이제는 $ con에 대해 "정의되지 않은 변수"라는 유일한 위치입니다. 내가 놓친 게 있니?

는 웹 페이지에서 두 가지 오류입니다 :

  1. 정의되지 않은 변수 : 비 개체의 멤버 함수 쿼리()에
  2. 전화 사기.
+0

이전에는'global'을 사용하지 않고 전역 적으로 사용할 수있는 상수를 사용했을 수도 있습니다. 상수는'define()'을 사용하여 설정됩니다. – halfer

답변

6

$con은 사용자의 기능에 사용할 수 없습니다. 당신은 또한 global 키워드를 사용할 수 있습니다

function checkDuplicateEmail($email, $con){ 
    $query = "SELECT `playerEmail` FROM `players` WHERE `playerEmail` = '$email'"; 

    $result = $con->query($query); 

    if($result->num_rows > 1){ 
     addError("Duplicate email: " . $email); 
     return True; 
    } 
    return False; 
} 

$var = checkDuplicateEmail($email, $con); 

하지만 내가 여기를 추천하지 않습니다 나쁜 연습 : 당신은에 액세스 할 수 있도록 기능의 코드에 대한 매개 변수로 전달해야합니다.

+1

감사! 이상하게도 각 OR에 연결을 전달하거나 글로벌을 작성하지 않아도됩니다. 그리고 그것은 효과가있었습니다. 그래서 나는 혼란 스럽습니다. 코드 어딘가에 딸꾹질 일 수도 있습니다. 나는 기본적으로 통과했고 버그를 없애거나 등록을 우회 할 수있는 일들을 다시 작성했다. – teepleb

+0

@ teepleb,이 매개 변수도 _hinting_ 가치가 있습니다. 따라서'function checkDuplicateEmail ($ email, mysqli $ con)'을 사용하면 유효한 연결 만 전달할 수 있습니다. – halfer

+2

이전에 mysql_ * 함수를 사용하고 있다면 mysql_query를 사용하고 연결 매개 변수를 제공하지 않았다면 마지막으로 열린 연결을 찾아서 사용합니다. OOP 메소드를 사용하면 쿼리를하기 위해 객체에 액세스해야하며, 대답이 제시하는대로 매개 변수로 전달하지 않고 액세스 권한이없는 함수 내부에서 액세스해야합니다. –

3

이것은 범위 지정 문제입니다. $con을 전역으로 정의하거나이를 필요한 각 함수에 인수로 전달하십시오.

관련 문제