mysql Update Statement取决于选中的复选框的数量
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql Update Statement取决于选中的复选框的数量相关的知识,希望对你有一定的参考价值。
问题陈述:
- 我有一个带有多个复选框字段的表单,我已经验证了它,因此用户可以选择最多9个复选框和至少1个jquery。
- 我使用Post方法收集Form检查的值。
- 我有12列的mysql表。
- 前3列是“id”,“rollnum”,“selectStatus”
- 通过在登录期间创建的会话变量,我得到学生的卷号。所以我可以在特定行上运行更新查询。
- 问题:如何根据用户检查的输入更新这9个主题列。注意:我将那些已检查的输入字段值存储在一个数组中。
- 码
<form action="index.php" id="form-3" method="post"> <input class="form-check-input" name="year-3-checkbox[]" type="checkbox" value="ucs303">UCS303 Operating Systems <input class="form-check-input" name="year-3-checkbox[]" type="checkbox" value="ucs406">UCS406 Data Structures and Algorithms <input class="form-check-input" name="year-3-checkbox[]" type="checkbox" value="uec401">UEC401 Analog Communication Systems <input class="form-check-input" name="year-3-checkbox[]" type="checkbox" value="uec612">UEC612 Digital System Design <input class="form-check-input" name="year-3-checkbox[]" type="checkbox" value="uec307">UEC307 Electromagnetic Field Theory & Trans Lines <input class="form-check-input" name="year-3-checkbox[]" type="checkbox" value="uec502">UEC502 Digital Signal Processing <input class="form-check-input" name="year-3-checkbox[]" type="checkbox" value="uec510">UEC510 Computer Architecture <button type="submit" name="year-3-submit">Submit Selection</button> </form> <?php if(isset($_POST['year-3-submit'])){ if(!empty($_POST['year-3-checkbox'])){ $subjectCheckList = array(); $subjectCheckList = $_POST['year-3-checkbox']; } } ?>
- 这取决于用户选择了多少复选框。
- 我不知道怎么写UPDATE sql查询更新列数==数组大小的值。
例如:用户1选择了3个复选框和提交的表单,我们有3个表和UPDATE 3列表的数组。用户1选择了6个复选框和提交的表单,我们有大小为6和UPDATE 6列表的数组。
- 我不想为所有可能的数组大小编写9个switch case语句。任何的想法?请?
根据OP的评论,您可以使代码通用如下:
// Check if atleast one subject has been selected
$selectedSubjects = array_filter($subjectCheckList);
// If no subject selected
if (empty($selectedSubjects)) {
$sql = "UPDATE subjectmaster
SET substatus = 0
WHERE rollno = '" . mysqli_real_escape_string($rollnumber) . "'";
} else {
// Initialize the sql string
$sql = "UPDATE subjectmaster
SET substatus = 1 ";
$i = 1;
foreach ($subjectCheckList as $subject) {
$sql .= ", sub" . $i . " = '" . mysqli_real_escape_string($subject) . "' ";
}
$sql .= " WHERE rollno = '" . mysqli_real_escape_string($rollnumber) . "'";
}
另外,请注意使用mysqli_real_escape_string
。它有助于防止SQL注入。有关防止SQL注入的更好方法,您可以检查How can I prevent SQL injection in PHP?
那么,首先不清楚每列的默认值是什么。由于您的MySQL列是由数字(sub1,sub2等)设置的,因此您的表单应相应地表示它们,并使用正确的值。例如:
<input class="form-check-input" name="year-3-checkbox[]" type="checkbox" value="1">
这样,您可以轻松循环并更新表(我假设子列是TINYINT(1)DEFAULT NULL):
<?php
if(isset($_POST['year-3-submit'])){
if(!empty($_POST['year-3-checkbox'])){
$subjectCheckList = array();
$query = "UPDATE table SET ";
foreach ($_POST['year-3-checkbox'] as $key => $value) {
$query .= " sub" . $value . " = 1, "
}
$query = substr($query, 0, -1);
}
}
?>
希望这有助于盖伊
您还可以使用array_filter,array_combine和array_slice。
<?php
$subs = [':sub1',
':sub2',
':sub3',
':sub4',
':sub5',
':sub6',
':sub7',
':sub8',
':sub9'
];
// use $dataFromForm = array_filter($_POST['year-3-checkbox'])
$dataFromForm = ['11111',
'222222',
'3333333'];
$dbh = new PDO('mysql:host=localhost;dbname=test', 'root', '*******');
$sql = 'UPDATE test SET sub1 = :sub1, sub2 = :sub2, sub3 = :sub3, sub4 = :sub4, sub5 = :sub5, sub6 = :sub6, sub7 = :sub7, sub8 = :sub8, sub9 = :sub9';
$sth = $dbh->prepare($sql);
$sth->execute(array_combine(array_slice($subs, 0, count($dataFromForm), $dataFromForm)));
以上是关于mysql Update Statement取决于选中的复选框的数量的主要内容,如果未能解决你的问题,请参考以下文章
mySQL on copy,update ... IF statement Question
mysql数据库__Jdbc直接操作__Statement__update
MYSQL 之 JDBC: 增删改查通过Statement执行更新操作
Can’t update table ‘xxx’ in stored function/trigger because it is already used by statement which in