Обновление записей...

Asar

Новичок
Обновление записей...

Наверное, лучше перекинуть в эту тему..:

Выдается в текстовых окошечках куча записей из БД. Человек их редактирует, нажимает кнопочку - все измененные им только что записи должны обновиться в БД.
Вопросы:
Является ли самым рациональным вариант тупого апдейта ВСЕХ ЗАПИСЕЙ ПОДРЯД после нажатия кнопки? Т. е. берутся значения всех полей (если человек ничего не менял, то там будут старые значения, а если менял - новые) и закачиваются в базу. Или можно как-либо отделить мух от котлет? Можно, конечно, сравнивать значение поля с данными в базе (типа исправил там чего человек или нет) - но какая разница, что тратить время на сравнение всех полей, что вставить во все поля данные? Или вторая операция скушает больше ресурсов машины?

Допустим, мы все же меняем все поля подряд. Тогда нужно пройтись по всем полям базы и заменить их:

$тополя = 1
Типа апдейт ляляля where id=$тополя
$тополя++

Вообще, я такой цикл делал, пока id присутствует или (что прогрессивнее, казалось бы) количество записей не сравняется с id. Но id может рваться - т. е. после id=3 в базе может быть id=15. Т. о. будут охвачены не все поля базы. Как можно охватить все?
 

jer

...
можешь завести скрытое поле в форме и ставить в нем флаг яваскриптом если поле (или поля) менялось.
 

Asar

Новичок
С изменением понятно (хотя овчинка выделки здесь не стоит, ЫМХ). А как же пройтись по всем строкам? Вроде бы тривиальнейшая задача, а не доходит...

-~{}~ 07.10.04 14:24:

Быть может, стоит сделать запрос по полю id, выбрать из всех максимальное значение, и по нему уже лепить?

Но путь какой то не особенно прямой. Если ли более рациональные методы?
А если нет, то как вообще максимум то высчитать..?
 

Фанат

oncle terrible
Команда форума
имена полей делаешь массивами, индексом которых будет
name[$id]
age[$id]
потом перебираешь один из массивов и ключ от него подставляешь в остальные, чтобы получить поля от нужной записи. и вставляешь в запрос
еще можешь посмотреть, как пхп майадмин это делает
 

Asar

Новичок
Ту Фанат:

Мало, что понял. Вроде бы как это ответ на вопрос об определении изменялась/не изменялась запись..?
Тогда вопрос о максимуме оставется в силе.
Если это был ответ про максимум - нельзя ли чуть подробнее...
 

Фанат

oncle terrible
Команда форума
НЕТ
это ответ на вопрос,
Как можно охватить все?
Это ответ на вопрос, как связать поля в форме со строками в базе.
При чем тут какой-то бред про максимум - я вообще не понял.
 

Asar

Новичок
Тогда в силе предложение "ааа поподробнее плизз"... - Типа для тех, кто не понял...
 

Фанат

oncle terrible
Команда форума
ЕСЛИ
ТЫ
ВЫВОДИШЬ
БОЛЬШЕ
ОДНОЙ
ЗАПИСИ
ДЛЯ РЕДАКТИРОВАНИЯ
ОДНОВРЕМЕННО

ТО
ЗАПИСИ
НАДО
КАК_ТО
ПОМЕТИТЬ

андестенд?
 

Asar

Новичок
Андерстенд, чего ж тут не андерстенд. Но у них и так метки имеются - типа по именам полей. Например имяполя_id.
 

Фанат

oncle terrible
Команда форума
ну так в чем тогда твоя проблема, если id ,как ты говоришь, присутствует?
вот берешь этот айлии по нему обновляешь базу
 

jer

...
Asar

я так понял, что пока тебе не покажешь - ты не поймешь.

вот так примерно генеришь форму:

PHP:
<input type="hidden" name="id[]" value="<?=$rs['id']?>">
<input type="hidden" name="changed[]" value="false">

<input type="text" name="field1[]" value="<?=$rs['field1']?>" Onchange="javascript:changed(<?=$rs['id']?>);">
...
<input type="text" name="fieldn[]" value="<?=$rs['fieldn']?>" OnChange="javascript:changed(<?=$rs['id']?>);">
это все идет в цикле, это понятно?

пишешь функцию js. (можно конечно сразу в событие OnChange код запихать - смотри сам)

потом после сабмита обходишь пришедшие данные так:

PHP:
for ($i=0;$i<count($_POST['id']);$i++)
{
  if ($_POST['changed'][$i])
  {
      изменяешь запись!
  }
}
надеюсь идея ясна? (к коде могут быть ошибки)
 

Asar

Новичок
А чтобы предоставить заказчику портфолио, где будут явно отображены навыки владения ЯС.
 

jer

...
Фанат

чтобы не апдейтить потом записи, которые не изменялись. или я что-то пропустил?
 

Фанат

oncle terrible
Команда форума
Asar
У тебя уже все вопросы решены, что ты начал не по теме рассуждать?
Ты скажи - так и запишем!

-~{}~ 07.10.04 16:17:


jer, это нафиг никому не нужно.
Тем более, что, пусть ХОТЯ БЫ НА ПХП научится записи различать! Пусть хотя бы сначала ВСЕ пропадейтит правильно.
А потом уже навешивает приблуду на яваскрипте с рюшечками и бантиками никому не нужными.
Тем более, что, по-моему, твой код не будет нифига работать
 

Asar

Новичок
Я тут погулять выходил. По дороге решение пришло. Пока не проверял, может, и сработает...
Потому расслабился и начал не по теме...
 

jer

...
Фанат

;))) ха... какие вопросы решены? что запишешь?

код - да, там есть один баг, это я для идеи привел, раз он на словах не мог понять.
 

Asar

Новичок
Пока без ЯС...

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

А почему бы не запросить весь столбец id и выдернуть оттуда максимальное значение? А потом его проставить в качестве максимума, докуда цикл перебирать? Ведь, если id не намного больше количества записей, то пустой работы будет проделано не так уж много?

Потому как другого (Фанатского) способа я так и не понял.
 

Фанат

oncle terrible
Команда форума
что за бред с какими-то максимумами?
почему нельзя ПРОСТО перебрать массив пришедший из формы?
Зачем тебе какой-то максимум вообще?
по ходу, ты что - массивы только через for перебирать умеешь, и про foreach никогда не слышал?!
 
Сверху