Перейти к содержанию

Как программировать мастеры?


VG2

Рекомендуемые сообщения

Мастер в данном случае – это серия экранов которые пошаговыми вопросами помогают пользователю что-то выбрать.

 

Например, мне нужно определить символ или аватар для человека.

Первый экран: «Вы мужчина или женщина?» и радиобатон с двумя главными позициями, при нажатии на кнопку «Далее» определяется переменная $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 – строка базы. Но получилась конструкция в сотню ступенек. Все работает, но это же не правильно. С ужасом думаю, а что если мне придется ещё десяток экранов добавить…

 

Как можно решить эту задачу? Может быть циклом? Или каким-то запросом к базе?

Язык программирования не важен, хотя это конечно для веб.

Ссылка на комментарий
Поделиться на другие сайты

Первая мысль - добавить в базу нужное количество аватаров для всех возможных значений всех параметров (аватары соответственно могут повторяться). Тогда проблема составления условий переносится на плечи базы.

А вообще абстрактный мастер можно реализовать проверкой попадения вектора параметров в векторные интервалы. Например, результат 1 выдается если параметры попадают в интервал значений параметров [p11, p21, ..., pn1]-[p21, p22, ..., pn2]. Можно сделать массив интервалов такого вида:

array("result"=>1, "start_vector"=>array("par1"=>1, ..., "parN"=>1), "end_vector"=>array("par1"=>2, ..., "parN"=>6));

и в цикле сравнивать, попадают ли введеные параметры в интервал для данного результата. Но и это можно ведь переложить на базу. Я бы составлял запрос и обращался к базе - в ней необходимые алгоритмы множественной проверки уже есть.

Ссылка на комментарий
Поделиться на другие сайты

пишешь справочник как ассоциативный массив к примеру

$gender=array("1"=>"male","2"=>"female");

переменная из формы $_POST['gender']=$gender[1];

чтобы определить относится ли переменная к массиву используешь in_array

Ссылка на комментарий
Поделиться на другие сайты

Marik спасибо, хотя по правде ничего не понял:)

 

mr.Faster , о, вот это ясно и вполне реализуемо. Нужно только хорошенько все обдумать. Спасибо.

Ссылка на комментарий
Поделиться на другие сайты

Как все не просто.

Можно сделать так - в базе делаешь таблицу с твоими параметрами + поле для хранения картинки, делаешь хранимку с выборкой по всем параметрам нужной картинки. Так оно будет работать. Дальше оптимизация - если у тебя на ВСЕ комбинации параметром РАЗНЫЕ картинки - первый предельный случай, оптимизировать нечего, или если есть диапазоны - делаешь выборки по ним. Это поможет оптимизировать работу базы. Добавление экранов сведется к самому необходимому - 1) добавление кода для показа вопроса 2) вставки переменной в запрос к хранимке 3) добавление поля в таблицу.

Ссылка на комментарий
Поделиться на другие сайты

Заархивировано

Эта тема находится в архиве и закрыта для дальнейших ответов.

×
×
  • Создать...