Получение пользователей Дата рождения? PHP MySQL - PullRequest
1 голос
/ 09 апреля 2011

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

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

В данный момент он работает, но в базе данных отображается время 00:00:00.

Я использую это

        $DOB = strtotime($DOB);

Как мне это сделать? Есть ли способ лучше? Это требует, чтобы они вводили dob как YYYY / MM / DD, есть ли способ, которым я могу сделать это лучше ...

После этого мне также нужно убедиться, что им больше 18 лет. Так как же мне поступить так?

Ответы [ 5 ]

4 голосов
/ 09 апреля 2011

Чтобы пользователь мог ввести дату, вы можете использовать что-то вроде DatePicker jQuery : это позволит вашим пользователям вводить дату, набирая ее или выбирая ее с виджет календаря.


Чтобы сохранить дату в базе данных MySQL, вы должны использовать поле DATE, а не:

  • A DATETIME, включая время
  • Ни один TIMESTAMP, который включает в себя время и ограничен 1970 -2038 (который не совсем подходит для даты рождения)


Чтобы использовать strtotime(), ваши даты должны выглядеть следующим образом: YYYY-MM-DD (как в базе данных при использовании поля DATE) , а не DD/MM/YYYY или MM/DD/YYYY ( это может сбивать с толку)

В PHP вы также должны использовать класс DateTime, а не UNIX Timestamp : они ограничены 1970-2038 ( на 32-битных платформах) .

2 голосов
/ 09 апреля 2011

В вашем клиентском скрипте или HTML-файле:

<form action="myphp.php">

Day 
<select size="1" name="day">
<option value="01" label="1st">1st</option>
<option value="02" label="2nd">2nd</option>
...
</select>

Month
<select size="1" name="month">
<option value="01" label="Jan">Jan</option>
<option value="02" label="Feb">Feb</option>
...
</select>

Year <select size="1" name="year">
...
<option value="1979" label="1979">1979</option>
<option value="1980" label="1980">1980</option>
...
</select>

</form>

В вашем .php бэкэнде:

$DOB = $_REQUEST['year']."/".$_REQUEST['month'].$_REQUEST['day'];

Теперь $DOB в используемом формате, вы можете проверить$_REQUEST[...] как хочешь.Но я предлагаю использовать JQuery на странице HTML, а также проверку на стороне сервера.

2 голосов
/ 09 апреля 2011

конвертировать как в эту дату ('Гм-д', время выполнения ($ DOB))

1 голос
/ 09 апреля 2011

Прежде всего, вы не можете использовать метку времени для хранения дней рождения, потому что метка времени начинает отсчитываться с 1970 года, и в мире существует несколько человек в возрасте старше 40 лет, поэтому вместо этого используется дата (не дата и время, потому что вам не нужно хранить время, простодата рождения)

вы можете получить дату от пользователя через простое текстовое поле, но вы должны уведомить его о предполагаемом формате даты (д / м / у, м / д / у, ...) 2/ 4/2011 может означать 4 февраля 2011 года или 2 апреля 2011 года

после того, как вы знаете, что вы, кроме проверки входных данных с помощью регулярного выражения

, например, $ _POST ['birthday'] = '03.11.2011 'и мы кроме формата м / д / у

$birthday = $_POST['birthday'];
if(preg_match('/^(\d){1,2}\/(\d){1,2}\/(\d){4}$/',$birthday)){
      list($month,$day,$year) = explode('/',$birthday);
      // here you should check that $day isn't bigger then days_in_month($month), and $month is between 1-12
      if(date('Y')-$year<18){ // you need to take into account $month to be more strict
         // user under 18
      }
}

надеемся, что это помогло

1 голос
/ 09 апреля 2011

Вы должны использовать тип поля "DATE", который будет хранить только часть даты. В противном случае вы можете использовать select DATE (fieldname) ... при его выборе.

Чтобы проверить возраст пользователя, вы можете использовать DATE_SUB, чтобы рассчитать возраст от сегодняшней даты, а затем вычесть день рождения пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...