1

さて、最初に、この質問が以前に尋ねられたことがあるかどうかをお詫びします。過去12時間、何百ものフォーラムスレッドをふるいにかけましたが、この質問に正確に答えるスレッドがまだ見つかりませんでした。

私が作成したページには、ユーザーがログインすると自動入力されるユーザーリストがあり、各ユーザーには、ホストがユーザーを選択して必要に応じて削除できるチェックボックスがあります。jQueryを使用して配列文字列をphpページに送信し、そこで文字列を分解し、ユーザーIDを調べて、渡されたIDをデータベースから削除しようとしています。複数のユーザーを選択しない限り、すべてが非常にうまく機能します。複数のユーザーを選択して配列をphpハンドラーに渡すと、配列は分解されますが、配列の最後の値のみが保持され、残りはスクリプトのブラックホールのどこかで失われます。

これが私のjavascriptページからの私のコードです:

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';
}
}

私のJavaScriptでわかるように、アラートが設定されているので、送信されている情報が正しいことを確認できます。アラートからわかる限り、それは","区切られた配列であるため、phpで使用しています。それを爆発させる側。

これをforeachループで実行すると、配列の最後の項目の値しか取得できない理由を理解しようとしています。

どんな助けでも大歓迎であり、将来のコーディングの課題のために私の髪を救うかもしれません。

ありがとう

4

2 に答える 2

6

del_idsjQuery 呼び出しのキー名を変更してload、空の括弧セットを含めるだけです。

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

PHP では、trimandを使用する代わりにexplode、値は既に配列になっているため、直接アクセスできます。

$ids = $_POST['del_ids'];
于 2009-12-26T06:15:31.683 に答える
4

Ajaxリクエストを行う前に、配列を文字列に変換する必要があります。これは、次のjoinメソッドで実行できます。

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);
}

何が起こっているのかというと、Arrayオブジェクトを送信すると、の値がdel_idsAjaxリクエストのPOSTパラメーターで繰り返されます。

img1

これが、実際には同じパラメータであるため、最後の要素のみを取得する理由です。

ただし、配列から文字列を作成すると、サーバー側で期待どおりにパラメーターの値が送信されます。

img2

于 2009-12-26T06:04:43.793 に答える