Показать сообщение отдельно
  #10 (permalink)  
Старый 24.05.2017, 03:35
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Bearon
Как такое провернуть с <td>? Так же нужно просто присвоить ему id?
Есть пока еще проблемы с форумом, не стал писать об этом сразу.

Допустим, принимаем, что вы получаете списки и итоговую форму асинхронными запросами. В вашем коде при этом есть потенциальные проблемы.

1) Неизвестно чем обрабатываются у вас ошибки/исключения запросов БД, на что должна быть реакция и ответ клиенту, но даже без их наличия не проверяется вернул ли вообще что-то запрос.

2) Без проверки указанного в п. 1, формируется html-код ответа клиенту, а значит при ошибках запроса или запросах возвращаемых null, клиент получит "битый код". Особенно узкое место в этом плане, это в цикле, где производится группа отдельных запросов к БД.

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

Идентификаторы у списков служат для их идентификации в обработчике событий. Форма же для группового обновления, так что каких то id для отдельных строк таблицы не требуется назначать. Если форму отдает сервер и она помещается к примеру DIV уже имеющийся на странице, у вас есть такой, который и можно использовать, <div id="divstud_edit">. То есть он постоянно на странице, а не результат запросов списков, тогда при получении формы нужно устанавливать ее обработчик, например:

//возьмем не ваш метод асинхронных запросов group.load
//а $.ajax, который обрабатывает запросы списков, тогда
var dst = this.id; //запомним источник события - текущий список
....
success: function(data) {
    //data может содержать как списки так и форму
    //что получена форма можно узнать по id источника события
    if(dst=='semestr') { //получена форма
        $("#divstud_edit").html(data).find('form').submit(function(e) {
             e.preventDefault();
             //отправляем форму асинхронным запросом
             $.ajax(....)
        })
    } else $("#group").html(data) //получен список  
}
....


А вот сама таблица/форма, это как ранее говорилось, только необходимое для обновления

<td><?=$disc['name']?></td>
<td><?=$group['group_name']?></td>
.....
<td><input type="text" name="upd[<?=идентификатор обновляемой записи?>]" value ="<?=текущее значение?>"></td></tr>


И сервер получить массив upd ключами которого будут ID для WHERE, и значение для SET. Именовать поля как name1...nameN, кроме геморроя ничего не дает. Уж коли ID и значение, это двумя полями формы, тогда проще name="name[]" для всех полей, а на сервере

foreach(array_chunk($_POST['name'], 2) as $data) {
....


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

Последний раз редактировалось laimas, 24.05.2017 в 03:39.
Ответить с цитированием