VG2 Опубликовано 4 ноября, 2008 Жалоба Share Опубликовано 4 ноября, 2008 Мастер в данном случае – это серия экранов которые пошаговыми вопросами помогают пользователю что-то выбрать. Например, мне нужно определить символ или аватар для человека. Первый экран: «Вы мужчина или женщина?» и радиобатон с двумя главными позициями, при нажатии на кнопку «Далее» определяется переменная $pol=1 или 0. Второй экран: «Вы оптимист или пессимист?» и опять радиобатон с двумя позициями и при нажатии на кнопку «Далее» определяется переменная $temper=1 или 0. Третий экран с четверным радиобатоном и переменная $eyes=4 или 3 или 2 или 1 или 0 Четвертый экран вообще с чекбоксами и ещё пять переменных. На последнем экране делается запрос к базе данных и в зависимости от этих переменных выводится картинка символа одного или нескольких. Понятно, что каждый символ в базе имеет несколько полей «Пол», «Темперамент» и т. д. соответствующих перечисленным выше переменным. И каждый символ имеет свои значения этих полей. Но всего символов сотня. Я пробовал строить сложные зависимости if ($pol=1 && $temper=1 &&….) { then id=1 else if ($pol=1 && $temper=2 &&….) { then id=2… } } Где id – строка базы. Но получилась конструкция в сотню ступенек. Все работает, но это же не правильно. С ужасом думаю, а что если мне придется ещё десяток экранов добавить… Как можно решить эту задачу? Может быть циклом? Или каким-то запросом к базе? Язык программирования не важен, хотя это конечно для веб. Ссылка на комментарий Поделиться на другие сайты More sharing options...
Marik Опубликовано 4 ноября, 2008 Жалоба Share Опубликовано 4 ноября, 2008 Первая мысль - добавить в базу нужное количество аватаров для всех возможных значений всех параметров (аватары соответственно могут повторяться). Тогда проблема составления условий переносится на плечи базы. А вообще абстрактный мастер можно реализовать проверкой попадения вектора параметров в векторные интервалы. Например, результат 1 выдается если параметры попадают в интервал значений параметров [p11, p21, ..., pn1]-[p21, p22, ..., pn2]. Можно сделать массив интервалов такого вида: array("result"=>1, "start_vector"=>array("par1"=>1, ..., "parN"=>1), "end_vector"=>array("par1"=>2, ..., "parN"=>6)); и в цикле сравнивать, попадают ли введеные параметры в интервал для данного результата. Но и это можно ведь переложить на базу. Я бы составлял запрос и обращался к базе - в ней необходимые алгоритмы множественной проверки уже есть. Ссылка на комментарий Поделиться на другие сайты More sharing options...
mr.Faster Опубликовано 5 ноября, 2008 Жалоба Share Опубликовано 5 ноября, 2008 пишешь справочник как ассоциативный массив к примеру $gender=array("1"=>"male","2"=>"female"); переменная из формы $_POST['gender']=$gender[1]; чтобы определить относится ли переменная к массиву используешь in_array Ссылка на комментарий Поделиться на другие сайты More sharing options...
VG2 Опубликовано 5 ноября, 2008 Автор Жалоба Share Опубликовано 5 ноября, 2008 Marik спасибо, хотя по правде ничего не понял mr.Faster , о, вот это ясно и вполне реализуемо. Нужно только хорошенько все обдумать. Спасибо. Ссылка на комментарий Поделиться на другие сайты More sharing options...
Alex Novo Опубликовано 5 ноября, 2008 Жалоба Share Опубликовано 5 ноября, 2008 Хехе - тебе ответил 1 теоретик и 1 практик Ссылка на комментарий Поделиться на другие сайты More sharing options...
MpakV Опубликовано 5 ноября, 2008 Жалоба Share Опубликовано 5 ноября, 2008 Как все не просто. Можно сделать так - в базе делаешь таблицу с твоими параметрами + поле для хранения картинки, делаешь хранимку с выборкой по всем параметрам нужной картинки. Так оно будет работать. Дальше оптимизация - если у тебя на ВСЕ комбинации параметром РАЗНЫЕ картинки - первый предельный случай, оптимизировать нечего, или если есть диапазоны - делаешь выборки по ним. Это поможет оптимизировать работу базы. Добавление экранов сведется к самому необходимому - 1) добавление кода для показа вопроса 2) вставки переменной в запрос к хранимке 3) добавление поля в таблицу. Ссылка на комментарий Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Заархивировано
Эта тема находится в архиве и закрыта для дальнейших ответов.