【问题标题】:PHP explode is removing the first array valuePHP 爆炸正在删除第一个数组值
【发布时间】:2009-12-26 05:53:26
【问题描述】:

好的,首先,我承认以前是否有人问过这个问题,我在过去的 12 个小时里筛选了数百个论坛帖子,但还没有找到一个可以准确回答这个问题的帖子,所以就这样吧。

p>

我有一个我构建的页面,其中有一个用户列表,该用户列表在用户登录时自动填充,每个用户都有一个复选框,允许主机选择用户并在需要时将其删除。我正在使用 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 循环运行它时,我只能得到数组中最后一项的值。

任何帮助都将不胜感激,并且可以节省我的头发以应对未来的一些编码挑战。

谢谢

【问题讨论】:

    标签: php javascript jquery arrays explode


    【解决方案1】:

    只需在 jQuery load 调用中更改 del_ids 的键名以包含一组空括号:

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

    现在,在 PHP 中,而不是使用 trimexplode,这些值已经在一个数组中,因此您可以直接访问它们:

    $ids = $_POST['del_ids'];
    

    【讨论】:

    • 感谢您的回复,我已经测试了您的答案,但是当我转到 php 脚本时,当我通过“运行变量”时,我似乎无法访问正在发送的完整数组if" 语句,它只会被识别为单个值。
    • 好的,我收回了,我只是没有正确设置它,需要在括号中留一个空格,以便 php 将其识别为数组,一旦我这样做了,它就像一种魅力。非常感谢!
    • 你好,不客气。我想正确更新我的答案,所以你说它需要是"del_ids[ ]"
    • 没错,php对数组变量的识别有点挑剔。它将"del_ids[]" 读取为单个变量,它需要括号中的空格来将其识别为数组变量。
    【解决方案2】:

    您应该在发出 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 参数上重复:

    这就是为什么你只得到最后一个元素,因为它实际上是同一个参数。

    但是如果你从你的数组中创建一个字符串,它会按照你期望的那样在服务器端发布参数的值:

    【讨论】:

    • 很好的答案。我也不知道join 方法的默认值是逗号分隔。很高兴知道!
    • 感谢 Doug,您可以放心使用它,因为它由规范保证! bclary.com/2004/11/07/#a-15.4.4.5
    • 感谢您的回复,我已经测试了您的答案,当数组以字符串形式发送到 php 时,我已经测试了响应,foreach 循环仍然只影响最终值字符串。我想知道 foreach 循环是否有问题。
    猜你喜欢
    • 2013-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多