Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Нужен совет по добавлению данных из <select> в БД
Форумы портала PHP.SU » » Вопросы новичков » Нужен совет по добавлению данных из <select> в БД

Страниц (1): [1]
 

1. teddy - 14 Мая, 2013 - 22:38:13 - перейти к сообщению
Добрый вечер. Написал скрипт регистрации пользователей, но столкнулся в вопросом. Указание даты рождения я сделал так, что бы пользователь мог выбрать ее из option-а. Вышло как вы догадываетесь так, что для "дня", "месяца" и "года" нужно создавать отдельную переменную куда укладывается выбранное из селект-а значение.

Соответственно при добавлении в БД получится так, что день, месяц и год придется хранить в разных полях таблицы. Можно ли сделать это как то грамотно? Чтоб не добавлять все в разные поля а в одно. Хочу удобство, так как в дальнейшем придется делать анкету, где нужно будет выводить из БД дату рождения.

Интересует вариант именно с select-ом... Ну а если это сделать никак при помощи PHP, то прошу мне об этом сообщить )
2. EuGen - 14 Мая, 2013 - 22:43:42 - перейти к сообщению
Ничто не мешает получать данные о годе/дне/месяце из раздельных полей а затем "собирать" их в одно в PHP-скрипте. Например,
PHP:
скопировать код в буфер обмена
  1. $sDate=$_POST['year'].'-'.$_POST['month'].'-'.$_POST['day'];// ex.: "1988-11-05"
3. teddy - 14 Мая, 2013 - 22:47:53 - перейти к сообщению
EuGen
О как, спасибо ) видел как то раз подобную конструкцию, но не запомнил ) Ещё вопрос остался, у меня много полей и проверок на каждое поле минимум по 3. Получается слишком много if-ов. Это нормально вообще? Что то мне подсказывает, что это ВЦкод получается... Думаю написать функцию для чистки данных, но она тоже получится огромной, так как проверять буду внутри функции через свитч, который в свою очередь тоже будет содержать кучу if-ов
4. EuGen - 14 Мая, 2013 - 23:00:03 - перейти к сообщению
5. teddy - 14 Мая, 2013 - 23:02:12 - перейти к сообщению
EuGen
Я про данные )вот кусок из кода:
PHP:
скопировать код в буфер обмена
  1. if(!preg_match("/^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$/",$email)){
  2.  
  3. $error_mail = "Неверный формат почтового адреса<br>";
  4.  
  5. }
  6.  
  7. if(empty($email)){$error_mail = "Укажите E-mail адрес<br>";}

(Добавление)
Таких проверок множество, полей много... под каждое поле много проверок. Ещё свитч есть который банит что то вроде "30 Февраля" и т.д

PHP:
скопировать код в буфер обмена
  1. switch($_POST['month']){
  2. case 2:
  3. if($day>29){$error_date = "Введите корректную дату рождения";}
  4. break;
  5. case 4:
  6. if($day>30){$error_date = "Введите корректную дату рождения";}
  7. break;
  8. case 6:
  9. if($day>30){$error_date = "Введите корректную дату рождения";}
  10. break;
  11. case 9:
  12. if($day>30){$error_date = "Введите корректную дату рождения";}
  13. break;
  14. case 11:
  15. if($day>30){$error_date = "Введите корректную дату рождения";}
  16. break;
  17. }

(Добавление)
Это нормально? Или можно как то упростить это дело? Расчистить код так сказать...
6. Tummy - 15 Мая, 2013 - 06:55:46 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. if ($_POST['month'] === 2 OR $_POST['month'] === 4 OR $_POST['month'] === 6 OR $_POST['month'] === 9 OR $_POST['month'] === 11) {
  2.     if ($_POST['month'] === 2) {
  3.         if ($day > 29) $error_date = "Введите корректную дату рождения";
  4.         }
  5.     if ($day > 30) $error_date = "Введите корректную дату рождения";
  6.     }
Сократил =)

Проверка адреса почты, можно использовать стандартные средства php
PHP:
скопировать код в буфер обмена
  1. filter_var('bob@example.com', FILTER_VALIDATE_EMAIL)

А можно кастомную функцию, которых полно на интернет.
7. teddy - 15 Мая, 2013 - 12:22:13 - перейти к сообщению
Tummy пишет:
if ($_POST['month'] === 2 OR $_POST['month'] === 4 OR $_POST['month'] === 6 OR $_POST['month'] === 9 OR $_POST['month'] === 11) {
if ($_POST['month'] === 2) {
if ($day > 29) $error_date = "Введите корректную дату рождения";
}
if ($day > 30) $error_date = "Введите корректную дату рождения";
}


Опять же if-ы ) Получается много if-ов в некоторых случаях это нормально... В других полях тоже много проверок. Да и свитчем более нагляднее фильтровать дату в данном случае

Tummy пишет:
filter_var('bob@example.com', FILTER_VALIDATE_EMAIL)

Использовал ее раньше, оказалась дырявой... Насколько я помню там принцип такой: V'a's'y'a@p'u'p'k'i'n.com - проходит... Там вроде как считывает так чтоугодно@чтоугодно.com что не есть хорошо... Точно не помню, но была подобная дыра
8. Мелкий - 15 Мая, 2013 - 23:05:59 - перейти к сообщению
teddy пишет:
Там вроде как считывает так чтоугодно@чтоугодно.com что не есть хорошо...

Почитайте соответствующую RFC, узнаете много нового. Часть до @ может содержать вообще всё, что угодно. Доменное имя - за некоторыми исключениями - тоже.

 

Powered by ExBB FM 1.0 RC1