php - foreach循环,检查是否通过,显示错误数组

标签 php mysql sql

我有一个带有复选框的表格和一个允许用户“批准”的按钮,数据库中的一个简单的 1 表示他们已被批准。我想先检查一下用户是否已经获得批准,这样我就可以显示一条错误消息。然而,这段代码最终发生的情况是,出于某种原因,代码执行了底层的 sql,但按原样显示错误消息,或者当 !$check 始终显示成功消息时。我尝试了不同的变体,但我觉得问题出在我的 $check sql 逻辑上。我就是看不出来。

if ($_POST['doApprove'] == 'Approve') {
    if (!empty($_POST['u'])) {
        foreach ($_POST['u'] as $uid) {
            $id = filter($uid);
            $username[] = get_user_name_from_id($id);
            $check = Nemesis::select("approved", "users", "id = '{$id}' AND approved <> '1'");  // issue?
            $set_approve = Nemesis::update("users", "approved = '1'", "id = '{$id}'");
            if ($check) { // issue?
                $fail[] = $username;
            } elseif (!$set_approve) {
                $fail[] = $username;
            } else {
                $pass[] = $username;
                $user_details = Nemesis::select("*", "users", "id = '{$id}'");
                $ud_row = $user_details->fetch_assoc();
                authMail('register', $ud_row['user_email'], $ud_row['pwd'], $ud_row['user_name'], NULL, 'admin');
            }
        }
    }
    $msg = new Messages();
    if (!empty($pass)) {
        $passed = implode(', ', $pass);
        $message = "Approved: {$passed}";
        $msg->add('s', $message);
    }
    if(!empty($fail)){
        $failure = implode(', ', $fail);
        $message = "Could not approve {$failure}";
        $msg->add('e', $message);
    }
    redirect('users.php');
}

最佳答案

   if ($_POST['doApprove'] == 'Approve') {
    if (!empty($_POST['u'])) {
        foreach ($_POST['u'] as $uid) {
            $id = filter($uid);
            $username[] = get_user_name_from_id($id);
            $check = Nemesis::select("*", "users", "id = '{$id}'");
            $ud_row = $user_details->fetch_assoc();
            $set_approve = Nemesis::update("users", "approved = '1'", "id = '{$id}'");
            if ($ud_row['approved'] || !$set_approve) {
                $fail[] = $username;
            } else {
                $pass[] = $username;
                authMail('register', $ud_row['user_email'], $ud_row['pwd'], $ud_row['user_name'], NULL, 'admin');
            }
        }
    }
    $msg = new Messages();
    if (!empty($pass)) {
        $passed = implode(', ', $pass);
        $message = "Approved: {$passed}";
        $msg->add('s', $message);
    }
    if(!empty($fail)){
        $failure = implode(', ', $fail);
        $message = "Could not approve {$failure}";
        $msg->add('e', $message);
    }
    redirect('users.php');
}

关于php - foreach循环,检查是否通过,显示错误数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17435952/

相关文章:

php - 上传的文件应该重命名吗?

sql - 从一列创建多列

sql - SQL Server中计算余弦相似度的优化方法

php - MySQLi插入不带有md5哈希

php - 合并多个 SQL 查询的结果(无法使用 UNION,因为列名不同)

php - 如何在 Doctrine native 查询的结果中获取非映射列

php - mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows 等...期望参数 1 是资源

php - 使用 PHP 检查验证后如何将文件保存到服务器

php - 下拉列表中的 JSON 值显示 ID 号而不是数据库中的字符串

mysql - 在MySQL中,哪个更高效 : IFNULL or NULLIF?