[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Обновить несколько строк
Гость_Валерий
Помогите обновить несколько строк в mysql.

Структура таблицы central:
id - номер записи (автоинкрементный)
sklad - номер склада (число)
nomenklatura - номер номенклатуры (число)
quan - количество запаса (число)
flag - обновилось поле, тогда =1, если нет =0

Код страницы:
<?php
$result = mysql_query("SELECT * FROM central");
while($myrow = mysql_fetch_array($result)){
echo "
<form id='form1' name='form1' method='post' action='index.php'>
<input type='text' size='5' name='prod1' id='prod1' value="
.$myrow['id']." READONLY>
<input type='text' size='5' name='prod2' id='prod2' value="
.$myrow['sklad']." READONLY>
<input type='text' size='5' name='prod3' id='prod3' value="
.$myrow['nomenklatura']." READONLY>
<input type='text' size='5' name='prod4' id='prod4' value="
.$myrow['quan']."><br>";
}
echo "<input name='edit' type='submit' value='Сохранить'/><input type='button' onClick='history.go(0)' value='Обновить'/>
</form>"
;
?>

<?php

if(isset($_POST['edit']))
{
$result = mysql_query("SELECT * FROM central");
while($myrow = mysql_fetch_array($result)){
$prod1 = addslashes($_POST['prod1']);
$prod4 = addslashes($_POST['prod4']);
mysql_query("UPDATE central SET quan = $prod4 WHERE id = $prod1");
}
}

?>


Нужно сделать так что бы когда я в последнем столбце изменяю значения в table то по нажатию на кнопку "Сохранить" обновлялись те же строки и в БД.
Например:
Изменил значения в строке с id=1 и id=8, нажал на кнопку "сохранить" и значения этих полей обновились в БД + поле flag получило значение 1.

Заранее благодарю за помощь!



Спустя 17 часов, 14 минут, 3 секунды (13.11.2011 - 15:17) Гость_Валерий написал(а):
Не могу вообще понять как это сделать, разве что возле каждого поля выводить кнопку СОХРАНИТЬ, но это не вариант, так как значений может быть более 100 и изменятся будут 5-10.
Помогите кто чем сможет.

Спустя 20 минут, 27 секунд (13.11.2011 - 15:37) imbalance_hero написал(а):
Возле каждого делай скрытое поле prod5, которое будет равно prod4. Потом в скрипте обработчике проверяй на совпадение, если prod 4 отличается от prod5, значит поле было изменено, и отправляй запрос.

Спустя 8 часов, 59 минут, 41 секунда (14.11.2011 - 00:37) Гость_Валерий написал(а):
Проблема в том что обновляться будет только 1 поле с этого запроса
UPDATE central SET quan = $prod4 WHERE id = $prod1
так как видит только один id и обновляет только последнюю строку

Спустя 8 часов, 9 минут, 17 секунд (14.11.2011 - 08:46) sergeiss написал(а):
ЗначиЦЦа, можно сделать так...

Примерно похоже на то, что говорит imbalance_hero, но с дополнениями. Сделай скрытое поле, для каждой строки свой! Дай им имена, состоящие из 2-х частей, например name="changed_125", где "changed_" - это общая часть имени, а 125 - число, равное id для данной строки. Начальное значение для поля пусть будет 0.
Подобные имен задай для все полей!!! Т.е. для этой строки пусть будут "prod1_125", "prod2_125", "prod3_125", "prod4_125". Хотя, на самом деле, достаточно задать только имя "prod4_125", а остальные вообще не указывать.
Сделай обработчик "onclick", в каждой строке, который будет изменять величину соответствующего скрытого поля на 1.

На принимающей стороне надо сделать следующее. Идешь циклом foreach по массиву $_POST. Анализируешь имена параметров. Если первая часть равна "changed", то тогда: (1) тут же из 2-й части имени находишь id (в примере это 125) и (2) ты тут же можешь найти поле (его величину), что было изменено "prod4_125" (находим величину $_POST['prod_125']).
Далее ты либо набираешь в массив все изменения и делаешь потом одну команду UPDATE, либо на каждом шаге цикла апдейтишь. Первый вариант лучше, т.к. он немного быстрее. Хотя, конечно, при небольшом количестве изменений (5-10) это не принципиально.

Данная схема работы полностью рабочая, позволяет весьма качественно автоматизировать процесс.

Спустя 19 минут, 52 секунды (14.11.2011 - 09:06) imbalance_hero написал(а):
Гость_Валерий
Мне почему-то кажется, что у тебя на каждый инпут ОТДЕЛЬНАЯ форма, в этом твоя и беда! smile.gif

Спустя 13 минут, 5 секунд (14.11.2011 - 09:19) sergeiss написал(а):
Цитата (imbalance_hero @ 14.11.2011 - 10:06)
у тебя на каждый инпут ОТДЕЛЬНАЯ форма,

Ты прав... А я что-то не заметил, что у него так сделано smile.gif
Но это не отменяет всех моих рассуждений, так как они были высказаны для случая, когда все инпуты находятся в единой форме.

Спустя 20 минут, 57 секунд (14.11.2011 - 09:40) Гость_Валерий написал(а):
Цитата
Мне почему-то кажется, что у тебя на каждый инпут ОТДЕЛЬНАЯ форма, в этом твоя и беда!

Форма одна, в цикле заполняются инпуты, а за циклов закрывается форма

Спустя 28 минут, 56 секунд (14.11.2011 - 10:09) imbalance_hero написал(а):
Используй массив, prod4[] prod5[] , и перебирай массив.
Я уже показал как надо, не получается - покажи код, где ты беребираешь массив и сравниваешь по ключам, и в случае различия добавляешь запись в БД.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.