динамические значения строк, неправильно обновленные в mysql php

Здесь я пытаюсь редактировать и обновлять свои динамические значения строк, используя php. Это мое редактирование страницы edit.php. он извлекает динамические строки данных из mysql отлично ..

$uid = (int)$_GET['id']; $tariff_query = mysql_query("SELECT * FROM ebvouchertariffs WHERE VoucherID_Fk = $uid"); if(mysql_num_rows($tariff_query)>=1) { echo "<table> <tr> <td>SL.NO</td> <td>DATE</td> <td>PARTICULARS</td> <td>NO OF NIGHTS</td> <td>RATE</td> <td>PRICE</td> <td>TAX %</td> </tr>"; while($t_row = mysql_fetch_array($tariff_query)) { echo "<tr> <td><input type=text name=slno[] value= ". $t_row['TariffSlNo'] ."></td> <td><input type=text value=". $t_row['TariffDate'] ." name=date[] id=SelectedDate onClick=GetDate(this); readonly=readonly/></td> <td><input type=text name=particulars[] placeholder=\"Description\" value=". $t_row['TariffParticulars'] ."></td> <td>"; echo "<select name=noofnights[] value= >"; echo "<option>" . $t_row['NoOfNights'] . "</option>"; echo "<option></option>"; echo "<option value=1>1</option> <option value=2>2</option> <!-- cutted --> <option value=20>20</option>"; echo "</select>"; echo " <input type=text onblur=\"this.value=addzeros(this.value)\" onKeyUp=\"return valtxt(this)\" name=rate[] value=". $t_row['TariffRate'] ."> <input type=text name=price[] value=". $t_row['TariffPrice'] ." readonly=readonly> <input type=text name=tax[] onblur=\"this.value=addzeros(this.value)\" onKeyUp=\"return valtxt(this)\" value=". $t_row['TariffTax'] ." > <input type=hidden name=taxtotal[] readonly=readonly value= ></td> </tr>"; } } 

Это мое обновление страницы update.php. он неправильно обновляет данные.

Перед обновлением:

введите описание изображения здесь

После обновления:

введите описание изображения здесь

Я редактировал все строки и столбцы, и когда я обновлял ваучер, он всегда обновляет последние значения строк во всех строках. вы можете видеть на этом изображении. Но я использую параметр редактирования и обновления для отдельного текстового поля. это работает нормально. Динамические значения строк неправильно обновлены в базе данных. для генерации динамических строк я использую javascript … как решить эту проблему?

 include("config.php"); if(isset($_POST['submit_val'])) { $uid = (int)$_POST["edited"]; foreach( $_POST['slno'] as $key=>$slno ) { $e_date = $_POST['date'][$key]; $e_particulars = $_POST['particulars'][$key]; $e_noofnights = $_POST['noofnights'][$key]; $e_rate = $_POST['rate'][$key]; $e_price = $_POST['price'][$key]; $e_tax = $_POST['tax'][$key]; $e_nettotal = $_POST['nettotal']; $e_totalamount = $_POST['totalamount']; $e_finaltotal = $_POST['finaltotal']; $e_slno = mysql_real_escape_string($slno); $e_date = mysql_real_escape_string($e_date); $e_particualrs = mysql_real_escape_string($e_particulars); $e_noofnights = mysql_real_escape_string($e_noofnights); $e_rate = mysql_real_escape_string($e_rate); $e_price = mysql_real_escape_string($e_price); $e_tax = mysql_real_escape_string($e_tax); $e_nettotal = mysql_real_escape_string($e_nettotal); $e_totalamount = mysql_real_escape_string($e_totalamount); $e_finaltotal = mysql_real_escape_string($e_finaltotal); $e_tariff = "UPDATE ebvouchertariffs SET TariffSlNo = '$e_slno', TariffDate = '$e_date', TariffParticulars = '$e_particulars', NoOfNights = '$e_noofnights', TariffRate = '$e_rate', TariffPrice = '$e_price', TariffTax = '$e_tax', TariffNetTotal = '$e_nettotal', TariffAddTotal = '$e_totalamount', TariffFinalTotal = '$e_finaltotal', ModifiedOn = NOW() WHERE VoucherID_Fk = '$uid'"; } mysql_query($e_tariff)or die(mysql_error()); mysql_close($link); } в include("config.php"); if(isset($_POST['submit_val'])) { $uid = (int)$_POST["edited"]; foreach( $_POST['slno'] as $key=>$slno ) { $e_date = $_POST['date'][$key]; $e_particulars = $_POST['particulars'][$key]; $e_noofnights = $_POST['noofnights'][$key]; $e_rate = $_POST['rate'][$key]; $e_price = $_POST['price'][$key]; $e_tax = $_POST['tax'][$key]; $e_nettotal = $_POST['nettotal']; $e_totalamount = $_POST['totalamount']; $e_finaltotal = $_POST['finaltotal']; $e_slno = mysql_real_escape_string($slno); $e_date = mysql_real_escape_string($e_date); $e_particualrs = mysql_real_escape_string($e_particulars); $e_noofnights = mysql_real_escape_string($e_noofnights); $e_rate = mysql_real_escape_string($e_rate); $e_price = mysql_real_escape_string($e_price); $e_tax = mysql_real_escape_string($e_tax); $e_nettotal = mysql_real_escape_string($e_nettotal); $e_totalamount = mysql_real_escape_string($e_totalamount); $e_finaltotal = mysql_real_escape_string($e_finaltotal); $e_tariff = "UPDATE ebvouchertariffs SET TariffSlNo = '$e_slno', TariffDate = '$e_date', TariffParticulars = '$e_particulars', NoOfNights = '$e_noofnights', TariffRate = '$e_rate', TariffPrice = '$e_price', TariffTax = '$e_tax', TariffNetTotal = '$e_nettotal', TariffAddTotal = '$e_totalamount', TariffFinalTotal = '$e_finaltotal', ModifiedOn = NOW() WHERE VoucherID_Fk = '$uid'"; } mysql_query($e_tariff)or die(mysql_error()); mysql_close($link); } 

Я задал еще один вопрос. Вот ссылка на другой вопрос

Если у вас много строк с VoucherID_Fk же VoucherID_Fk UPDATE для всех этих строк. Вам необходимо установить TariffSlNo в WHERE

 $e_tariff = "UPDATE ebvouchertariffs SET TariffDate = '$e_date', TariffParticulars = '$e_particulars', NoOfNights = '$e_noofnights', TariffRate = '$e_rate', TariffPrice = '$e_price', TariffTax = '$e_tax', TariffNetTotal = '$e_nettotal', TariffAddTotal = '$e_totalamount', TariffFinalTotal = '$e_finaltotal', ModifiedOn = NOW() WHERE TariffSlNo = '$e_slno' AND VoucherID_Fk = '$uid'"; 

Вы не выполняете запрос sql внутри цикла for. когда цикл закончен, он возвращает последний запрос и затем выполняет последний SQL-запрос с использованием mysql_query, который находится вне цикла.

Решение:

Выполнить «mysql_query ($ e_tariff) или умереть (mysql_error ()); внутри цикла for, так что запрос будет выполняться каждый цикл.

Пример:

 include("config.php"); if (isset($_POST['submit_val'])) { for ($_POST['slno'] as $key=>$slno) { // .... // rest of the code $e_tariff = "UPDATE ebvouchertariffs SET TariffSlNo = '$e_slno', TariffDate = '$e_date', TariffParticulars = '$e_particulars', NoOfNights = '$e_noofnights', TariffRate = '$e_rate', TariffPrice = '$e_price', TariffTax = '$e_tax', TariffNetTotal = '$e_nettotal', TariffAddTotal = '$e_totalamount', TariffFinalTotal = '$e_finaltotal', ModifiedOn = NOW() WHERE VoucherID_Fk = '$uid'"; mysql_query($e_tariff)or die(mysql_error()); } в include("config.php"); if (isset($_POST['submit_val'])) { for ($_POST['slno'] as $key=>$slno) { // .... // rest of the code $e_tariff = "UPDATE ebvouchertariffs SET TariffSlNo = '$e_slno', TariffDate = '$e_date', TariffParticulars = '$e_particulars', NoOfNights = '$e_noofnights', TariffRate = '$e_rate', TariffPrice = '$e_price', TariffTax = '$e_tax', TariffNetTotal = '$e_nettotal', TariffAddTotal = '$e_totalamount', TariffFinalTotal = '$e_finaltotal', ModifiedOn = NOW() WHERE VoucherID_Fk = '$uid'"; mysql_query($e_tariff)or die(mysql_error()); } 

Надеюсь это поможет 🙂

попробуйте этот код. Я прокомментировал, где ваша ошибка, и сделайте ее правильной.

 include("config.php"); if(isset($_POST['submit_val'])) { // $uid = (int)$_POST["edited"]; <-- this will get same id for all records there is no value for "edited" in $_POST so it will update all records. foreach( $_POST['slno'] as $key=>$slno ) { $uid = (int)$slno; // <-- Update it by slno this will work. $e_date = $_POST['date'][$key]; $e_particulars = $_POST['particulars'][$key]; $e_noofnights = $_POST['noofnights'][$key]; $e_rate = $_POST['rate'][$key]; $e_price = $_POST['price'][$key]; $e_tax = $_POST['tax'][$key]; $e_nettotal = $_POST['nettotal']; $e_totalamount = $_POST['totalamount']; $e_finaltotal = $_POST['finaltotal']; $e_slno = mysql_real_escape_string($slno); // <-- here you are doing mistake replace $e_slno by $slno $e_date = mysql_real_escape_string($e_date); $e_particualrs = mysql_real_escape_string($e_particulars); $e_noofnights = mysql_real_escape_string($e_noofnights); $e_rate = mysql_real_escape_string($e_rate); $e_price = mysql_real_escape_string($e_price); $e_tax = mysql_real_escape_string($e_tax); $e_nettotal = mysql_real_escape_string($e_nettotal); $e_totalamount = mysql_real_escape_string($e_totalamount); $e_finaltotal = mysql_real_escape_string($e_finaltotal); $e_tariff = "UPDATE ebvouchertariffs SET TariffSlNo = '$e_slno', TariffDate = '$e_date', TariffParticulars = '$e_particulars', NoOfNights = '$e_noofnights', TariffRate = '$e_rate', TariffPrice = '$e_price', TariffTax = '$e_tax', TariffNetTotal = '$e_nettotal', TariffAddTotal = '$e_totalamount', TariffFinalTotal = '$e_finaltotal', ModifiedOn = NOW() WHERE TariffSlNo = '$uid'"; } mysql_query($e_tariff)or die(mysql_error()); mysql_close($link); } в include("config.php"); if(isset($_POST['submit_val'])) { // $uid = (int)$_POST["edited"]; <-- this will get same id for all records there is no value for "edited" in $_POST so it will update all records. foreach( $_POST['slno'] as $key=>$slno ) { $uid = (int)$slno; // <-- Update it by slno this will work. $e_date = $_POST['date'][$key]; $e_particulars = $_POST['particulars'][$key]; $e_noofnights = $_POST['noofnights'][$key]; $e_rate = $_POST['rate'][$key]; $e_price = $_POST['price'][$key]; $e_tax = $_POST['tax'][$key]; $e_nettotal = $_POST['nettotal']; $e_totalamount = $_POST['totalamount']; $e_finaltotal = $_POST['finaltotal']; $e_slno = mysql_real_escape_string($slno); // <-- here you are doing mistake replace $e_slno by $slno $e_date = mysql_real_escape_string($e_date); $e_particualrs = mysql_real_escape_string($e_particulars); $e_noofnights = mysql_real_escape_string($e_noofnights); $e_rate = mysql_real_escape_string($e_rate); $e_price = mysql_real_escape_string($e_price); $e_tax = mysql_real_escape_string($e_tax); $e_nettotal = mysql_real_escape_string($e_nettotal); $e_totalamount = mysql_real_escape_string($e_totalamount); $e_finaltotal = mysql_real_escape_string($e_finaltotal); $e_tariff = "UPDATE ebvouchertariffs SET TariffSlNo = '$e_slno', TariffDate = '$e_date', TariffParticulars = '$e_particulars', NoOfNights = '$e_noofnights', TariffRate = '$e_rate', TariffPrice = '$e_price', TariffTax = '$e_tax', TariffNetTotal = '$e_nettotal', TariffAddTotal = '$e_totalamount', TariffFinalTotal = '$e_finaltotal', ModifiedOn = NOW() WHERE TariffSlNo = '$uid'"; } mysql_query($e_tariff)or die(mysql_error()); mysql_close($link); } 

Согласно вашему комментарию: for example if user want to edit a voucher. in that voucher already contains 5 rows. user can edit their row values and if they want add two more rows... for example if user want to edit a voucher. in that voucher already contains 5 rows. user can edit their row values and if they want add two more rows... for example if user want to edit a voucher. in that voucher already contains 5 rows. user can edit their row values and if they want add two more rows... тогда попробуйте это.

сначала удалите старые данные, а затем вставьте новый.

 $deletequery = "delete from `ebvouchertariffs` WHERE VoucherID_Fk = '$uid' "; 

а затем вставить новые данные.

  foreach( $_POST['slno'] as $key=>$slno ) { $insertquery = "insert into `ebvouchertariffs`......."; }