после ввода всех данных регистрации выбивает голую страницу, а в бд данные не сохраняет...
помогите найти ошибку пожалуйста, либо посоветуйте какой нибудь скрипт, желательно с капчей и подтверждением регистртации, вообщем работоспособный и безопасный..
зарание спасибо
<?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
он вернет размер массива. Если массив равен аж 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
FUNCTION test.LAST_INSER_ID does not exist
Спустя 29 минут, 2 секунды (11.10.2011 - 11:53) Xakep написал(а):
вот так попробуй
P.S.: Условие какое-то страшное в этом скрипте...
$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 'Пользователь с таким именем уже существует';
все работает отлично!
Всем спасибо! к сожалению для плюсиков нек хватает постов:(