2015-02-24 2 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> 

Как только я попал в submit, я получаю все значения в массиве.

$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 внутри запроса, а не как связанный параметр. Это тоже не помогает. Так как строка запроса создается только один раз. поэтому вы постоянно обновляете одно и то же снова и снова.

Для устранения недостатков. Теперь для ошибки

С вашим заявлением вы обновляете КАЖДУЮ строку, где совпадает идентификатор пользователя.

WHERE BrojPonude = :BrojPonude

Это говорит базы данных SQL: Любая запись, где BrojPunde = обновить это значение его с этими значениями.

Так что ваша программа выполняет обновление каждой строки с каждым циклом. Теперь я не знаком с языком, но вам нужно добавить дополнительный выбор в заявлении где выбирает строки, специфические для обновления

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

+0

, вы можете :-) Я советую вам немного углубиться в то, как работает Object Reference по значению, чтобы понять, почему работает PDO. – Tschallacka

Смежные вопросы