我正在尝试在表格中创建一个编辑表单,如果进行了更改,我想在数据库中替换它。我正在使用下表。
<?php
$query = "SELECT * FROM jos_ib_ponude_stavke WHERE BrojPonude = $id";
$q=$conn->query($query);
?>
我做的第一件事是在表格中打印值,这一步很好。
<form method="post" action="">
<button type="submit" class="btn btn-success" id="submit" name="submit">Snimi</button>
<table class="table table-bordered table-hover">
<thead>
<tr class="bg bg-primary">
<th class="text-center">Opis Radova</th>
<th class="text-center">Jm</th>
<th class="text-center">Kolicina</th>
<th class="text-center">Cijena</th>
<th class="text-center">Rabat</th>
</tr>
</thead>
<tbody>
<tr>
<?php while ($r=$q->fetch()):?>
<td><input type="text" name='opis_edit[]' value="<?php echo $r['OpisRadova']?>" class="form-control"/></td>
<td class="col-md-1"><input type="text" name='jm_edit[]' value="<?php echo $r['Jm'] ?>" class="form-control"/></td>
<td class="col-md-1"><input type="text" name='kolicina_edit[]' value="<?php echo $r['Kolicina'] ?>" class="form-control"/></td>
<td class="col-md-1"><input type="text" name='cijena_edit[]' value="<?php echo $r['Cijena'] ?>" class="form-control"/></td>
<td class="col-md-1"><input type="number" name='rabat_edit[]' value="<?php echo $r['Rbt'] ?>" class="form-control"/></td>
</tr>
<tr></tr>
</tbody>
<?php endwhile; ?>
</table>
</form>
一旦我点击提交,我就会获得数组中的所有值。
$br_ponude = $_GET['Id'];
$opis_post = $_POST['opis_edit'];
$jm_post = $_POST['jm_edit'];
$kolicina_post = $_POST['kolicina_edit'];
$cijena_post = $_POST['cijena_edit'];
$rabat_post = $_POST['rabat_edit'];
$pdv_post = "17,00";
我得到了所有的价值观。问题出现在下面的陈述中。
for ($i=0; $i < sizeof($opis_post) ; $i++)
{
$iznosbpdv = $cijena_post[$i] * $kolicina_post[$i]; // izracunaj iznos bez pdva i bez rabata
if ($rabat_post !=0)
{
$rbt = ($cijena_post[$i] * $kolicina_post[$i]) -
($cijena_post[$i] * $kolicina_post[$i] * $rabat_post[$i] /100);
}
else {
$rbt = 1.00;
}
$query_stavke = $conn->prepare("UPDATE jos_ib_ponude_stavke SET OpisRadova=:opis, Jm=:jm,Kolicina=:kolicina,
Cijena=:cijena, Rbt=:rbt, Pdv=:pdv, IznosBPDV=:iznosbpdv, IznosRbt=:iznosrbt
WHERE BrojPonude = '$br_ponude'");
$query_stavke->bindParam(':opis',$opis_post[$i]);
$query_stavke->bindParam(':jm',$jm_post[$i]);
$query_stavke->bindParam(':kolicina',$kolicina_post[$i]);
$query_stavke->bindParam(':cijena',$cijena_post[$i]);
$query_stavke->bindParam(':rbt',$rabat_post[$i]);
$query_stavke->bindParam(':pdv',$pdv_post);
$query_stavke->bindParam(':iznosbpdv',$iznosbpdv);
$query_stavke->bindParam(':iznosrbt',$rbt);
$query_stavke->execute();
}
执行语句后,表中的所有行都相同。我使用类似的脚本插入,它工作正常。任何帮助或建议表示赞赏!
答案 0 :(得分:1)
首先,使用PDO的引用变量功能而不是不断地重新绑定事物可能更有效。它不需要。
此外,您在查询中有$ br_ponude而不是绑定参数。这也没有帮助。由于查询字符串只生成一次。所以你总是一遍又一遍地更新同样的东西。
所以对于这些缺陷。现在是错误
使用您的语句,您将更新用户ID匹配的每一行。
WHERE BrojPonude = :BrojPonude
这告诉sql数据库:BrojPunde =此值的任何记录都会使用这些值更新它。
所以你的程序所做的就是每次循环更新每一行。 现在我不熟悉您的语言,但您需要在where语句中添加一个额外的选项以选择要更新的特定行
WHERE BrojPonude = :BrojPonude AND SecondSelect = :SelectionParam
$query_stavke = $conn->prepare("UPDATE jos_ib_ponude_stavke SET OpisRadova=:opis, Jm=:jm,Kolicina=:kolicina,
Cijena=:cijena, Rbt=:rbt, Pdv=:pdv, IznosBPDV=:iznosbpdv, IznosRbt=:iznosrbt
WHERE BrojPonude = :BrojPonude AND SecondSelect = :SelectionParam");// <-- dont ever use local variables.
$query_stavke->bindParam(':opis',$opis_post_insert);
$query_stavke->bindParam(':jm',$jm_post_insert;
$query_stavke->bindParam(':kolicina',$kolicina_post_insert);
$query_stavke->bindParam(':cijena',$cijena_post_insert);
$query_stavke->bindParam(':rbt',$rabat_post_insert);
$query_stavke->bindParam(':pdv',$pdv_post_insert);
$query_stavke->bindParam(':iznosbpdv',$iznosbpdv_insert);
$query_stavke->bindParam(':iznosrbt',$rbt_insert);
$query_stavke->bindparam(':BrojPonude',$br_ponude); // <-----
$query_stavke->bindparam(':SecondSelect ',$SecondSelect);
for ($i=0; $i < sizeof($opis_post) ; $i++)
{
$iznosbpdv_insert = $cijena_post[$i] * $kolicina_post[$i]; // izracunaj iznos bez pdva i bez rabata
if ($rabat_post !=0)
{
$rbt_insert = ($cijena_post[$i] * $kolicina_post[$i]) -
($cijena_post[$i] * $kolicina_post[$i] * $rabat_post[$i] /100);
}
else {
$rbt_insert = 1.00;
}
$opis_post_insert = $opis_post[$i];
$jm_post_insert = $jm_post[$i];
$kolicina_post_insert = $kolicina_post[$i];
$cijena_post_insert = $cijena_post[$i];
$rabat_post_insert = $rabat_post[$i];
$execres = $query_stavke->execute();
}