2015-02-24 119 views
0

我想在表中编辑表单,并且如果发生更改,我想在数据库中将其替换。我正在使用下面的表格。更新脚本设置具有相同值的所有行

<?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(); 
} 

一旦执行语句,表中的所有行都是相同的。我使用类似的插入脚本,它工作正常。任何帮助或建议表示赞赏!

回答

1

首先,使用PDO的引用变量功能可能更有效,而不是经常重新绑定事物。它不需要。

此外,您在查询中有$ br_ponude而不是作为绑定参数。这也没有帮助。由于查询字符串只获取一次。所以你总是一遍又一遍地更新相同的东西。

所以为了瑕疵。现在的错误

随着你的声明,你正在更新用户ID匹配的每一行。

WHERE BrojPonude = :BrojPonude

这告诉SQL数据库:任何记录,其中BrojPunde =该值与这些值更新。

所以你的程序做的是更新每一个循环的每一行。 现在我不熟悉你的语言,但你需要在WHERE语句添加一个额外的选择,以选择specifc行更新

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(); 

}

+0

谢谢你这么多欢迎帮助 – user3651819 2015-02-24 13:41:54

+0

:-)我建议您深入了解Object Reference by value是如何工作的,以了解PDO的工作原理。 – Tschallacka 2015-02-24 13:53:35

相关问题