2011-01-29 3 views
1

동안 나는 데이터베이스에서이간단한 문제가 루프

mysqli_select_db($connect,"users"); 

$response = "Select * from revbut where onuser='$u'"; 
$rquery = mysqli_query($connect,$response); 
$norows = mysqli_num_rows($rquery); 






while($responseanswer=mysqli_fetch_array($rquery)){ 


if(json_encode($responseanswer['response']=='approve')) 
{ 
include('response-2.php'); 
} 

else if(json_encode($responseanswer['response']=='reject')) 
{ 
    include('response-3.php'); 
} 
else 
{ 
echo "Nothing in here. "; 
} 
} 

을 가지고, 두 개의 필드가 있습니다. 그래서 하나는 찬성이고 다른 하나는 거부입니다. 하지만 PHP는 response-2.php 파일을 두 번 포함하고 있습니다. 왜 그렇게?

+0

json_encode에게 무엇을하고 있는지 말해 주시겠습니까? 내 말은 평생 가치 – AmirModiri

답변

3

$ responseanswer [ 'response']를 'approve'와 'reject'로 비교 한 다음 json_encoding()을 true 또는 false로 비교하기 때문입니다. json 인코딩은 "true"또는 "false"와 같은 문자열이며, PHP의 if ("true") 및 if ("false")가 모두 true입니다. 사실 if()가 false가되는 유일한 문자열은 문자열 "0"과 ""입니다. http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting

샘플 데이터를 제공하지 않았기 때문에 json_encoding()이 필요한 이유는 명확하지 않지만 그 것이 버그라고 확신합니다.

+0

오 ... json_encode 없이는 반환하지 않는다면 ... 작동하지 않을 것입니다 ... $ reposneanswer [serial]과 그 밖의 모든 것을 표시합니다. 그러나 [response]가 아닙니다. ; – sarthak

+0

글쎄, json_encode()의 결과를 변수에 넣어야합니다. 제시 한 코드에서 인코딩 결과가 버려지고 있습니다. –

1

결과 집합의 모든 레코드에 대해 루프를 실행하고 있기 때문에. 루프는 기본적으로 '응답'필드가 '승인'과 같을 때마다 response-2.php를 포함한다고 말합니다. 테이블에 'response'필드가 "approve"인 레코드가 5 개있는 경우 루프에 response-2.php가 5 번 포함됩니다. 당신의 while 루프 전에

, 당신은 반복 변수를 설정할 수 :

$ I = 1;

루프의 끝에서 1 씩 값을 반복 :

$ 내가 ++;

그런 다음 $ i 값을 확인하십시오. 1보다 큰 값이면, 다시 포함하지 마십시오. 예를 들어 :

$i = 1; 
while($responseanswer=mysqli_fetch_array($rquery)){ 


if(json_encode($responseanswer['response']=='approve')) 
{ 
($i == 1 ? include('response-2.php') : ""); 
} 

else if(json_encode($responseanswer['response']=='reject')) 
{ 
($i == 1 ? include('response-3.php') : ""); 
} 
else 
{ 
echo "Nothing in here. "; 
} 
$i++; 
} 
+0

그래서 어떻게 해결합니까? – sarthak

+0

지연 시간에 죄송합니다. 이메일 알림을 사용하도록 설정하지 않았습니다. 샘플을 제공했습니다. 나는 당신이 성취하려는 것을 정확하게 모르겠습니다. 반복 값이 1보다 큰 경우 추가 절차를 수행해야하는 경우이를 더 일반적인 if/else 구문으로 변환해야 할 수도 있습니다. – technoTarek

0

난 당신이 당신의 데이터베이스에서이 작업을 수행해야합니다 생각하고이 작업을 수행해야합니다

키 이름, 예를 들면 키 열 및 값을 하세 하나 개의 기록을 가지고

rejectOrAprove이고 값이 aprove 인 경우 1이고 거부 값이 0 일 경우

관련 문제