Сохранение даты рождения пользователя при регистрации в таблицу mysql из модуля Profile

Главные вкладки

Аватар пользователя First First 6 сентября 2011 в 2:29

Здравствуйте.
Включил модуль Profile, для расширения вводимых данных при регистрации.
Из за того, что данные зарегистрированных пользователей разбросаны по двум таблицам: users и profile_values, а в profile_values данные вообще не структурированные, решил создать отдельную таблицу и собрать туда нужные данные из users и profile_values.
Три строчки кода в функции profile_save_profile() и все получилось как надо. Но вот дата рождения ни как не хочет сохранятся в поле с типом DATE
Во запрос который я делаю в базу данных:

db_query("INSERT INTO {report_user_registration} (uid, login, mail, name, last_name, birthday, country) VALUES (%d, '%s', '%s', '%s', '%s', 'YYYY-MM-DD', '%s')", $user->uid, $user->name, $user->mail, $array_name[1], $array_name[0], $array_name[3], $array_name[5]);

Обращаю внимание на VALUES ('YYYY-MM-DD')

в результате выполнения поле с типом Date игнорируется, как будто его вообще и нет, а дата записывается в следующее поле в виде вот такой записи:
a:3:{s:3:"day";s:1:"6";s:5:"month";s:1:"9";s:4:"year";s:4:"2011";}

Подскажите, как сохранить дату в таком виде, в поле с типом DATE? или может быть с другим типом, но с нормальным отображением даты в поле.

Комментарии

Аватар пользователя php5eng php5eng 6 сентября 2011 в 14:07

Этот формат называется JSON.
Присмотритесь к этой строке:
a:3:{s:3:"day";s:1:"6";s:5:"month";s:1:"9";s:4:"year";s:4:"2011";}
То есть дата сохранилась.
Если навороченная сортировка по дате не нужна, может быть и этот формат записи подойдет?

Аватар пользователя First First 6 сентября 2011 в 14:32

"php5eng" wrote:
Если навороченная сортировка по дате не нужна, может быть и этот формат записи подойдет?

Спасибо за ответ.
В том то и дело, что хотелось бы сделать нормально читаемые данные о пользователе, ну и дату в легко читаемом виде, а не в таком как она сейчас сохраняется.
Подскажите как конвертировать может какой нибудь функцией php или запросом sql, что бы сохранить дату?

Аватар пользователя php5eng php5eng 6 сентября 2011 в 14:40

Выше я написал, что формат называется JSON. Нужно его конвертировать с помощью PHP. Значит вводим в гугле "json php" и первая же ссылка ведет на php.net
http://php.net/manual/en/book.json.php

http://www.php.net/manual/en/function.json-encode.php кодирует в json.
А http://www.php.net/manual/en/function.json-decode.php преобразует обратно в массив
А вот в mysql вроде бы функции работы с json нет. Или я не нашел

Аватар пользователя First First 6 сентября 2011 в 15:23

Есть, что нибудь для вот такой операции?
$json = 'a:3:{s:3:"day";s:1:"6";s:5:"month";s:1:"9";s:4:"year";s:4:"2011";}';
что_нибудь($json)
//return str05-09-2011

Хотя бы строку с датой, что бы вернуло

Тогда можно будет в поле varchar или text сохранить

Аватар пользователя First First 6 сентября 2011 в 16:06

"php5eng" wrote:
Если это сериализованный массив, то http://www.php.net/manual/en/function.unserialize.php
$array = unserialize ('a:3:{s:3:"day";s:1:"6";s:5:"month";s:1:"9";s:4:"year";s:4:"2011";}');

Вот, что вышло:
$name_1[] = unserialize($array_name[3]);
print_r($name_1);

Array ( [0] => Array ( [day] => 6 [month] => 9 [year] => 2011 ) )

Аватар пользователя First First 6 сентября 2011 в 19:16

Спасибо за помощь!
Проблем решена )

$name_1[] = unserialize($array_name[3]);
$date_1 = $name_1["0"]["day"].'-';
$date_1 .= $name_1["0"]["month"].'-';
$date_1 .= $name_1["0"]["year"];