[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Скрипт регистрации. Что то не работает:(
SeekerPhp
Недавно изучаю php самостоятельно, захотелось на примере научится создавать безопасный и хороший скрипт авторизации и регистрации пользователей, скачал, вроде разобрался, а он не работает почему то:(
после ввода всех данных регистрации выбивает голую страницу, а в бд данные не сохраняет...

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


<?php
if ($_POST) //Условие будет выполнено, если произведен POST-запрос к скрипту.
{
/*
Функция trim() удаляет все пробельные символы из начала и конца строки. И если пользователь ввёл пробел в начале или конце значения поля, он будет удалён.
*/

$login = trim($_POST['rlogin']);
$password = trim($_POST['rpass']);
$password_r = trim($_POST['rpass_r']);
$email = trim($_POST['email']);

$error = false;//Создаем переменную, контролирующую ошибки регистрации.
$errortext = '<p>При регистрации на сайте произошли следующие ошибки:</p><ul>';//Создаем переменную, которая будет содержать текст ошибок регистрации.

/*
Тут будем делать различные проверки, пропускаю пока этот код.
*/

if (empty($login))
{

//Если значение Имя пользователя не заполнено, меняем значение переменной контроля над ошибками.
$error = true;
//Добавляем к тексту ошибок соответсвующее значение.
$errortext .= '<li>Вы не заполнели поле Имя пользователя!</li>';

} else {
if (!preg_match('/^[a-z0-9]{4,12}$/i',$login))
{
//Проверяем значение поле логин. Если он не соотвествует условию регулярного выражения выводим ошибку.
//В данном случае он должен состоять из 4-12 латинских символов или цифр.

$error = true;
$errortext .= '<li>Убедитесь что Логин содержит от 4 до 12 символов, и состоит из латинских символов и цифр</li>';
}
}


if (empty($password))
{

//Проверяем поле пароль. Если оно пустое выводим ошибку.
$error = true;
$errortext .= '<li>Вы не заполнили поле Пароль!</li>';

} else {
if (!preg_match('/^[a-z0-9]{6,20}$/i',$password))
{
//Проверяем значение поле пароль. Если он не соотвествует условию регулярного выражения выводим ошибку.
//В данном случае он должен состоять из 6-20 латинских символов или цифр.

$error = true;
$errortext .= '<li>Убедитесь что Пароль содержит от 6 до 20 символов, и состоит из латинских символов и цифр</li>';
}
}


if (empty($password_r))
{
//Проверяем заполнено ли поле Подтверждение пароля. Если оно пустое выводим ошибку.
$error = true;
$errortext .= '<li>Вы не заполнили поле Подтверждение пароля!</li>';
} else {
if ($password != $password_r)
{
//Если значение поля Подтверждение пароля не равно значению поля Пароль выводим ошибку.
$error = true;
$errortext .= '<li>Поле Пароль и его Подтверждение не совпадают!</li>';
}
/*
Так как мы проверяем значение поля Пароль на длинну и символы которые он содержит, а затем
проверяем равно ли значение поля Подтверждения пароля полю Пароль, остальные проверки этого значения не обязательны.
*/

}

if (empty($email))
{
//Проверяем поле E-Mail. Если оно пустое выводим ошибку.
$error = true;
$errortext .= '<li>Вы не заполнили поле E-Mail</li>';
} else {
if (!preg_match('/^[-0-9a-z_\.]+@[-0-9a-z^\.]+\.[a-z]{2,4}$/i',$email))
{
//Делаем проверку на правильно ввода E-Mail адреса.
$error = true;
$errortext .= '<li>Не правильно заполнено поле E-Mail. E-mail должен иметь вид user@somehost.com</li>';
}
}


$errortext .= '</ul>';



if ($error)
{
/*
Если произошла ошибка или пользователь ввёл неправильно какое-либо значение, будет
выполнен этот код. Здесь нет ничего сложного, просто выводим ошибки допущенные
пользователем
*/

echo($errortext);//Выводим текст ошибок.
} else {
/*
Этот код будет выполнен, если все проверки пройдены успешно. Тут мы и будем
записывать пользователя в базу данных.
*/

//Подсоединяемся к MySQL

$db = 'test';
$dbhost = 'localhost';//Хост MySQL
$dblogin = 'Seeker';
$dbpassword = 'test1STS';
$dbcon = @mysql_connect($dbhost,$dblogin,$dbpassword);

if (!$dbcon)
{
echo "<p>Произошла ошибка при подсоединении к MySQL!</p>".mysql_error(); exit();
} else {

if (!@mysql_select_db($db, $dbcon))
{
echo("<p>Выбранной базы данных не существует!</p>");
}

}


$sql = mysql_query("INSERT INTO `users` VALUES(LAST_INSER_ID(), '$login', '".md5($password)."', '$email' );");//Выполняем SQL-запрос записывающий значения в базу.

if ($sql)
{
//Если SQL-запрос выполнен
echo('<p>Вы успешно зарегистрированы на сайте!</p>');//Выводим сообщение об успешной регистрации
}

mysql_close($dbcon);//Закрываем соединение MySQL.

}

}


if (($_POST && $error) || !$_POST)
{
//Форма будет выводится в том случае, если был произведен POST запрос к скрипту и была допущена ошибка или POST-запроса не было.
?>
<form id="register_form" name="register_form" method="post" action="">
<
table width="508" height="231" border="1" align="center" cellpadding="0" cellspacing="0">
<
tr>
<
td width="251" align="right">Login:</td>
<
td width="251" align="center">
<
input type="text" name="rlogin" id="rlogin" <?php if ($_POST && $error && isset($_POST['rlogin'])) { echo('value="'.$_POST['rlogin'].'" '); } ?>/>
</
td>
</
tr>
<
tr>
<
td align="right">Password:</td>
<
td align="center"><input type="password" name="rpass" id="rpass" <?php if ($_POST && $error && isset($_POST['rpass'])) { echo('value="'.$_POST['rpass'].'" '); } ?>/></td>
</
tr>
<
tr>
<
td align="right">Repeat Password:</td>
<
td align="center"><input type="password" name="rpass_r" id="rpass_r" <?php if ($_POST && $error && isset($_POST['rpass_r'])) { echo('value="'.$_POST['rpass_r'].'" '); } ?>/></td>
</
tr>
<
tr>
<
td align="right">E-Mail:</td>
<
td align="center"><input type="text" name="email" id="email" <?php if ($_POST && $error && isset($_POST['email'])) { echo('value="'.$_POST['email'].'" '); } ?>/></td>
</
tr>
<
tr>
<
td colspan="2" align="center">
<
input type="submit" name="reg_button" id="reg_button" value=" Register " />
</
td>
</
tr>
</
table>
</
form>
<?php
}
?>




Спустя 6 минут, 23 секунды (11.10.2011 - 08:31) m4a1fox написал(а):
SeekerPhp
Цитата
if ($_POST) //Условие будет выполнено, если произведен POST-запрос к скрипту.

Условие, как ни странно будет выполнено в любом случае. Есть запрос или нет его! Имхо

Спустя 3 минуты, 7 секунд (11.10.2011 - 08:34) SeekerPhp написал(а):
да я кстате тоже не понял зачем оно тут надо, но думал про писали, им виднее:)

Спустя 42 минуты, 58 секунд (11.10.2011 - 09:17) Zerstoren написал(а):
заменяйте на count($_POST)

он вернет размер массива. Если массив равен аж 0 элементов - значит ничего и не отправлялось. А как помните 0 == false

Спустя 18 минут, 10 секунд (11.10.2011 - 09:35) m4a1fox написал(а):
а не легче проверять по нажатию?

Спустя 1 час, 2 минуты, 33 секунды (11.10.2011 - 10:37) SeekerPhp написал(а):
проверил, $sql запрос не выполняется.. знач что то с таблицей...
я еще не совсем шарю в базе данных, поэтому создал таблицу ту что шла с рагистрацией.

CREATE TABLE `users` (
`id` INT( 10 ) NOT NULL AUTO_INCREMENT ,
`login` VARCHAR( 12 ) NOT NULL ,
`pass` TEXT NOT NULL ,
`email` TEXT NOT NULL ,
PRIMARY KEY ( `id` )
);


может не правильная таблица?

Спустя 23 минуты, 43 секунды (11.10.2011 - 11:01) m4a1fox написал(а):
И?

Спустя 8 минут, 12 секунд (11.10.2011 - 11:09) SeekerPhp написал(а):
и спрашеваю, может, неправильно создал таблицу?
все сторорится именно на отправке данных в таблицу. ИМХО


Спустя 2 минуты, 37 секунд (11.10.2011 - 11:12) Xakep написал(а):
В первую очередь подключаешься к MySQL, создаешь БД, подключаешься к ней, создаешь в ней таблицу, а потом уже используешь скрипты регистрации.


<?php
@mysql_connect("localhost","Seeker","test1STS") or die (mysql_error());
@mysql_select_db("ТУТ ИМЯ ТВОЕЙ БД") or die (mysql_error());
$sql="CREATE TABLE `users` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`login` TEXT NOT NULL,
`pass` TEXT NOT NULL,
`email` TEXT NOT NULL,
PRIMARY KEY(`id`))"
;
@mysql_query($sql) or die(mysql_error());
?>


Проверь все ли ты правильно писал?

Спустя 5 минут, 9 секунд (11.10.2011 - 11:17) Zerstoren написал(а):
не забывайте после каждого mysql запроса или коннекта, писать mysql_error

сразу проблемы отпадут

Спустя 6 минут, 39 секунд (11.10.2011 - 11:24) SeekerPhp написал(а):
Xakep, бд есть, таблица есть, Zerstoren полезный совет:) теперь выбивает ошибку..
FUNCTION test.LAST_INSER_ID does not exist


Спустя 29 минут, 2 секунды (11.10.2011 - 11:53) Xakep написал(а):
вот так попробуй
 $sql="INSERT INTO `users` (`login`,`pass`,`email`) VALUES (`".$login."`,`md5(".$password.")`,`".$email."`)" or die (mysql_error());


P.S.: Условие какое-то страшное в этом скрипте...

Спустя 28 минут, 34 секунды (11.10.2011 - 12:21) SeekerPhp написал(а):
в чем проблема не совсем разобрался, взял пример запроса с другого кода, и подставил в свой, так же в бд пароль с шифрованием мд5 не хочет выполгнятся запрос, поэтому создал отдельную переменную pass, $pass = md5(password), и добавил проверку логина..

$sql='SELECT * FROM users WHERE login='.$login; // поиск по логину в таблице users

if (!($res=mysql_query($sql)) || (mysql_num_rows($res) == 0))
{ // если количество найденых записей ноль, то продолжаем
$sql = mysql_query("INSERT INTO users(login, pass, email)
VALUES('
$login', '$pass', '$email');");//Выполняем SQL-запрос записывающий значения в базу.


if ($sql)
{
//Если SQL-запрос выполнен
echo('<p>Вы успешно зарегистрированы на сайте!</p>');//Выводим сообщение об успешной регистрации

}


else
echo 'что то с таблицой'.mysql_error(); exit();


mysql_close($dbcon);//Закрываем соединение MySQL.
}
else
echo 'Пользователь с таким именем уже существует';


все работает отлично!

Всем спасибо! к сожалению для плюсиков нек хватает постов:(
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.