【发布时间】:2021-11-27 15:54:02
【问题描述】:
我正在尝试从 html 表单更新 MySQL 表。
这是表格的一部分:
<div id="caricoModal" class="modal fade">
<div class="modal-dialog">
<form method="post" id="employeeForm">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title"><i class="fa fa-plus"></i> Edit User</h4>
</div>
<div class="modal-body">
<div class="form-group">
<label for="tipoOp" class="control-label">Operazione:</label>
<select id="tipo" name="tipo" class="form-control">
<option value="carico">Carico</option>
<option value="scarico">Scarico</option>
</select>
</div>
<div class="form-group">
<!-- Record list -->
<table border='0' style='border-collapse: collapse;' >
<tr style='background: whitesmoke;'>
<!-- Check/Uncheck All-->
<th>Username</th>
<th>Stato</th>
</tr>
<?php
$query = "SELECT * FROM users where stato='0'";
$result = mysqli_query($conn,$query);
while($row = mysqli_fetch_array($result) ){
$id = $row['id'];
$stato = $row['stato'];
?>
<tr>
<!-- Checkbox -->
<td><input type='checkbox' name='update[]' value='<?= $id ?>' ></td>
<td><?= $id ?></td>
<td><input type='number' name='stato_<?= $id ?>' value='<?= $stato ?>' ></td>
</tr>
<?php
}
?>
</table>
</div>
<div class="form-group">
<label for="name" class="control-label">Data Formulario</label>
<input type="date" class="form-control" id="datafr" name="datafr" placeholder="Data Formulario" value="<?php echo date('Y-m-d'); ?>" required>
</div>
当我提交对话框表单时,我调用了一个在我的表中添加新行的方法;我会根据复选框的选择进行查询。
这是添加新行的方法:
public function addCarico(){
$insertQuery = "INSERT INTO ".$this->empTable."
(data_fr, data_trasporto, codice_eer, stato_fisico,
classi_pericolo, formulario, produttore, trasportatore,
destinatario, quantità, note, carico, stato_carico)
VALUES ('".$_POST["datafr"]."', '".$_POST["datatr"]."',
'".$_POST["eer"]."', '".$_POST["statof"]."',
'".$_POST["pericolo"]."', '".$_POST["fr"]."',
'".$_POST["prod"]."', '".$_POST["trasp"]."',
'".$_POST["dest"]."', '".$_POST["qta"]."',
'".$_POST["note"]."', '1', '0')";
$isUpdated = mysqli_query($this->dbConnect, $insertQuery);
print_r($_POST['update']);
}
我尝试添加此代码:
if(isset($_POST['update'])){
foreach($_POST['update'] as $updateid){
$stato = $_POST['stato_'.$updateid];
if($stato !=''){
$updateUser = "UPDATE users SET
stato='1'
WHERE id=".$updateid;
mysqli_query($con,$updateUser);
}
}
}
但我不明白,因为表格没有更新..
【问题讨论】:
-
您的脚本对SQL Injection Attack 开放。即使是if you are escaping inputs, its not safe!,您也应该始终在
MYSQLI_或PDOAPI 中使用prepared parameterized statements,而不是将用户提供的值连接到查询中。永远不要相信任何用户输入! -
良好的代码缩进将帮助我们阅读代码,更重要的是它会帮助您调试代码 Take a quick look at a coding standard 为您自己的利益。可能会要求您修改此代码
-
你是否开启了错误报告
-
要从 PHP 中获取错误即使在 LIVE 环境中,请将这 4 行 在调试时临时添加到任何
MYSQLI_的顶部您要调试的基于脚本ini_set('display_errors', 1); ini_set('log_errors',1); error_reporting(E_ALL); mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);。这将强制任何MYSQLI_错误生成一个您可以在浏览器上看到的异常以及正常的 PHP 错误。 -
你知道代码是否进入
if(isset($_POST['update'])){