2013-03-17 2 views
11

자바 스크립트 코드에서 서버 측 PHP 코드로 변수를 전달하려고합니다. 나는 이것이 내가 올바르게 한 것으로 믿는 아약스 호출을 통해 이루어져야 만한다는 것을 알고있다. 그러나 변수에 접근하는 것은 나의 아약스에서 나의 PHP로 패스한다. 나는 PHP에 익숙하지 않기 때문에 문제가 생길 때이다. 내가 PHP ($의 사용자 ID) 내 자바 스크립트 변수 "사용자 ID"를 통과하기 위해 노력하고있어아약스를 통해 PHP에 Javascript 변수 전달

$(document).ready(function() { 

      $(".clickable").click(function() { 
       var userID = $(this).attr('id'); 
       //alert($(this).attr('id')); 
       $.ajax({ 
        type: "POST", 
        url: 'logtime.php', 
        data: "userID=" + userID, 
        success: function(data) 
        { 
         alert("success!"); 
        } 
       }); 
      }); 
     }); 

<?php //logtime.php 
$uid = isset($_POST['userID']); 
//rest of code that uses $uid 
?> 

그러나 내가 잘못 어딘가에 길을 따라 갔어요 : 여기 내 코드는 내가 지금까지 가지고있다. 도와 주셔서 감사합니다! 당신이 URL 매개 변수 구문을 사용하려고하고 있기 때문에 다른 방법으로

+1

정확히 무엇이 문제입니까? 당신은 당신이 "잘못 갔다"는 것을 어떻게 알았는지 설명하지 않았습니다. – Pointy

답변

31

가 아약스 호출 (http://api.jquery.com/jQuery.ajax/)이 같은 데이터를 전달합니다

data: { userID : userID } 

그리고 당신의 PHP에서

할이 :

if(isset($_POST['userID'])) 
{ 
    $uid = $_POST['userID']; 

    // Do whatever you want with the $uid 
} 

isset() 기능의 목적은 주어진 변수가 존재 처리 여부를 확인하는 것입니다, 그 가치를 얻지 못한다.

+0

이것이 실제 문제를 정확하게 식별한다고 생각합니다. – Pointy

+0

표준 기능 및 클래스 설명은 모두 http://php.net/에서 찾을 수 있습니다 (예 : http://php.net/isset). – mirrormx

0

는 "데이터"를 제거하고 "? logtime.php 사용자 ID ="URL이 + userId를 내가 더 잘 브라이언의 답변을 좋아

을 시도,이 대답은 그냥 "데이터"와 그 구문을 올바르게 사용할 수있는 위치를 보여주고 싶었습니다.

+0

그는 ajax 호출 유형을 'post'에서 'get'으로 변경해야 할 것입니다. 휴식을 취하고있는 세계에서 그가하려고하는 것일 수 있습니다. 사용자 ID를 기반으로 데이터를 가져 오지만 게시하려고하는 경우 삽입 한 다음 게시 할 데이터를 다시 서버로 보내는 것이 올바른 방법이며 올바르게 작동 할 것입니다. – Radiotrib

1

POST 변수에 'userID'라는 요소가 있는지 테스트하려면 array_key_exists를 사용하는 것이 더 낫습니다. 실제로 배열 키의 존재 여부를 테스트합니다. 값이 설정되었는지 여부는 아닙니다 .. 미묘하고 아마도 유일한 의미 적 차이는 있지만 가독성을 향상시킵니다.

와 지금을 $ UID는 $ __ POST [ '사용자 ID가'] I 메모리에서 불러 경우 당신이 시도 할 수 있습니다 ... 설정 여부 따라 부울 값으로 설정되고 ...

$uid = (array_key_exists('userID', $_POST)?$_POST['userID']:'guest'; 

그런 다음 당신이 식별 '손님'사용자를 사용하고이 시나리오에 적용하지 않을 경우에도() : 훨씬 더 읽을 수

또 다른 포인트 재는 isset을 코드를 렌더링 할 수 있습니다, 그것은 기억 가치 만약 당신이 돈 나중에 잡힐 싶지 않다 ... 배열 요소가 NULL로 합법적으로 설정 될 수있다. 즉, 존재할 수 있지만 아직 채워지지 않을 수있다. 이것은 유효하고 수용 가능한, 테스트 할 수있는 상태. 그러나 :

a = array('one'=>1, 'two'=>null, 'three'=>3); 
isset(a['one']) == true 
isset(a['two']) == false 

array_key_exists(a['one']) == true 
array_key_exists(a['two']) == true 

어떤 용도로 사용하고 싶은지 확실히 알고 있어야합니다.

3

JSON을 AJAX 호출이없는 데이터 유형으로 사용하지 않으므로, 제공된 PHP가 true 또는 false가되기 때문에이 값에 액세스 할 수 없다고 가정합니다. isset은 값에 액세스 할 수 없거나 값이있는 것이 있는지 확인하는 기능입니다.

가 될 당신의 PHP를 변경

: 위의 선이 포스트 변수가 존재하는지 확인합니다

$uid = (isset($_POST['userID'])) ? $_POST['userID'] : 0; 

. 존재하는 경우 $uid을 게시 된 값과 같게 설정합니다. 존재하지 않으면 $uid을 0으로 설정합니다.

나중에 코드에서 당신은 $uid의 값을 확인하고이 코드를 더 읽기 쉽게하고 또한 내가 PHP에서 데이터를 처리하기위한 모범 사례로 간주 팔로우 것이다 따라

if($uid==0) { 
    echo 'User ID not found'; 
} 

반응한다.

관련 문제