2017-09-27 1 views
0

내 질문에 주셔서 감사합니다, 나는 PHP에서 Ajax 함께 작동하도록 사용자 지정 함수를 개발했습니다, 기본적으로 값이 배열에 있는지 알고 싶습니다.PHP가 배열에 값이 없다고 말하는 이유는 무엇입니까?

event_try가 데이터베이스 쿼리의 결과 집합에 있는지 확인합니다. 이 경우, 1004는 "$ reg"배열에 있습니다 (나는 보증합니다).이 경우, 마지막 if-else는 "notok"를 반환해야하지만 Ajax로 json을 출력 할 때 항상 "ok"가됩니다.

print_r을 사용하여 테스트를 수행했으며 "notok"을 반환합니다. 어떤 이유로 든 json과 아약스에 관한 것입니다. 나는 위의 분명 천재에 의해 수행되지알고

function validate_event_no_repeat(){ 

    // header('Content-type: application/json'); 
    $check_repeat_result = 0; 
    $check_repeat = array(); 
    $event_try = 1004; 

    global $wpdb; 


    $current_user = wp_get_current_user(); 

    $get_attendee = $wpdb->get_results("SELECT ATT_ID FROM su_esp_attendee_meta WHERE ATT_email='" . $current_user->user_email . "'"); 



     foreach ($get_attendee as $atte): 
     $loggedID = $atte->ATT_ID; 

     $registration = $wpdb->get_results("SELECT ATT_ID, EVT_ID FROM su_esp_registration WHERE ATT_ID = $loggedID", ARRAY_N); 

     foreach ($registration as $reg): 
      if(in_array($event_try, $reg)): 
       $check_repeat[] = "notok"; 
      else: 
       $check_repeat[] = "ok"; 
      endif; 
     endforeach; 

     endforeach; 

     if(in_array("notok", $check_repeat)): 
     $check_repeat_result = "notok"; 
     else: 
     $check_repeat_result = "ok"; 
     endif; 

     echo json_encode(array('crr' => $check_repeat_result)); 

    die(); 
} 

하지만 그것을 안 작동합니다 : 여기

코드인가? 내가 얻을 수있는 도움을 주시면 감사하겠습니다.

+0

? 'ATT_ID' 또는'EVT_ID'에? –

+0

가 어디 기대 따라서 인덱스없이 in_array''자신의 사용 (내가 여기 gussing있어),이 숫자 배열을 산출 생각으로 ARRAY_N을 사용하고 –

+0

@bub EVT_ID가 –

답변

0

문제는 get_results배열의 배열을 반환하지 않는다는 것입니다, 그것은 객체의 배열을 반환합니다.

in_array을 사용하여 개체를 확인할 수 없으므로 먼저 개체를 배열로 변환해야합니다. 예를 들어이를 캐스팅하여 간단히 수행 할 수 있습니다.

$registration = $wpdb->get_results("SELECT ATT_ID, EVT_ID FROM su_esp_registration WHERE ATT_ID = $loggedID", ARRAY_N); 

    foreach ($registration as $reg): 

     /* ADD THIS LINE: */ 
     $reg_array = (array) $reg; /* cast the object as an array */ 

     if(in_array($event_try, $reg_array)): 
      $check_repeat[] = "notok"; 
     else: 
      $check_repeat[] = "ok"; 
     endif; 
    endforeach; 
그는 인수, 내가 할 수 event_try`to`
+0

숫자로 반환합니다. 배열 ARRAY_N 함께 get_results ... 귀하의 제안을 추가하려고했지만 여전히 "확인"반환합니다. 문제는 die() 근처에서 마지막 if-else 검사라고 생각합니다. 그래도 제안에 감사드립니다! –

+0

@DavidMendienta'get_results'는 몇 행을 반환합니까? 나는 단지 하나만 얻고 있다고 가정했었다. – FluffyKitten

+0

사용자와 관계가 많으므로 1 : 다수 관계이므로 많은 행을 반환 할 수있다.이 특정 사용자에게는 EVT_ID 1004 인 행이있다. value with testing ... 여전히 PHP는 배열에 없다고 반환합니다. –

관련 문제