2009-12-26 7 views
1

먼저이 질문에 대한 질문이 나오면 제가 사과드립니다. 지난 12 시간 동안 수백 개의 포럼 스레드를 거쳐이 질문에 대한 답변을 찾지 못했습니다. 정확하게 아직 여기에 간다.PHP가 폭발하여 첫 번째 배열 값을 제거합니다.

사용자가 로그인 할 때 자동으로 채워지는 사용자 목록이있는 페이지가 있으며 각 사용자는 호스트가 사용자를 선택하고 필요할 경우 제거하도록 허용하는 확인란을 가지고 있습니다. jQuery를 사용하여 문자열을 폭발시키려는 PHP 페이지에 배열 문자열을 보내고 userids를 거쳐 전달 된 ID를 데이터베이스에서 제거합니다. 둘 이상의 사용자를 선택하지 않으면 모두 잘 작동합니다. 둘 이상의 사용자를 선택하고 PHP 처리기에 배열을 전달하면 배열을 폭발 시키지만 배열의 마지막 값만 유지하며 그 나머지는 스크립팅의 블랙홀 어딘가에서 손실됩니다. 여기

내 자바 스크립트 페이지에서 내 코드입니다 :

function rem_user() { 
var ids = $('input:checkbox[id=del]:checked').map(function(){ 
    return this.value 
}).get(); 
alert(ids); 
jQuery("#rem_msg").load(controlpage, {AdmFnc: "rem_user", del_ids: ids}, getUsers); 
} 
이 배열은 다음에 의해 처리하는 페이지를 제어하는 ​​PHP로 전달됩니다

: 내 자바 스크립트에서 볼 수 있듯이

if (strcmp($AdmFnc, rem_user) == 0){ 
echo ""; 
$ids = trim($_POST['del_ids']); 
$ids = explode(',',$ids); 
if(is_array($ids)){ 
    foreach($ids as $userid){ 
     mysqli_query($dbc, "UPDATE webcastlogin SET logoutTime = '$current_time' WHERE userid = '$userid'") or die('Error setting logout time '.mysqli_error($dbc)); 
     mysqli_query($dbc, "DELETE FROM weekly_users WHERE userid = '$userid'") or die('Error removing users '.mysqli_error($dbc)); 
    } 
    echo 'Selected IDs removed'; 
} else if (empty($ids)) { 
    echo 'Code is wrong, no array sent'; 
} else { 
    mysqli_query($dbc, "UPDATE webcastlogin SET logoutTime = '$current_time' WHERE userid = '$ids'"); 
    mysqli_query($dbc, "DELETE FROM weekly_users WHERE userid = '$ids'"); 
    echo 'Selected ID removed'; 
} 
} 

, 나는 내가 보낸 정보가 올바른지 확인 할 수 있도록 경고를 설정했습니다. 경고에서 알 수있는 바로는 ","의 구분 된 배열이므로 PHP 측에서이를 사용하고 있습니다.

나는 foreach 루프를 통해 이것을 실행할 때 배열의 마지막 항목의 값만 가져 오는 이유를 알아 내려고 노력하고 있습니다.

어떤 도움을 주시면 감사하겠습니다. 향후 머리말을 쓰는 데 도움이 될 것입니다.

감사

답변

6

단지에서 del_ids에 대한 키 이름을 변경 jQuery를이 load 전화 브래킷의 빈 세트를 포함하는 대신 trimexplode를 사용하는

jQuery("#rem_msg").load(controlpage, {AdmFnc: "rem_user", "del_ids[ ]": ids}, getUsers); 

이제 PHP의를, 값이 이미있을 것입니다 배열로 직접 액세스 할 수 있습니다.

$ids = $_POST['del_ids']; 
+0

답장을 보내 주셔서 감사합니다, 나는 PHP 스크립트로 갈 때, 나는 "if"문을 통해 변수를 실행할 때 보내지고있는 전체 배열에 액세스 할 수없는 것처럼 보였습니다. 단일 값으로 인식됨. –

+0

좋아, 내가 다시 가져가, 난 그냥 제대로 설정하지 않았다면 PHP로 배열로 인식하기 위해 괄호 안에 공백이 필요하다. 일단 내가 한 일은 매력처럼 작동했다. 정말 고마워! –

+0

안녕하세요. 내 대답을 올바르게 업데이트하고 싶습니다. 그래서 del_ids [] "'가 필요하다고 말하고 있습니까? –

4

당신은 당신이 join 방법으로 할 수 있습니다, Ajax 요청을하기 전에 문자열 배열을 변환해야합니다 : 그것은 무엇 일어나는 것은 당신이 Array 객체를 보낼 때이다

function rem_user() { 
    var ids = $('input:checkbox[id=del]:checked').map(function(){ 
    return this.value 
    }).get().join(); // ids now is a comma separated string, made from the array 

    alert(ids); 
    jQuery("#rem_msg").load(controlpage, {AdmFnc: "rem_user", 
    del_ids: ids}, 
    getUsers); 
} 

, del_ids의 값은 아약스 요청 POST 매개 변수에 반복됩니다 :

img1

그래서 실제로 같은 매개 변수이기 때문에 마지막 요소 만 가져옵니다.

그러나 당신이 당신의 배열에서 문자열을 만들 경우 서버 측에 그것을 예상대로,이 매개 변수의 값을 게시 할 예정입니다 :

img2

+0

좋은 답변입니다. 나는 또한'join' 메쏘드의 기본값이 쉼표로 구분된다는 것을 전혀 모르고있었습니다. 대단하다! –

+1

Doug에게 감사드립니다. 스펙으로 보장되기 때문에 걱정하지 않아도됩니다! http://bclary.com/2004/11/07/#a-15.4.4.5 – CMS

+0

답장을 보내 주셔서 감사합니다. 답을 테스트 해 보았습니다. 배열이 php로 보내어지고 문자열을 테스트하는 동안 응답에서 foreach 루프는 여전히 문자열의 최종 값에만 영향을 미칩니다. foreach 루프에 문제가 있는지 궁금합니다. –

관련 문제