PHP使用复选框进行多次INSERT

时间:2010-09-10 15:26:29

标签: php forms checkbox

到目前为止,我已经完成了这段代码:

$assign = $_POST['assign'];

if(!empty($name) && !empty($description) && !empty($deadline))
{
    if(validateDate($deadline))
    {
        $final_deadline = strtotime($deadline);

        $sql .= "INSERT INTO projects
                (project_id, project_name, project_description, project_deadline, project_status, project_priority)
                VALUES ('" . $project_id . "', '" . $name . "', '" . $description . "', '" . $final_deadline . "', '" . $status . "', '" . $priority . "');";

        if(is_array($assignments))
        {
            foreach($assignments as $assigned_user)
            {
                $sql .= "INSERT INTO assignments (user_id, project_id) VALUES('" . $assigned_user . "', '" . $project_id . "');";
            }
        }
        else
        {
            echo '<br /><br />not an array<br />';
        }

        $result = mysql_query($sql) or die(mysql_error());

        echo '<br />' . var_dump($assignments);
    }
    else
    {
        $_SESSION['ERROR'] = "Not a valid deadline";
        header("Location: dashboard.php");
    }
}

哪个会使用此复选框列表:

<input type="checkbox" value="<?php echo $row['user_id']; ?>" id="<?php echo $row['username']; ?>" class="usercheckbox" name="assign[]" />

问题出现的时候,我提交的表单是为每个复选框插入一条记录,它返回一个空数组......

它说:

  

注意:未定义的索引:分配   [...]第41行

     

不是数组

     

NULL

所以基本上复选框什么都没有,复选框中已经有值,assign[]是正确的,现在我不知道在提交表单时它没有包含任何内容的问题。< / p>

5 个答案:

答案 0 :(得分:3)

是否选中了任何复选框?如果您提交的表单未选中所有框,则不会发布任何内容。

如果您希望警告消息消失,请在设置$ assign之前添加if(isset($_POST['assign']))。然后添加一个else { $assign = array() }这将初始化$ assign到一个空数组,这样你就不会收到更多关于在null状态下使用$ assign的警告。

答案 1 :(得分:2)

您在FORM代码中使用assign [],在PHP代码中使用$ assignments,这些变成了两个不同的变量。

<击> 2。当检查复选框时,我认为值变成'已检查'而不是一个值(这可能是错误的,因为我这样做了一段时间)

编辑我错了,它确实使用了值

答案 2 :(得分:0)

你确定你的FORM正在使用POST方法吗?

答案 3 :(得分:0)

第一个意图是我认为你没有使用表单标签或错误的方法属性。

<form method="post" action="target.php">
....
</form>

如果不是这种情况,请尝试在Post数组上使用var_dump

var_dump($_POST);
在目标PHP文件中

,如果它是空的,则没有任何发送。我记得没错,如果选中了一个复选框,只会进入数组,所以请尝试使用

if(isset($_POST['assign'])){
   //...
}else{
   //What to do if it isn't set.
}

如果您无法解决问题,请再次询问并发布var_dump。

答案 4 :(得分:-1)

你的代码是对的。尝试$ _REQUEST []而不是$ _POST。确保在结算前至少选中了一个复选框。