|
|
|
| из формы регистрации все передается в файл regist3.php, вот он:
<?PHP
session_start();
session_register('scd');
if(isset($HTTP_POST_VARS['securityCode']) && (isset($HTTP_SESSION_VARS['securityCode']) || isset($_SESSION['securityCode'])))
{
if(strtolower($HTTP_POST_VARS['securityCode'])==$HTTP_SESSION_VARS['securityCode'] || strtolower($HTTP_POST_VARS['securityCode'])==$_SESSION['securityCode'])
{
include "../admin/config.php";
// получаем данные
$login = trim($_POST['login']);
$pol = $_POST['pol'];
$familia = trim($_POST['familia']);
$dfamilia = trim($_POST['dfamilia']);
$name = trim($_POST['name']);
$otchestvo = trim($_POST['otchestvo']);
$date_day = $_POST['date_day'];
$date_month = $_POST['date_month'];
$date_year = $_POST['date_year'];
$pass1 = $_POST['pass1'];
$pass2 = $_POST['pass2'];
$email = trim($_POST['email']);
$icq = trim($_POST['icq']);
$dopolnitelno = $_POST['dopolnitelno'];
// Проверяем правильность ввода данных
if(empty($login)) echo "Не указан логин";
if(empty($familia)) echo "Не указана фамилия";
if(empty($name)) echo "Не указано имя";
if(empty($otchestvo)) echo "Не указано отчество";
if(empty($pass1) ||
empty($pass2) ||
$pass1 != $pass2) echo "Ошибка в паролях";
if(empty($email))
{
if (!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $email))
echo "Не указан e-mail";
}
// Блок проверки логина
$rus = array("А", "а", "В", "Е", "е", "К", "М", "Н", "О", "о", "Р", "р", "С", "с", "Т", "Х", "х");
$eng = array("A", "a", "B", "E", "e", "K", "M", "H", "O", "o", "P", "p", "C", "c", "T", "X", "x");
$eng_login = str_replace($rus, $eng, $login);
$rus_login = str_replace($eng, $rus, $login);
// Формируем SQL-запрос
$query = "SELECT * FROM user
WHERE login LIKE '$login' OR
login LIKE '$eng_login' OR
login LIKE '$rus_login'";
$ath = mysql_query($query);
if ($ath)
{
if(mysql_num_rows($ath)>0) echo "Данный логин уже зарегистрирован, попробуйте другой.";
}
else
// Формируем SQL-запрос на добавление регистрационных данных в БД
// Проверяем, нет ли одинарных кавычек
$login = str_replace("'","`", $login);
$familia = str_replace("'","`", $familia);
$dfamilia = str_replace("'","`", $dfamilia);
$name = str_replace("'","`", $name);
$otchestvo = str_replace("'","`", $otchestvo);
$email = str_replace("'","`", $email);
$icq = str_replace("'","`", $icq);
$dopolnitelno = str_replace("'","`", $dopolnitelno);
// Добавляем нового пользователя
$query_user = "INSERT INTO users VALUES(
NULL,
'$login',
'$pass1',
'$pol',
'$familia',
'$name',
'$otchestvo',
'$dfamilia',
'$bithday',
'$email',
'$icq',
'$dopolnitelno')";
}else{
print '<font color="red">Неверный защитный код!</font><br><br><a href="registform.php">Попробовать еще раз!</a><script>window.setTimeout(\'location.href("registform.php")\',1500);</script>';
}
}
?>
|
Вот, все вроде работает, определяет когда защитный код неправильно ввел, если фамилию не ввел и т.д., но вот в БД пользователь не попадает почему-то, что в коде не так?
Вот структура БД :
CREATE TABLE `users` (
`user_id` int(11) unsigned NOT NULL auto_increment,
`user_login` tinytext NOT NULL,
`user_password` tinytext NOT NULL,
`pol` int(1) NOT NULL default '0',
`user_f` tinytext NOT NULL,
`user_n` tinytext NOT NULL,
`user_o` tinytext NOT NULL,
`user_df` tinytext,
`bithday` date NOT NULL default '0000-00-00',
`email` tinytext NOT NULL,
`ICQ` tinytext,
`dopolnitelno` text,
PRIMARY KEY (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;
|
| |
|
|
|
|
|
|
|
для: Dizels
(12.09.2007 в 13:41)
| | Попробуйте выполнить код
$query_user = mysql_query("INSERT INTO users VALUES(
NULL,
'$login',
'$pass1',
'$pol',
'$familia',
'$name',
'$otchestvo',
'$dfamilia',
'$bithday',
'$email',
'$icq',
'$dopolnitelno')");
if(!$query_user){
echo mysql_error();
}
|
Какую ошибку выдает? | |
|
|
|
|
|
|
|
для: Dizels
(12.09.2007 в 13:41)
| | Где строка:
<?php
mysql_query($query_user) or die(mysql_error());
?>
|
| |
|
|
|
|
|
|
|
для: Indemion
(12.09.2007 в 14:07)
| | Попробуйте выполнить код$query_user = mysql_query("INSERT INTO users VALUES(
NULL,
'$login',
'$pass1',
'$pol',
'$familia',
'$name',
'$otchestvo',
'$dfamilia',
'$bithday',
'$email',
'$icq',
'$dopolnitelno')");
if(!$query_user){
echo mysql_error();
}
Какую ошибку выдает?
При вот таком все занеслось в БД, спасибо, тока если можно - укажите, в чем же ошибка была? | |
|
|
|
|
|
|
|
для: Dizels
(12.09.2007 в 16:17)
| | mysql_query посылает запрос MySQL, который вы сформировали, а у вас этой функции не было, следовательно ваш запрос не обрабатывался | |
|
|
|
|
|
|
|
для: Faraon
(12.09.2007 в 16:27)
| | Ок, большое спасибо за разъяснения. Пользователь зарегистрировался, но вот заметил некоторые недочеты, а именно:
1) в графе pol все время значение 0, я же думал, сделать так: 0 - мужск. пол, 1 - женский пол. Как это реализовать?
2) Почему-то не записывается в БД девичья фамилия, здесь я вообще не знаю почему так происход.
3)Дата рождения: здесь я понимаю что не так, у меня отдельные переменные на день, месяц и год, подскажите плз, как их правильно сформировать и запихнуть в столбец таблицы "bithday" и сразу же вопрос, как сделать так, чтобы пользователь обязательно выбирал свой день рождения, а то многие так и оставят 1 января 1940 года:)
4) И еще - только что попробовал добавить пользователя с таким же ником и у меня это свободно получилось, хотя не должно было, подскажите, что и здесь не так. | |
|
|
|
|
|
|
|
для: Dizels
(12.09.2007 в 16:35)
| | 1) и 2)
Приведите форму заполнения
3)
Можно проверять что если это значение равно 1 января 1940 года,
то возвращать к форме и писать ошибку или реализовать средствами Javascript проверку этого selecta | |
|
|
|
|
|
|
|
для: Faraon
(12.09.2007 в 17:01)
| | по 1 и 2:
<tr>
<td>Пол <font color="red">*</font> :</td>
<td>
<input type=radio name=pol onChange="dsurname(1, this)" value="myg">Муж
<input type=radio name=pol onChange="dsurname(2, this)" value="gen" checked>Жен
</td>
</tr>
<script>
function dsurname(which, obj)
{
obj.form.devichiafamilia.disabled = !(
(which==1 && !obj.checked) ||
(which==2 && obj.checked)
);
}
</script>
<tr>
<td>Девичья фамилия:</td>
<td><input type=text name=devichiafamilia size=30></td>
</tr>
|
по 3 - как для начала мне записать то, что уже ввели? у меня получается 3 переменных:
$date_day, $date_month, $date_year - вот их все в одну объединить и записать в БД, как это объединение сделать(сам код как написать не пойму). | |
|
|
|
|
|
|
|
для: Dizels
(12.09.2007 в 17:39)
| | 1.
У вас значение 1и2 не будет а будет myg или gen в зависимости то radio
2 Имя поля где пользователь пишет девичью фамилию
<input type=text name=devichiafamilia size=30>
|
А принимаете
3.
$d=$date_year."-".$date_month."-".$date_day; | |
|
|
|
|
|
|
|
для: Faraon
(12.09.2007 в 17:50)
| | 1)
из структуры БД:
`pol` int(1) NOT NULL default '0',
|
т.е. я не правильно указал в структуре, да? Нужно так:
?
2) Спасибо, не заметил.
3) еще раз спасибо.
4) И еще - только что попробовал добавить пользователя с таким же ником и у меня это свободно получилось, хотя не должно было, подскажите, что и здесь не так.
5) Так же почему-то, если не вводить пароль - выскакивает сообщение "ошибка пароля", однако запись о пользователе все равно заносится в БД | |
|
|
|
|
|
|
|
для: Dizels
(12.09.2007 в 18:00)
| | дата вводится, остальные вопросы в силе. | |
|
|
|
|
|
|
|
для: Dizels
(12.09.2007 в 19:18)
| | Попробуйте этот код
<?PHP
session_start();
session_register('scd');
if(isset($HTTP_POST_VARS['securityCode']) && (isset($HTTP_SESSION_VARS['securityCode']) || isset($_SESSION['securityCode'])))
{
if(strtolower($HTTP_POST_VARS['securityCode'])==$HTTP_SESSION_VARS['securityCode'] || strtolower($HTTP_POST_VARS['securityCode'])==$_SESSION['securityCode'])
{
include "../admin/config.php";
// получаем данные
$login = trim($_POST['login']);
$pol = $_POST['pol'];
$familia = trim($_POST['familia']);
$dfamilia = trim($_POST['dfamilia']);
$name = trim($_POST['name']);
$otchestvo = trim($_POST['otchestvo']);
$date_day = $_POST['date_day'];
$date_month = $_POST['date_month'];
$date_year = $_POST['date_year'];
$pass1 = $_POST['pass1'];
$pass2 = $_POST['pass2'];
$email = trim($_POST['email']);
$icq = trim($_POST['icq']);
$dopolnitelno = $_POST['dopolnitelno'];
// Проверяем правильность ввода данных
if(empty($login)){ echo "Не указан логин";
exit;
}
if(empty($familia)){ echo "Не указана фамилия";
exit;
}
if(empty($name)){ echo "Не указано имя";
exit;
}
if(empty($otchestvo)){ echo "Не указано отчество";
exit;
}
if(empty($pass1) || ($pass2)){
if($pass1 != $pass2){
echo "Ошибка в паролях";
exit;
}
}
if(empty($email))
{
if (!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $email))
echo "Не указан e-mail";
exit;
}
// Блок проверки логина
$rus = array("А", "а", "В", "Е", "е", "К", "М", "Н", "О", "о", "Р", "р", "С", "с", "Т", "Х", "х");
$eng = array("A", "a", "B", "E", "e", "K", "M", "H", "O", "o", "P", "p", "C", "c", "T", "X", "x");
$eng_login = str_replace($rus, $eng, $login);
$rus_login = str_replace($eng, $rus, $login);
// Формируем SQL-запрос
$query = "SELECT * FROM user
WHERE login LIKE '$login' OR
login LIKE '$eng_login' OR
login LIKE '$rus_login'";
$ath = mysql_query($query);
if (mysql_num_rows($ath)>0)
{
echo "Данный логин уже зарегистрирован, попробуйте другой.";
exit;
}
else{
// Формируем SQL-запрос на добавление регистрационных данных в БД
// Проверяем, нет ли одинарных кавычек
$login = str_replace("'","`", $login);
$familia = str_replace("'","`", $familia);
$dfamilia = str_replace("'","`", $dfamilia);
$name = str_replace("'","`", $name);
$otchestvo = str_replace("'","`", $otchestvo);
$email = str_replace("'","`", $email);
$icq = str_replace("'","`", $icq);
$dopolnitelno = str_replace("'","`", $dopolnitelno);
// Добавляем нового пользователя
$query_user = mysql_query("INSERT INTO users VALUES(
NULL,
'$login',
'$pass1',
'$pol',
'$familia',
'$name',
'$otchestvo',
'$dfamilia',
'$bithday',
'$email',
'$icq',
'$dopolnitelno')");
}
}else{
print '<font color="red">Неверный защитный код!</font><br><br><a href="registform.php">Попробовать еще раз!</a><script>window.setTimeout(\'location.href("registform.php")\',1500);</script>';
}
}
?>
|
| |
|
|
|
|
|
|
|
для: Faraon
(13.09.2007 в 09:34)
| | Вот такую ошибку выдает:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in z:\home\localhost\www\peoplecrimea\regist_user\regist3.php on line 79
Вот эта строка:
$ath = mysql_query($query); | |
|
|
|
|
|
|
|
для: Dizels
(13.09.2007 в 12:15)
| | Замените
if(mysql_num_rows($ath)>0){
|
на
if(mysql_result($ath, 0, "login")==true){
|
| |
|
|
|
|
|
|
|
для: Faraon
(13.09.2007 в 12:22)
| | Warning: mysql_result(): supplied argument is not a valid MySQL result resource in z:\home\localhost\www\peoplecrimea\regist_user\regist3.php on line 79
Вот такая теперь ошибка, строку поменял. Самое интересное, что пользователь в БД записывается, но вот ошибка выпадает. И при этом не работает проверка уникальности логина. | |
|
|
|
|
|
|
|
для: Dizels
(13.09.2007 в 14:12)
| | Странно у меня работает
А что вот это за проверка, что-то не пойму что здесь проверяется ?
$rus = array("А", "а", "В", "Е", "е", "К", "М", "Н", "О", "о", "Р", "р", "С", "с", "Т", "Х", "х");
$eng = array("A", "a", "B", "E", "e", "K", "M", "H", "O", "o", "P", "p", "C", "c", "T", "X", "x");
$eng_login = str_replace($rus, $eng, $login);
$rus_login = str_replace($eng, $rus, $login);
|
| |
|
|
|
|
|
|
|
для: Faraon
(13.09.2007 в 15:17)
| | Проверяется не осущетсвляется ли попытка подделать имя, используя вместо русских букв английских и наоборот. | |
|
|
|
|
|
|
|
для: cheops
(13.09.2007 в 15:39)
| | cheops прав, это взято из книги Практика создания web-сайтов PHP 5. и вот эта строка кстати тоже
if(mysql_num_rows($ath)>0){
|
Так что здесь, как мне кажется дело в чем-то другом | |
|
|
|
|
|
|
|
для: Dizels
(13.09.2007 в 15:53)
| | - | |
|
|
|
|
|
|
|
для: Faraon
(13.09.2007 в 16:21)
| | Твою дивизию и что же я опять дамп БД не посмотрел
У вас же столбец login не существует а есть user_login
$query = "SELECT * FROM user
WHERE user_login LIKE '$login' OR
user_login LIKE '$eng_login' OR
user_login LIKE '$rus_login'";
|
| |
|
|
|
|
|
|
|
для: Faraon
(13.09.2007 в 16:32)
| | Блин - все равно туже ошибку выдает. | |
|
|
|
|
|
|
|
для: Dizels
(13.09.2007 в 16:47)
| | Давайте узнаем что за ошибка
if(!$ath) echo mysql_error();
|
| |
|
|
|
|
|
|
|
для: Faraon
(13.09.2007 в 17:07)
| | УРА! ПОЛУЧИЛОСЬ!
Ошибка как всегда была в моей невнимательности вот код который был:
$query = "SELECT * FROM user
WHERE user_login LIKE '$login' OR
а таблица называлась users!
ОГРОМНОЕ СПАСИБО, Faraon! Без твоей помощи я бы очень долго мучался. Я думаю, что это далеко не последний мой вопрос на форуме, поэтому давай на "ты", а то я чего-то заметил, что ты ко мне на "вы".
P.S. остался один маленький вопросик - как поступить с полом? Как его в таблице писать?
У меня было так:
`pol` int(1) NOT NULL default '0',
|
Но как я понимаю надо так:
я прав? | |
|
|
|
|
|
|
|
для: Dizels
(13.09.2007 в 17:37)
| | Думаю CHAR(3) подойдет | |
|
|
|
|
|
|
|
для: Faraon
(13.09.2007 в 17:51)
| | Enum 'male','female' | |
|
|
|
|