Как сохранить выбор в select
Делаю профиль пользователя. есть три селекта для выбора дня рождения. день, месяц и год. После отправки на сервер дата сохраняется в БД. Как сделать что бы выборка этих селектов навсегда осталась на этой странице или пока пользователь не выберет другую дату?. То есть выборка всегда должна соответствовать дате из БД.
|
Регистированным пользователя при выводе списка на стороне сервера это не сложно сделать, иначе или куки или локальное хранилище.
|
Цитата:
|
А как вы делаете выборку и выводите списки?
|
<select id="id_birthdate_month"> <option value="01">Январь</option> <option value="02">Февраль</option> #... </select> При выборе всех списков/инпутов жму кнопку сохранить. Собираю все данные из списков и инпутов аяксом отправляю на сервер и сохраняю в БД. В инпуты в тег value подставляю переменную со значением из БД в результате всегда будет выводится нужно значение. Так же нужно сделать для списков. Что бы не сбивалось. |
Я не об этом. Собственно JS тут совсем не нужен, это запись значения, вот тут у вас работает JS отчасти. А выбрать нужные опции в списке, так зачем для этого нужен JS? Сервер их отдает, серверу и отметить нужно.
Я спрашивал о том, как вы делаете выборку в базе и как сервер формирует эти списки. У вас дата рождения храниться в базе, и надо полагать в поле типа DATE. Думаю знаете и как из даты средствами SQL можно получить день, месяц, год. А получив эти составляющие даты рождения пользователя, не сложно их сравнить со значениями формируемых списков, и указать опциям равным дате рождения пользователя selected. Ну а новый выбор, так это значит запрос к базе и обновление или лучше INSERT c ON DUPLICATE KEY UPDATE. |
Цитата:
|
А что у пользователя бывает сто дат рождения? :)
А если речь о 100 опциях и трудности, значит вы не верно делаете вывод списков. Покажите код, как вы это делаете, и выборку из базы. |
да, я о ста опциях. Дак я их в ручную написал.
|
а что бы вы поняли как я делаю выборку мне придется еще скинуть большой класс для работы с БД. Я просто беру выбранное значение (через js по id например #id_select option:selected) и отправляю на сервер там просто обновляю поля в БД с этим значением.
|
В этом ваша и ошибка, если вручную. Циклом такие вещи надо выводить. Коли выборки о пользователе я так и не увидел, то абстрактный пример:
//если выборка о пользователе возвращает из поля DATE день, месяц и год, то работаем с этими данными //если нет, и возвращает дату как YYYY-MM-DD, то получаем из даты нужные компоненты средствами РНР $time = strtotime($row['date']); //где $row['date'] - дата рождения из базы $year = date('Y', $time); $month = date('n', $time); $day = date('j', $time); //месяц и день без ведущих нулей, так как они совсем не нужны в списках //ибо полученную дату для нашей локалицации как d.m.YYYY можно всегда привести к формату SQL //$date = date('Y-m-d', strtotime('3.5.2000')); //получим корректный формат даты для SQL, //если вернет false или дату UNIX, значит клиент прислал лажу //но лучше сразу SQL запросом вернуть компоненты //выводим списки $select_year = '<select name="year"><option value="">Выберите год...</option>'; $select_month = '<select name="month"><option value="">Выберите месяц...</option>'; $select_day = '<select name="day"><option value="">Выберите дату...</option>'; //цикл по количеству лет $start = $k = 1950; $end = date('Y') - 18; //последний год с учетом минимального возраста while($start <= $end) { $n = $start-$k+1; if($n < 13) $select_month .= '<option value='.$n.' '.($n == $month ? 'selected' : null).'>'.$n.'</option>'; if($n < 32) $select_day .= '<option value='.$n.' '.($n == $day ? 'selected' : null).'>'.$n.'</option>'; $select_year .= '<option value='.$start.' '.($start == $year ? 'selected' : null).'>'.$start.'</option>'; $start++; } $select_year .= '</select>'; $select_month .= '</select>'; $select_day .= '</select>'; echo $select_day, $select_month, $select_year; >через js по id например #id_select option:selected Во первых первый опшен должен быть пуст, так как ставить минимальную дату, месяц и год по умолчанию, это плохо, можно их по ошибке и запулить на сервер. Поэтому нужно проверять выбран ли опшен (значение не пустое). А значение списка и возвращает значение выбранной опции, так что option:selected в данном случае совсем не требуется. |
laimas, Спасибо большое, очень помог :)
|
Дополнить надо:
$start = $k = $end - 60; //минус желаемый возраст пользователей, который в любом случае не должен быть менее 31, иначе могут быть только феврали |
Часовой пояс GMT +3, время: 00:33. |