我是 PHP 编程新手。
我正在开发一个 PHP 项目,在该项目中,我使用每行一个复选框字段来填充 mysql 数据库中的动态表。
<?php
$sql = "select * from caseinstruction where fir_nos='$fir_nos'";
$result = $con->query($sql);
if ($result->num_rows > 0) {
// output data of each row
$i = 1;
while($row = $result->fetch_assoc()) {
echo "<tr><td class='text-center'>". $i++ ."</td>
<td><input type='text' value='{$row['Instructions']}' class='form-control input-sm' style='border:none'></td>
<td class='text-center form-group'><input type='checkbox' name='foo[]' value='1'></td>
</tr>\n";
}
}
?>
它工作完美。当我想用检查的值更新同一个 mysql 表时,就会出现问题。假设如果用户选中一个复选框,那么它将在 mysql 表中反射(reflect) 1,如果没有选中任何选项,那么它将在 mysql 表中反射(reflect) 0。
我绑定(bind)运行 foreach 命令,它会按照我的预期填充值,但是当我运行 update 命令时,它只反射(reflect) 0。请帮助我。
<?php
require('../php-includes/connect.php');
if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST"){
$fir_nos = $_POST['fir_nos'];
$cins = $_POST['foo'];
echo '<pre>';
print_r($cins);
echo '</pre>'
foreach ($$cins as $value) {
$sql="update mytable set report02='$value'";
$result = $con->query($sql);
}
}
我在这方面遗漏了一些东西。请帮我。提前感谢大家。
# | Instruction | value |
-------------------------
1 | abc | 1 | //checked
2 | cdf | 0 | //unckecked
3 | efg | 1 | //checked
-------------------------
最佳答案
您的代码中有一些错误:
首先:如果您希望能够获取选中了哪些复选框,则需要为每个复选框添加标识符。例如,如果您在表 caseinstruction 中有一个列 id
,您可以使用:
<input type='checkbox' name='foo[]' value='{$row['id']}'>
第二:您的代码中有一个拼写错误。将 $$cins
更改为 $cins
第三:我不知道您想对更新查询执行什么操作。由于您的示例没有指定任何 WHERE
子句,因此您只会收到多个更新查询,例如 update mytable set report02='83'
和 update mytable set report02 ='84'
等,这将在循环中再次使用一个值更新表中的所有行。
相反,您需要指定要更新的行和列,例如 update mytable set report02 = 1 where id = '83'
。例如:
<?php
require('../php-includes/connect.php');
if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST"){
$fir_nos = $_POST['fir_nos'];
$cins = $_POST['foo'];
foreach ($cins as $value) {
$sql="update mytable set report02 = 1 where id = '$value'";
$result = $con->query($sql);
}
}
我建议使用mysqli_real_escape_string()防止sql注入(inject)。出于性能原因,仅使用一次更新调用,而不是对每个复选框值调用一次:
<?php
require('../php-includes/connect.php');
if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST"){
$fir_nos = $_POST['fir_nos'];
$cins = $_POST['foo'];
$value = implode(',',$cins); // JOIN ALL ID INTO ONE COMMA SEPARATED STRING
$value = mysqli_real_escape_string($con, $value); //PREVENT SQL-INJECTION
// SET VALUE 1 FOR ALLA CHECKED:
$con->query("update mytable set report02 = 1 where id IN($value)");
// SET VALUE 0 FOR ALL THE REST IN THE TABLE:
$con->query("update mytable set report02 = 0 where id NOT IN($value)");
}
关于php - 使用 PHP 根据数组中的复选框值更新 mysql 数据库表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42732755/