2017-09-04 1 views
0

나는 쿼리를 실행 한 다음 결과 변수를 다른 파일의 논리에 사용하는 함수를 개발했습니다. 이를 달성하기 위해 전역 변수를 사용했습니다. 전역 변수를 읽지 않았으므로 전역 변수 사용을 피하기 위해이 함수를 작성하는 또 다른 방법이 있습니다.PHP에서 전역 변수를 사용하는 대신

파일 1 (기능 파일)

<?php 

    function usertype() 
    { 

     include "../classes/sessionstart.php"; 
     include "../config/dbconnect.php"; 

     $user_id = $_SESSION['user_id']; 
     $select = $con->prepare("SELECT user_usertype, user_gender FROM tbl_user WHERE user_id = $user_id"); 
     $select->setFetchMode(PDO::FETCH_ASSOC); 
     $select->execute(); 
     while($data=$select->fetch()){ 

      $GLOBALS['gender'] = $data['user_gender']; 
      $GLOBALS['usertype'] = $data['user_usertype']; 
     } 
    } 

?> 

파일 2 (파일은 기능 파일 사용)

<?php 
    usertype(); 
?> 
<div> 
    <select class="searchpropertyinputs" name="user_usertype" id="user_usertype"> 
     <?php if ($gender == "Male" && $usertype != "Marriage Bureau") { ?> <option value="Bride">Bride</option> <?php } ?> 
     <?php if ($gender == "Female" && $usertype != "Marriage Bureau") { ?> <option value="Groom">Groom</option> <?php } ?> 
     <?php if ($usertype == "Marriage Bureau") { ?> 
      <option value="" hidden>Bride or Groom</option> 
      <option value="Bride">Bride</option> 
      <option value="Groom">Groom</option> 
     <?php } ?> 
    </select> 
</div> 
당신은 함수에서 값을 반환해야합니다
+3

예, 함수에 필요한 매개 변수를 전달하십시오. 문자열 보간으로 쿼리를 구성하지 마십시오. – pvg

+0

첫 번째 함수에서 데이터 배열을 반환하고 pvg가 말하는 것처럼 해당 배열을 다음 함수로 전달합니다. 준비된 진술에 자리 표시자를 사용하십시오. – mickmackusa

답변

2

:

업데이트 코드도 준비된 쿼리를 수정하고 반환 열에 대한 별칭을 설정합니다.

<?php 

    function usertype() 
    { 
     include_once "../classes/sessionstart.php"; 
     include_once "../config/dbconnect.php"; 

     $select = $con->prepare(" 
      SELECT user_usertype as `type`, 
        user_gender as `gender` 
      FROM tbl_user 
      WHERE user_id = :user_id LIMIT 1 
     "); 
     $select->bindValue(':user_id', (int) $_SESSION['user_id'], PDO::PARAM_INT); 
     $select->execute(); 

     return $select->fetch(PDO::FETCH_ASSOC); 
    } 

?> 

.

<?php 
    $usertype = usertype(); 
?> 
<div> 
    <select class="searchpropertyinputs" name="user_usertype" id="user_usertype"> 
     <?php if ($usertype['gender'] == "Male" && $usertype['type'] != "Marriage Bureau") { ?> <option value="Bride">Bride</option> <?php } ?> 
     <?php if ($usertype['gender'] == "Female" && $usertype['type'] != "Marriage Bureau") { ?> <option value="Groom">Groom</option> <?php } ?> 
     <?php if ($usertype['type'] == "Marriage Bureau") { ?> 
      <option value="" hidden>Bride or Groom</option> 
      <option value="Bride">Bride</option> 
      <option value="Groom">Groom</option> 
     <?php } ?> 
    </select> 
</div> 

은 또한, 세션 시작을 연결하는 includes을 이동할 수 있습니다, 또는 당신은 미래의 기능에 문제가있을 것입니다. 따라서 대부분의 경우 함수를 사용자 클래스로 그룹화해야합니다 (예 :

).
<?php 

include_once "../classes/sessionstart.php"; 
include_once "../config/dbconnect.php"; 

class User { 

    public function __construct(PDO $con) 
    { 
     $this->con = $con; 
    } 

    public function type($user_id = 0) 
    { 
     $select = $this->con->prepare(" 
      SELECT user_usertype as `type`, 
        user_gender as `gender` 
      FROM tbl_user 
      WHERE user_id = :user_id LIMIT 1 
     "); 
     $select->bindValue(':user_id', (int) $user_id, PDO::PARAM_INT); 
     $select->execute(); 

     return $select->fetch(PDO::FETCH_ASSOC); 
    } 

    //... 
} 

$user = new User($con); 

$usertype = $user->type($_SESSION['user_id']); 
?> 
+0

나는'dbconnect.php'를 통해 그것을 포함하는 대신'$ con'을 전달할 것입니다. 그것은 매번 (그냥 추측) 새로운 연결을 만들 것 같습니다 – Phil

+0

도와 줘서 고마워 다음과 같은 오류가 발생했습니다 치명적인 오류 : 캐치 오류 : commonqueries.php에서 참조로 매개 변수 2를 전달할 수 없습니다 : 11 스택 추적 : # 0 matrimonialprofilesearch.php (48) : usertype() # 1 {main}이 (가) commonqueries.php의 11 행에 던졌습니다. –

+0

OP를 도울 수있는 클래스가 추가되었습니다. –

관련 문제