Question

Ok, d'abord, j'applogize si cette question a été posée, je l'ai passé les 12 dernières heures passant au crible des centaines de discussions du forum et n'ont pas trouvé un qui répond à cette question encore exactement ici va donc.

J'ai une page que je construit qui a une liste des utilisateurs qui autopopulated que les utilisateurs se connectent, et chaque utilisateur dispose d'une case à cocher qui permet à l'hôte de sélectionner les utilisateurs et les enlever si nécessaire. J'utilise jQuery pour envoyer une chaîne de tableau à une page php où je tente de faire exploser la chaîne, à pied à travers les userids et enlever les ids passé de notre base de données. Tout fonctionne très bien, à moins que je sélectionne plus d'un utilisateur. Lorsque je sélectionne plus d'un utilisateur et passer le tableau au gestionnaire de php, il explose le tableau, mais ne conserve que la dernière valeur du tableau, le reste est perdu quelque part dans le trou noir de script.

Voici mon code de ma page 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);
}

ce tableau est ensuite transmis à la page de commande de php où il est manipulé par:

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

Comme vous pouvez le voir sur mon javascript, j'ai une alerte mis en place pour que je puisse vérifier que les informations envoyées sont correctes, pour autant que je peux dire de cette alerte, il est un tableau délimité "," c'est ce que je suis à l'aide du côté de php faire exploser.

Je suis à mon esprit fin à essayer de comprendre pourquoi quand je lance ce à travers la boucle foreach je reçois seulement la valeur du dernier élément du tableau.

Toute aide serait grandement appréciée et peut sauver mes cheveux pour un futur codage Challanges.

Merci

Était-ce utile?

La solution

Il suffit de changer votre nom clé pour del_ids dans l'appel load jQuery pour inclure un ensemble vide de parenthèses:

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

Maintenant, dans le PHP, au lieu d'utiliser trim et explode, les valeurs seront déjà dans un tableau, vous pouvez donc y accéder directement:

$ids = $_POST['del_ids'];

Autres conseils

Vous devez convertir votre tableau à la chaîne avant de faire la demande Ajax, vous pouvez le faire avec le join méthode :

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

Qu'est-ce qu'il se passe est que lorsque vous envoyez l'objet Array, la valeur de del_ids se répète sur les paramètres POST demande Ajax:

C'est pourquoi vous obtenez seulement le dernier élément, car il est vraiment le même paramètre.

Mais si vous faites une chaîne à partir de votre tableau, il affichera la valeur du paramètre que vous attendez sur le côté serveur:

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top