php - 如何将多项选择值放入 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);
解决方案
鉴于您选择的数据库设置,您可以执行以下操作:
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);
}
我将所有答案合并到一个插入查询中。
这个... ? ... : ...
东西叫做三元运算符。
笔记:
- 您只能将这些 PHP 变量直接插入到查询中,因为您知道它们将始终为零或一。在所有其他情况下,使用准备好的语句来防止SQL 注入。
- 为什么将事物缩写为
erd
andhim
?这对可读性有帮助吗? - 你的数据库设计很差。假设您有 20 个问题,您的数据库中需要多少列?这不是问题的一部分,因此我不会展示替代方案,但您应该重新考虑这种设计。
推荐阅读
- ios - 来自tableview的pdf,包含100个单元格
- r - R Studio 编码
- unit-testing - 如何对名为 CoroutineScope.launch 的函数进行单元测试
- python - 如何将当前活动用户作为外键添加到 django 3 中的任务模型?
- javascript - 访问 Faker 图像时出现 UnhandledPromiseRejectionWarning 错误?
- java - 通过 R 设置多节点 h2o 集群:加入第二个节点时出现问题
- java - 尽管满足其条件,但方法从未达到 if 语句
- php - 使用 substr 获取可能不同长度的字符串
- excel - 从 Start_Date 到 End_Date 计算年份
- java - Apache Beam:分区转换后如何继续管道?