Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
86 / 86 / 30
Регистрация: 12.08.2014
Сообщений: 1,129

Реализовать функцию выбранной даты рождения в выпадающем списке

04.05.2015, 17:39. Показов 3065. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток! Скажите, как реализовать функцию выбранной даты рождения в выпадающем списке?
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php
     $monthOptions = '<option value="0" id="month_option">Month:</option>';
     $dayOptions = '<option value="0" id="day_option">Day:</option>';
     $yearOptions = '<option value="0" id="year_option">Year:</option>';
      
     for($month=1; $month<=12; $month++)
     {
         $monthName = date("M", mktime(0, 0, 0, $month));
         $monthOptions .= "<option value=\"{$month}\">{$monthName}</option>\n";
     }
     for($day=1; $day<=31; $day++)
     {
         $dayOptions .= "<option value=\"{$day}\">{$day}</option>\n";
     }
     for($year=2015; $year>=1890; $year--)
     {
         $yearOptions .= "<option value=\"{$year}\">{$year}</option>\n";
     }
     ?>
     <script type="text/javascript">
     function updateDays()
     {
         //Create variables needed
         var monthSel = document.getElementById('month');
         var daySel   = document.getElementById('day');
         var yearSel  = document.getElementById('year');
         var monthVal = monthSel.value;
         var yearVal  = yearSel.value;
         
         //Determine the number of days in the month/year
         var daysInMonth = 31;
         if (monthVal==2)
         {
              daysInMonth = (yearVal%4==0 && (yearVal%100!=0 || yearVal%400==0)) ? 29 : 28;
         }
         else if (monthVal==4 || monthVal==6 || monthVal==9 || monthVal==11)
         {
              daysInMonth = 30;
         }
         
         //Add/remove options from days select list as needed
         if(daySel.options.length > daysInMonth)
         {   //Remove excess days, if needed
              daySel.options.length = daysInMonth;
         }
         while (daySel.options.length != daysInMonth)
         {   //Add additional days, if needed
              daySel.options[daySel.length] = new Option(daySel.length+1, daySel.length+1, false);
         }
         
         return;
     }
     </script>
     <P>Date of birth:<br>
     <select name="day" id="day">
     <?php echo $dayOptions; ?>
     </select>
     <select name="month" id="month" onchange="updateDays();">
     <?php echo $monthOptions; ?>
     </select>
     <select name="year" id="year" onchange="updateDays();">
     <?php echo $yearOptions; ?>
     </select>
И сам запрос на запсись дат в бд:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
     if (empty($_POST['day'])) {
        $errors[] = 'Select day!';
     }
     if (empty($_POST['month'])) {
        $errors[] = 'Select month!';
     }
      if (empty($_POST['year'])) {
        $errors[] = 'Select year!';
     }
    if (empty($errors) === TRUE)
    {
        $update_data = array( 
            'birth_day'     => $_POST['day'],
            'birth_month'   => $_POST['month'],
            'birth_year'            => $_POST['year']);
        update_user($session_user_id, $update_data);
     }
Запись происходит, вывод ошибок тоже, но как сделать так, чтобы в списке , если я выбрал ранее число месяц год, у меня были уже выбраны эти значения? Заранее спасибо!
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.05.2015, 17:39
Ответы с готовыми решениями:

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

Реализовать вывод данных из MySQL таблицы в выпадающем списке
Приветствую, уважаемые форумчане. Возникла проблема. Хочу реализовать вывод данных из mysql таблицы в выпадающем списке, для этого...

Реализовать в выпадающем списке ComboBox'а поиск по любой части слова
Всем доброго времени суток! Хочу реализовать в выпадающем списке ComboBox'а поиск по любой части слова, а не только с начала. ...

6
 Аватар для alexsamos33
669 / 640 / 335
Регистрация: 26.04.2014
Сообщений: 2,122
04.05.2015, 18:58
Примерно так: (пример для года)
PHP
1
2
3
4
5
if (isset($_POST['year']) && $_POST['year'] == $year) {
 $yearOptions .= "<option selected value=\"{$year}\">{$year}</option>\n";
} else {
 $yearOptions .= "<option value=\"{$year}\">{$year}</option>\n";
}
0
86 / 86 / 30
Регистрация: 12.08.2014
Сообщений: 1,129
04.05.2015, 22:23  [ТС]
как ни кручу - всегда что-то выбирает 1980 год. Либо вообще пустой

Добавлено через 3 часа 19 минут
упс, то есть 1890 - минимальны год, как не ставил/заменял - не выходит, что-то никак не получается
0
F57
 Аватар для F57
68 / 68 / 23
Регистрация: 17.02.2015
Сообщений: 397
04.05.2015, 22:27
Что не так? По дефолту select показывает первый элемент..
0
775 / 444 / 93
Регистрация: 24.10.2012
Сообщений: 3,240
Записей в блоге: 5
05.05.2015, 09:11
Цитата Сообщение от paskalnikita
Запись происходит, вывод ошибок тоже, но как сделать так, чтобы в списке , если я выбрал ранее число месяц год, у меня были уже выбраны эти значения?
С помощью атрибута selected="selected". Тогда выбранной будет та опция где прописано selected="selected"

Бывает так что всегда первая опция выделяется. Можно по обновлять страницу по CTRL+R. Либо поставьте курсор в адресную строку браузера и нажмите ENTER.

Добавлено через 2 минуты
Вот можете посмотреть на это решение
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// Создание списка года рождения пользователя.
        $REGISTER_FORM_BIRTH_DATE_OPTIONS = "\t<option value=\"none\"$REGISTER_FORM_BIRTH_DATE_SELECTED>{$this->LANGUAGE['REGISTER_FORM_BIRTH_DATE']}</option>\n";
        
        // С 1999 г. по 1910 г.
        for( $year = 1999; $year >= 1910; $year--  ) {
            
            // Нет регистрации?
            if( !$do_register ) {
                
                // Нет. Значения нет.
                $REGISTER_FORM_BIRTH_DATE_SELECTED = '';
            } else {
                
                // Есть. Определение избарнного значения <option>
                $REGISTER_FORM_BIRTH_DATE_SELECTED = $year == $_POST['user-birth-date'] ? $selected_selected : '';
            }
            
            // Индекс табуляции.
            $tab_index = 11;
            
            // Перевод строки.
            $n = $year > 1910 ? "\n" : '' ;
            
            // Сборка списка <option>
            $REGISTER_FORM_BIRTH_DATE_OPTIONS .= str_repeat("\t", $tab_index)."<option value=\"$year\"$REGISTER_FORM_BIRTH_DATE_SELECTED>$year</option>$n";
        }

Создается список SELECT с выбранным значением
0
86 / 86 / 30
Регистрация: 12.08.2014
Сообщений: 1,129
06.05.2015, 12:30  [ТС]
Цитата Сообщение от alexsamos33 Посмотреть сообщение
if (isset($_POST['year']) && $_POST['year'] == $year) { $yearOptions .= "<option selected value=\"{$year}\">{$year}</option>\n"; } else { $yearOptions .= "<option value=\"{$year}\">{$year}</option>\n"; }
такой вариант лучше, но вот только не понимаю , почему не работает

Добавлено через 7 часов 7 минут
Подскажите, может я чего не понимаю , но select правильно у меня никак не получается вывести
PHP
1
2
3
4
5
6
                if (!empty($user_data['birth_day'])) {
                    $bday = $user_data['birth_day'];
                    $dayOptions = "<option value='$bday' selected id='day_option'>Day:</option>";
                } else{
                    $dayOptions = '<option value="0" id="day_option">Day:</option>';
                }
Что не так, может логика у меня неправильно построена?

Добавлено через 4 минуты
если вывести echo $dday; все окей, нужную дату выводит, но в select никак

Добавлено через 4 часа 30 минут
при таком условии в выпадающем списке если открыть панель разработчика,то в списке, value ровняется числу из БД, но оно не выбирается, не смотря на то, что прописано selected

Добавлено через 13 часов 7 минут
сделал так с числом:
PHP
1
2
3
4
5
6
7
8
9
10
<?php
    if (!empty($user_data['birth_day'])) {
        $bd = $user_data['birth_day'];
    } else{
        $dayOptions = '<option value="0" id="day_option">Day:</option>';
    }
    for($day=1; $day<=31; $day++){
        $dayOptions = "<option value='$bd' selected id='day_option'>$bd</option>";
    }
    }
В selecte выбирается ну;ное чилсо, но тогда нельзя в дальнейшем его изменить, как быть?

Добавлено через 1 минуту
А если не выбрна ранее дата, то выпадает пустой список с одной единственной пустой ячейкой

Добавлено через 17 минут
сделал так, можно выбрать число, если не выбрал ранее - можно выбрать, но если уже выбрал, только это число стоит, то есть изменить дату уже не могу
PHP
1
2
3
4
5
6
7
8
9
10
11
    if(!empty($user_data['birth_day'])) {
        $bd = $user_data['birth_day'];
        for($day=1; $day<=31; $day++){
            $dayOptions = "<option value='$bd' selected id='day_option'>$bd</option>";
        }
    }else{
        $dayOptions = '<option value="0" id="day_option">Day:</option>';
        for($day=1; $day<=31; $day++){
            $dayOptions .= "<option value=\"{$day}\">{$day}</option>\n";
        }
    }
Добавлено через 1 час 52 минуты
получилось, но проблема в том, что выбранная дата идет в самом начале списка, и повторяется, то есть, если выбралчило 3 то список тако 3 1 2 3 4 ... 31
PHP
1
2
3
4
5
6
7
8
9
10
11
12
if(!empty($user_data['birth_day'])) {
        $bd = $user_data['birth_day'];
         $dayOptions = "<option value='$bd' selected id='day_option'>$bd</option>";
        for($day=1; $day<=31; $day++){
           
            $dayOptions .= "<option value=\"{$day}\">{$day}</option>\n";
        }
    }else{
        $dayOptions = '<option value="0" id="day_option">Day:</option>';
        for($day=1; $day<=31; $day++){
            $dayOptions .= "<option value=\"{$day}\">{$day}</option>\n";
        }
Как исправить?
0
171 / 153 / 67
Регистрация: 11.02.2015
Сообщений: 450
06.05.2015, 12:47
Лучший ответ Сообщение было отмечено paskalnikita как решение

Решение

PHP
1
2
3
4
5
for($day=1; $day<=31; $day++)
     {
         $selected=($user_data['birth_day']==$day)?'selected':'';
         $dayOptions .= "<option ".$selected." value=\"".$day."\">".$day."</option>\n";
     }
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.05.2015, 12:47
Помогаю со студенческими работами здесь

Реализовать выпадающий список, содержимое которого зависит от выбора в другом выпадающем списке
Здравствуйте, мне нужен выпадающий список. ( можно на HTML ) Человек выбирает в 1 выпадающем списке Mersedes и во втором выпадающем...

Есть выпадающий список JComboBox. Нужно реализовать эффект фильтрации данных в выпадающем списке по тексту который вводит пользователь
Есть выпадающий список JComboBox. Нужно реализовать эффект фильтрации данных в выпадающем списке по тексту который вводит пользователь. ...

Как реализовать проверку даты рождения
Дата рождения вводится с формы, если введенный год рождения &gt; 2003, выводится сообщение &quot;Слишком молод&quot;.

Нужно чтобы при вводе даты рождения, возраст определялся автоматически. Как это реализовать?
Поля дата рождения и возраст находятся в одной таблице.

Реализовать функцию добавления в односвязном списке
Здравствуйте! Нужна помощь ! Неправильно работает функция добавления нового пассажира (возможно и сортировка!) Не вдупляю в чём дело. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru