Сайтостроительство (8)

PHP-кодинг (25)

Веб-дизайн (9)

DHTML/JavaScript (8)

Подкастинг (1)

Безопасность в PHP (3)

Секретный раздел

Карта блога

Регистрация пользователей на PHP+MySQL

Скрипт гостевой книги с красивым дизайном

Галерея на jQuery

Простая система регистрации пользователей на сессиях

Галерея на php+jquery

Форма обратной связи с защитой типа капча

Шаблоны запросов и placeholders

Быстрое перенаправление средствами php

Flash плеер для вашего сайта

Сортировка столбцов в таблице на php+mysql

Язык разметки XHTML

Вызов диалогового окна на javascript

Простая система регистрации пользователей на сессиях

Cистема навигации сайта

Блочная верстка сайта

За весь период

За 2010-11

За 2009-06

За 2009-05

За 2009-04

За 2009-03

За 2009-02

За 2008-08

Бегун контекстная реклама

Ruseller видеоуроки

Letitbit файлообменник

Tak.Ru $$$ вебмастеру

WMmail почтовые рассылки

WMlink продажа трафика

Sape.Ru продажа ссылок

Главная » PHP-кодинг

Добавляем списки выбора в форму регистрации

Я решил добавить в форму регистрации поля для выбора "Даты рождения" и "Ваш пол" для более удобной идентификации каждого пользователя на сайте.

Добавьте в таблицу "users" два новых поля для идентификации даты вашего рождения и пола.


`birth` varchar(30) NOT NULL default '',
`sex` varchar(10) NOT NULL default '',

Подберите необходимую длину типа данных "varchar" для этих полей в соответствии с вашим языком. Я выбрал для строки "даты рождения" - 30 символовов, а для "пола" - достаточно 10-ти.

Перейдем к рассмотрению кода. В начале добавим новые элементы в нашу с вами форму:


<tr><td align="right">Дата рождения:</td><td><?
echo "<select name=day><option>День...</option>";
$day = 1;
while ($day <= 31)
{
	echo "<option value=$day>$day</option>"; $day++;
}
echo "</select>";
$months = array("Января","Февраля","Марта","Апреля","Мая","Июня","Июля","Августа","Сентября","Октября","Ноября","Декабря");
echo "<select name=month><option>Месяц...</option>";
$x = 0;
while($x < sizeof($months))
{
	print "<option value=".$months[$x].">".$months[$x]."</option>";
	$x++;
}
echo "</select>";
echo "<select name=year>
<option>Год...</option>";
$year = date ("Y");
$endyear = $year - 100;
while($year >= $endyear)
{
	echo "<option value=$year>$year</option>";$year--;
}
echo "</select>";
?></td></tr>
<tr><td align="right">Ваш пол:</td>
<td><select name="sex"><option>Ваш пол</option>
<option value="Мужской">Мужской</option>
<option value="Женский">Женский</option>
</select></td></tr>

Из формы видим, что все списки формируется динамически в цикле while. Для вывода дней используем счетчик от 1 до 31, а для года - текущий год(Y) вычесть 100 лет. Вы можете сделать по своему. Я решил, что этого достаточно. Для вывода "пола" используем обычный статический список, поскольку он небольшой. Значения сохраняем в $day (день), $month (месяц), $year (год) и $sex (пол) переменных.

Для формирования даты рождения в одну переменную в начале обработчика формы записываем следующее:


// дата рождения
$birth = $_POST['day']."|".$_POST['month']."|".$_POST['year'];
$sex = $_POST["sex"]; // Ваш пол

Данные поля не являются обязательными для выбора при регистрации, поэтому не будем проводим строгих проверок на соответствие. Но все же добавим в обработчик формы некоторые проверки в случае невыбранных значений (эту строчки можете записать сразу после цикла проверки if(!empty($city)):


if($_POST['month'] == 'Месяц...'){unset($_POST['month']);}
if($_POST['day'] == 'День...'){unset($_POST['day']);}
if($_POST['year'] == 'Год...'){unset($_POST['year']);}
if($sex == 'Ваш пол'){unset($sex);}

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


// с выбранной аватаркой
$query = "INSERT INTO users (username,password,email,icq,site,city,birth,sex,avatar,date,ip)"."VALUES ('mysql_escape_string($username)','$mdPassword','$emaila','$icq','$site','$city','$birth','$sex','$file_name','$date','$ip')";
// без выбранной аватарки
$query = "INSERT INTO users (username,password,email,icq,site,city,birth,sex,avatar,date,ip)"."VALUES ('mysql_escape_string($username)','$mdPassword','$emaila','$icq','$site','$city','$birth','$sex','$no_avt','$date','$ip')";

Список добавленных полей записал с учетом ранее внесенных мною в таблицу users. Порядок полей и значений должен совпадать.

Аналогичные манипуляции с кодом можете проделать и для режима "редактирования профиля" с одной лишь разницей, что запрос будет не INSERT, а UPDATE.

Для редактирования профиля подправим поля выбора дня рождения и пола в следующий вид:


<tr><td align="right">Вы родились:</td><td><?echo ''.($birth == ''?"не указано":"".str_replace('|', ' ', $birth)."").'';?></td></tr>
<tr><td align="right">Дата рождения:</td><td>
<?
// делим строку на элементы в виде массива, где "|" - разделитель
$birth = explode("|",$birth);
echo "<select name=day><option>".$birth[0]."</option>";
$day = 1;
while ($day <= 31)
{
	echo "<option value=".$day.">".$day."</option>"; $day++;
}
echo "</select>";
$months = array("Января","Февраля","Марта","Апреля","Мая","Июня","Июля","Августа","Сентября","Октября","Ноября","Декабря");
echo "<select name=month><option>".$birth[1]."</option>";
$x = 0;
while($x < sizeof($months))
{
	print "<option value=".$months[$x].">".$months[$x]."</option>";
	$x++;
}
echo "</select>";
echo "<select name=year><option>".$birth[2]."</option>";
$year = date ("Y");
$endyear = $year - 100;
while($year >= $endyear)
{
	echo "<option value=".$year.">".$year."</option>";$year--;
}
echo "</select>";
?></td></tr>
<tr><td align="right">Ваш пол:</td><td><select name="sex"><option><? echo ''.($sex == ''?"не указан":"$sex").'';?></option><option value="Мужской">Мужской</option><option value="Женский">Женский</option></select></td></tr>

И в обработчике редактировани (edit_account) соответственно:


//извлекаем переменные в самом начале
$sex = $_POST["sex"];
$birth = $_POST['day']."|".$_POST['month']."|".$_POST['year'];

// делаем проверки
if($sex == 'Ваш пол'){unset($sex);}
if(empty($birth)){$birth='';}
if(empty($sex)){$sex='не выбран';}

//обновляем записи с аватаркой
mysql_query("UPDATE users SET email='".$emaila."', icq='".$icq."', site='".$site."', city='".$city."', birth='".$birth."', sex='".$sex."', avatar='".$file_name."' WHERE username='".$_SESSION['username']."'",$db);

//обновляем записи без аватарки
mysql_query("UPDATE users SET email='".$emaila."', icq='".$icq."', site='".$site."', city='".$city."', birth='".$birth."', sex='".$sex."' WHERE username='".$_SESSION['username']."'");

И наконец, несколько слов о приминении. Значения полей даты рождения и пола можно выводить в тех же комментариях к заметке под соответствующей аватаркой пользователя. Вместо значения пола - "мужской или женский" можно вывести - статус-картинку, опредеющую пол зарегистрированного пользователя. Приведу наглядный пример. В цикл вывода комментариев, сразу после строчки $av = mysql_fetch_array($ava); запишем следующее:


switch($av['sex'])
{
case('Мужской'): $sex = "<img src=\"img/male.gif\" alt=\"мужской\">";break;
case('Женский'): $sex = "<img src=\"img/female.gif\" alt=\"женский\">";break;
case(''): $sex = "не указан";break;
default: break;
}

И там, где нам нужно вывести картинку для идентификации пола просто выведем переменную для него:

Пол: ".$sex."

На этом закончу. Надеюсь вы найдете приминение данной возможности на своем сайте.

Комментировать

Автор: admin | Добавлена: 10.05.2009 | Просмотров: 14296
Рейтинг: 41 | Голосов: 10

Оцените заметку: 1 2 3 4 5

Последние обновления в категории: PHP-кодинг

Комментарии (0)

Комментариев пока нет!

Только авторизованные пользователи могут добавлять комментарии. Зарегистрироваться.

Логин:
Пароль:
 

Регистрация

: Тема:

Заметок в базе: 56
Комментариев: 0
Всего юзеров: 114
Сейчас онлайн: 1