PHP в деталях


         

форма работает, можете поиграться со


Рисуем вот такую форму:

рот

командира

отдающего

приказ

должен

быть

открыт

на

ширину

приклада

( форма работает, можете поиграться со списком и посмотреть результат, нажав кнопку "отправить")

При нажатии кнопки "Отправить" запускается скрипт, который записывает в спрятанную переменную id_set значения из списка через запятую. Именно переменную $id_set разбирает получающий данные скрипт.

В демонстрационном скрипте разбирается и проверяются все значения. Но для закрытого механизма администрирования этого не нужно.

В MySQL есть очень полезная функция FIND_IN_SET. Возвращает номер значения в ряде. Вот пример её использования:

mysql> SELECT FIND_IN_SET('b','a,b,c,d'); -> 2

mysql> SELECT FIND_IN_SET('e','a,b,c,d'); -> NULL

Таким образом можно записать в поле sort_order результат выполнения функции FIND_IN_SET(id,'id1,id2,id3,...'). При этом если в списке не окажется какого-то идентификатора, функция вернёт пустое значение (NULL). При сортировке значения NULL окажутся вверху. Чтобы этого избежать, добавляем функцию IFNULL, которая будет заменять NULL на количество id в строке + 1. Получаем простой скрипт:

if (strlen(trim($id_set))>0) {

    $id_set = preg_replace("/,\$/", "", trim($id_set));

    mysql_query("UPDATE heading SET sort_order=IFNULL(FIND_IN_SET(id, '{$id_set}'),". (substr_count($id_set, ",") + 2). ")");

форма, которая приведена здесь, работает в IE 5.0 и выше, а так же в Опере 5.12 и более новых. На NN и Mozilla не проверялось.


Содержание  Назад