好的,首先,如果之前已经询问了这个问题,我会进行applogize,我花了过去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循环运行时,我只得到数组中最后一项的值。
任何帮助都会受到高度赞赏,可能会为以后的编码挑战而保留我的头发。
由于
答案 0 :(得分:6)
只需在jQuery del_ids
调用中更改load
的密钥名称,即可包含一组空括号:
jQuery("#rem_msg").load(controlpage, {AdmFnc: "rem_user", "del_ids[ ]": ids}, getUsers);
现在,在PHP中,不是使用trim
和explode
,而是值已经在数组中,因此您可以直接访问它们:
$ids = $_POST['del_ids'];
答案 1 :(得分: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_ids
的值会在Ajax请求POST参数上重复:
这就是为什么你只获得最后一个元素,因为它实际上是相同的参数。
但是如果从数组中创建一个字符串,它将在服务器端发布参数的值: