将多个复选框答案插入数据库

时间:2015-04-06 14:52:56

标签: php database checkbox mysqli

我有一个复选框列表,我想将每个检查项目插入数据库。由于它是一个复选框,我只有一个值传递给数据库,但我也传递了从先前数据库插入中获取的变量(主键)。

我的问题是我无法将其发布到数据库。我已尝试过多种方法通过这里的帖子来做到这一点,似乎没有任何工作。我很茫然。我也是PHP和mysqli的新手,所以我相信有更好的方法来做我想做的事情,所以请帮助我。

该表由三列组成(school_id,graduate_id,schoolName)。 school_id是AI主键,Gradu_id将填充从上一个查询中获取的变量$ graduateID。 这就是我所拥有的:

if (isset($_POST['school'])) {
$school=$_POST['school'];
$schoolQuery="";
foreach($school as $value) {
    if(!$schoolQuery) {
        $schoolQuery="INSERT INTO schoolReunion (graduate_id, schoolName) VALUES ($graduateID, '$value')";
    } else {
        $schoolQuery .= ", ($graduateID, '$value')";
        mysqli_store_result($schoolQuery);
    }
}
$schoolQuery .=";";
if (mysqli_multi_query ($schoolQuery)) {
    echo "Files have been updated successfully.";
} else {
    echo "Error: " . $schoolQuery . "<br/>" . mysqli_error($dbc);
}

}

当错误代码打印出来时,它看起来很好,但它只是没有发布任何内容并且没有给我任何错误。你能帮助我吗?

1 个答案:

答案 0 :(得分:0)

@Maximus&amp; @Eko Junaidi Salam,虽然你可能是对的,但我没有看到任何有关前端/表格存在问题的证据。

@jeroen,你完全正确。

  1. CarR正在处理单个连接查询,因此mysqli_query是合适的。
  2. 我建议在mysqli_real_escape_string()中包装用户提供的变量以覆盖查询漏洞。
  3. mysqli_store_result()将用于返回结果集的查询; mysqli_affected_rows()是使用INSERT / UPDATE / DELETE类型查询产生成功度量的函数。
  4. 最后,你纠正MrTechie是对的。我不认为他意识到查询连接。
  5. 假设表单提供了必要的值,我将建议一个新的查询构建部分:

    $schoolQuery="";
    foreach($school as $value){
        if(!$schoolQuery) {
            $schoolQuery="INSERT INTO schoolReunion (graduate_id,schoolName) VALUES ";
        }else{
            $schoolQuery.=",";
        }
        $schoolQuery.="('$graduateID','".mysqli_real_escape_string($dbc,$value)."')";
    }
    $schoolQuery.=";";
    

    $ graduateID没有逃脱,因为我假设它来自一个安全的地方; $ value被转义,因为它来自用户输入。

    现在提供构建的查询。您的代码有语法和逻辑错误,请尝试以下操作:

    if($schoolResult=mysqli_query($dbc,$schoolQuery)){
        $total_rows=mysqli_affected_rows($dbc);
        echo $total_rows," file",($total_rows!=1?"s have":" has")," been added.";
        // if($total_rows<1){echo "Query Logic Error, @ $schoolQuery";}
    }else{
        // echo "Query Syntax Error @ $schoolQuery<br>".mysqli_error($dbc);
    }
    

    在测试时取消注释错误行,然后重新评论或​​删除生产。 这应该足以解决您的代码片段中显而易见的所有问题。除此之外是假设的问题......

    由于您提到您正在使用先前的查询来声明$ graduateID,我将假设您已通过SELECT查询获取了该值。请务必检查您是否已使用

    mysqli_free_result($graduateResult);    // I assumed this variable name
    

    避免与后续查询发生冲突。这有时会被忽视。

    当您处理依赖于先决条件查询的查询时,最好使用mysqli_multi_query()。看来你的$ schoolQuery依赖于我所称的成功&#34; $ graduateQuery&#34;。如果您愿意,可以使用mysqli_multi_query()运行$ graduateQuery然后$ schoolQuery。为了帮助您实现此实现,我需要查看更多代码。如果您希望沿着这条路走下去,最好直接给我发消息或者发一个新帖子(在您自己尝试过之后。)以下是您完成工作的一半:Strict Standards: mysqli_next_result() error with mysqli_multi_query