首页 > 解决方案 > 如何将多项选择值放入 SQL 表行

问题描述

我有这个 html 表单,它应该像调查一样工作:

<body class="container">
        <form method = "post">
            <h4>Scheint morgen die Sonne?</h4>
            <input name = "sonne" type="radio" value="Ja">Ja<br>
            <input name = "sonne" type="radio" value="Nein">Nein
            <br>
            <br>
            <h4>Welches Eis isst du am liebsten?</h4>
            <input type="checkbox" name="erd" value="erdbeere">Erdbeere<br>
            <input type="checkbox" name="him" value="himbeere">Himbeere<br>
            <input type="checkbox" name="schok" value="schokolade">Schokolode<br>
            <input type="checkbox" name="van" value="vanille">Vanille<br>
            <br>
            <input name="anwenden" class="btn btn-info" type ="submit" value ="Anwenden">
        </form>
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js"></script>
    </body>

我喜欢通过单击提交按钮将单击的选项保存到 SQL 表中。第一个问题是单选按钮,其他问题是具有多项选择可能性的复选框。SQL 中的行都是boolean类型。

我总是在提交6行后得到一个"1"。其他的是"0". 相反,我喜欢只有一行带有单击的值作为"1""0"取决于所选择的内容。

那么我怎样才能在 PHP 中做到这一点呢?

if ($_POST['email'] == 'Ja'){ 
            $query = "INSERT INTO auswahl (sonne) VALUES ('1')";
        } else {   
            $query = "INSERT INTO auswahl (sonne) VALUES ('0')";
        } 

        if ($_POST['erd']){ 
            $query = "INSERT INTO auswahl (erdbeere) VALUES ('1')"; 
        } else {   
            $query = "INSERT INTO auswahl (erdbeere) VALUES ('0')";
        } 

        if ($_POST['him']){ 
            $query = "INSERT INTO auswahl (himbeere) VALUES ('1')";
        } else {   
            $query = "INSERT INTO auswahl (himbeere) VALUES ('0')";
        } 

        if ($_POST['schok']){ 
            $query = "INSERT INTO auswahl (schokolade) VALUES ('1')"; 
        } else {   
            $query = "INSERT INTO auswahl (schokolade) VALUES ('0')";
        } 

        if ($_POST['van']){ 
            $query = "INSERT INTO auswahl (vanille) VALUES ('1')";
        } else {   
            $query = "INSERT INTO auswahl (vanille) VALUES ('0')";
        }
        mysqli_query($link, $query);

标签: phpsql

解决方案


鉴于您选择的数据库设置,您可以执行以下操作:

if (isset($_POST['email'])) {

   $sonne      = ($_POST['email'] == 'Ja') ? '1' : '0';
   $erdbeere   = isset($_POST['erd'])      ? '1' : '0';
   $himbeere   = isset($_POST['him'])      ? '1' : '0';
   $schokolade = isset($_POST['schok'])    ? '1' : '0';
   $vanille    = isset($_POST['van'])      ? '1' : '0';

   $query = "INSERT INTO auswahl (sonne,
                                  erdbeere,  
                                  himbeere,  
                                  schokolade,
                                  vanille) VALUES ($sonne,     
                                                   $erdbeere,  
                                                   $himbeere,  
                                                   $schokolade,
                                                   $vanille)";

    mysqli_query($link, $query);   
}

我将所有答案合并到一个插入查询中。

这个... ? ... : ...东西叫做三元运算符

笔记:

  1. 您只能将这些 PHP 变量直接插入到查询中,因为您知道它们将始终为零或一。在所有其他情况下,使用准备好的语句来防止SQL 注入
  2. 为什么将事物缩写为erdand him?这对可读性有帮助吗?
  3. 你的数据库设计很差。假设您有 20 个问题,您的数据库中需要多少列?这不是问题的一部分,因此我不会展示替代方案,但您应该重新考虑这种设计。

推荐阅读