【问题标题】:How to insert Multiple Checkbox in different column in Database如何在数据库的不同列中插入多个复选框
【发布时间】:2019-12-03 11:35:47
【问题描述】:

我在这里遇到了一些问题,我无法从多个复选框中获取单个值。我想为每个刻度值 = 1 将其存储在不同的列中,该框在数据库中未打勾为 0。对于正常输入,我得到该值但不适用于复选框。你们能帮忙吗?

HTML 代码:这是我的 html 代码

<div class="col-sm-4">

                    <div class="form-group">
                        <label for="colour">Machine</label><br>
                        <input type="text" id="input_1">
                    </div><br>
                <input type="checkbox" name="Inspection[]" value="true"> Function<br>
                <input type="checkbox" name="Inspection[]" value="true"> Visual<br>
                <input type="checkbox" name="Inspection[]" value="true"> Sleeve<br>
                <input type="checkbox" name="Inspection[]" value="true"> Mail<br>

    </div>
<p><input type="button" id="add_btn" value="Save"></p>

JavaScript:我应该在哪里获取值并将其存储在数据库中。

$(document).on("click", "input#add_btn", function() { Addsave() });

function  Addsave()
{

    var Inspec1 = $("#input_1").val();
    var Inspec2 = $("input[name='Inspection']:checked").val();
    var Inspec3 = $("input[name='Inspection']:checked").val();
    var Inspec4 = $("input[name='Inspection']:checked").val();
    var Inspec5 = $("input[name='Inspection']:checked").val();

    var tables = ["example"];

    var AddObject = new Object();


        AddObject.column1    = Inspec1;
        AddObject.column2    = Inspec2;
        AddObject.column3    = Inspec3;
        AddObject.column4    = Inspec4;
        AddObject.column5    = Inspec5;


    var list = [AddObject];
    var objParams = JSON.stringify(list);

    var render  = function(){ renderAddExec(data);};
    insertExecute(list,tables,render);
}

昨天我在这里 stackoverflow 发现了这个,但每次我尝试,它都不起作用。

<?php

// Make a MySQL Connection
mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("test") or die(mysql_error());

$checkBox = $_POST['Inspection'];

if(isset($_POST['add_btn']))
{
    for ($i=0; $i<sizeof($checkBox); $i++)
        {
            $query="INSERT INTO example (column1,column2,column3,column4) VALUES ('" . $checkBox[$i] . "')";     

            mysql_query($query) or die (mysql_error() );
        }
    echo "Complete";

}

?>

【问题讨论】:

  • 请注意,mysql_* 函数已自 2013 年起弃用(在 PHP 5.5 中),并且自 PHP 7 起已删除(已发布2015 年)。这是因为它们存在严重 安全漏洞。 不要使用它们。请考虑升级您的 PHP 并改用MySQLiPDO,确保您还使用prepared statements 来防止SQL injection
  • 除此之外,您的nameInspection,但您正在检查Days$_POST,它从未设置过。
  • 另外,对于上面提到的问题,您将所有复选框的值设置为“true”,您必须考虑给它们适当的名称,即使您在存储时不使用它们。再次使用正确的形式将此值嵌入到您的 sql 查询中。
  • 很抱歉我已经重新编辑了它,Days 是因为我使用简单的表格进行了很多测试,但即使是简单的表格也可以得到输入,也许@Obsidian 是正确,我可能会尝试使用 PDO 的另一种方式。
  • @SergheiLeonenco 我将值设置为true,因为我希望将值插入到表的不同列中,每个复选框都有自己的列,它们并不意味着在同一列中。

标签: php html


【解决方案1】:
  1. 您的复选框从未被执行,因为您检查 if(isset($_POST['add_btn'])) 但您的提交按钮没有 任何名称,这只是 ID。
  2. 您使用JQuery 创建对象 需要提交。你把它分散到 3 个函数中,当它可以的时候 如果您需要 async,只需致电 ajax 即可完成。

我确实在我的本地主机上用纯 php 测试了你的代码,它的工作原理应该是这样。

<form action="post.php" method="post">
                <div class="col-sm-4">

                    <div class="form-group">
                        <label for="colour">Machine</label><br>
                        <input type="text" id="input_1">
                    </div><br>
                    <input type="checkbox" name="Inspection[]" value="true"> Function<br>
                    <input type="checkbox" name="Inspection[]" value="true"> Visual<br>
                    <input type="checkbox" name="Inspection[]" value="true"> Sleeve<br>
                    <input type="checkbox" name="Inspection[]" value="true"> Mail<br>

                </div>
            <!-- I added a name to button to catch the event on backend -->
            <p><input name="submit" type="submit" id="add_btn" value="submit"></p>
            </form>

post.php

if(isset($_POST['submit']))
{
    if(isset($_POST['Inspection']))
    {
        var_dump($_POST['Inspection']);
        foreach($_POST['Inspection'] as $val)
        {
            echo $val;
        }
    }
}

结果:

array (size=4)
  0 => string 'true' (length=4)
  1 => string 'true' (length=4)
  2 => string 'true' (length=4)
  3 => string 'true' (length=4)
truetruetruetrue

我使用 PDO 对您的代码的解决方案:

if($_POST()) //For debug check if it was post request
{
    for ($i=0; $i<sizeof($checkBox); $i++)
        {
            $stmt=$pdo->prepare("INSERT INTO example (column1,column2,column3,column4) VALUES (?,?,?,?)");     

            $stmt->execute($_POST['Inspection']);//array(true,true,true,true)
        }
    echo "Complete";

}

如何将 mysql 转换为 PDO,请查看此链接: PHP: Convert INSERT MySQLi to PDO

【讨论】:

  • @Triby 如果,假设选中了 2 个复选框,最后你会得到这个数组 [true,true],它将触发 PDO 执行。我建议或使用JQuery 来检查复选框是否被选中然后分配一个值,否则分配false,以获得正确的字段分配顺序。
猜你喜欢
  • 2020-04-22
  • 2022-01-26
  • 1970-01-01
  • 2017-10-11
  • 1970-01-01
  • 1970-01-01
  • 2022-07-28
  • 2021-03-20
  • 2015-11-06
相关资源
最近更新 更多