2014-02-22 9 views
0

데이터베이스에서 간단한 값을 반환하는 함수를 사용하려고하는데 일반적으로 쉽지만 다소 어려움이 있습니다. 나는 여러 가지 다른 혼합물을 시도해 보았으므로이 공동체를 돕기로 결심했다.MYSQL + PHP 가변적으로 값을 선택하십시오.

데이터베이스 구조는 사용 권한이 지정된 페이지 유형의 순위가 있습니다. 이 예를 들어

현재 열 : 순위/modreports/plreports

데이터 예 : 관리자/1/

function CheckPermission($module){ 
    $GetPerms = mysql_query("SELECT * FROM `permissions` WHERE `rank` = '".$MyDetails['group']."' LIMIT 1"); 
    $MyPerm = mysql_fetch_array($GetPerms); 
     if($MyPerm[$module] != 1){ 
      echo 'DEBUG: '.$MyPerm[$module]; 
      //redirect("index.php?resp=perms"); 
      die(); 
     } 
} 

사용 예 :

CheckPermissions(modreports); 

위의 사용법은 DEBUG를 리턴해야합니다 : 1 이 단계에서 또는 아무것도 전혀 보이지 않는 대신 (바람직하게는 두 번째), DEBUG :을 보여줍니다. $ MyPerm [ 'modreports']는 올바른 값을 반환 할 것이므로 이전에 $ _POST [ '']에서만 사용했던 변수 내의 변수라고 가정합니다.

도움을 주셔서 감사합니다. 도움을 얻기에 충분한 정보를 제공해 주셨으면합니다.


지원에 대한 응답으로 이것은 수정 된 코드입니다.

대신

if($MyPerm[$module] != 1){ 

는 귀하의 기능을 인식하지

if($MyPerm[$module] == 1){ 
+1

이 코드에 대한 mysql 쿼리 작업에 몇 가지 기본 오류 처리를 추가해야합니다. 그것은 당신의 문제를 즉시 밝혀 줄 것입니다. 나는 또한 당신에게 변수에 쿼리를 쓰고 그 변수를 'var_dump'하는 것을 강력히 제안 할 것이다. 다시 당신의 문제는 명백해질 것입니다. 마지막으로, 모든 레벨에서 오류보고 기능을 켜 놓은 경우 문제를 지적하는 알림을 받게됩니다. 요약하면 가장 큰 문제는 코드를 디버깅하고, 가장자리/오류 사례를 처리하며, 개발할 때 오류 메시지를 항상주의 깊게 관찰하는 방법을 배우는 데 집중해야한다는 것입니다. –

+0

@MikeBrant 고마워요, 다른 상황에서 제가 일반적으로하는 일입니다. 그래서이 문제가 마지막으로 생겼을 때 제가 스스로 해결했습니다. 이번에는 내 대신에 간과하십시오. – Tarquin

답변

1

해야한다 : 내가 생각

function CheckPermission($module,$group){ 
    $GetPerms = mysql_query("SELECT * FROM `permissions` WHERE `rank` = '".$group."' LIMIT 1"); 
    $MyPerm = mysql_fetch_array($GetPerms); 
     if($MyPerm[$module] != 1){ 
      redirect("index.php?resp=perms"); 
      die(); 
     } 
} 
+0

이것은 완벽하게 이해할 수 있습니다. 나는 과거에이 문제를 보았고 대개 스스로 그것을 바로 잡는다. 함수에 그룹을 전달하기 만하면 처음에는 완벽하게 작동했습니다. MyPerms와 변수는 모두 완벽하게 작동했습니다. =) 고마워. – Tarquin

0

는 잘못 "하지"당신의 상태에있다 $ MyDetails 또는 $ MyPerm. $ module을 사용했을 때와 같이 변수에 전달한 변수 나 전역 변수로 선언 한 변수 만 인식합니다 (권장하지 않음). 과거에 $ _POST를 사용한다고 언급했는데, 이것은 "슈퍼 글로벌"입니다. 이것은 특별한 경우이며 더 이상의 정의없이 모든 기능에서 사용할 수 있습니다.

추천 도서

: http://www.php.net/manual/en/language.variables.scope.php

+0

나는 가난하게 단어를 선택했는데, 내 잘못이 아니라는 말을 되풀이했다. 문제는 실제 데이터베이스 값이 아닌 공백이 반환된다는 것입니다. – Tarquin

0

예시적인 데이터로서 표 주어 (! $ MyPerm [$ 모듈] = 1)

rank | modreports | plreports 
------------------------------ 
admin|  1  |  1 

'modreports'보낸 거짓 결과 윌의 값을 갖는다 1. 그러므로 'echo'DEBUG : '. $ MyPerm [$ module];' 라인은 결코 실행되지 않을 것이다.

관련 문제