|
|
автор: 45345 (26.05.2009 в 23:47) |
|
|
для: tAleks
(26.05.2009 в 23:40)
| | аналог записи $login_error_set = $login_error_set | LOGIN_TooSmal; (точно также, как .=, +=, -= и т.д.).
Побитовое ИЛИ. В данном случае просто установка флага | |
|
|
|
|
|
|
|
для: Bvz
(26.05.2009 в 12:00)
| |
if($llen < 2 )
$login_error_set |= LOGIN_TooSmal;
|
А вот это, что за оператор такой? - |= | |
|
|
|
|
|
|
| вот сделал простую авторизацию с регистрацией, прошу указать на недочеты и слабости скрипта.
регистрация
форма
<?php
//включаем сессию
session_start();
//подключаем БД
include 'include/configuration.php';
$_SESSION['id'] = session_id();
if ($_SESSION['error']==2)
{
echo "<div id=\"error\"><img src=\"media/attention.gif\" width=\"24\" height=\"24\" alt=\"ошибка ввода\"/> Ошибка ввода!<br /><br />";
$login_error_set = $_SESSION['login_error_set'];
$email_error_set = $_SESSION['email_error_set'];
$password_error_set = $_SESSION['password_error_set'];
//сообщения об ошибках
//ошибки ввода логина
switch ($login_error_set)
{
case(1):
echo ERROR_LOGIN_1;
break;
case(2):
echo ERROR_LOGIN_2;
break;
case(4):
echo ERROR_LOGIN_4;
break;
case(5):
echo ERROR_LOGIN_5;
break;
case(6):
echo ERROR_LOGIN_6;
break;
case(8):
echo ERROR_LOGIN_8;
break;
}
//ошибки ввода e-mail
switch ($email_error_set)
{
case(1):
echo ERROR_EMAIL_1;
break;
case(2):
echo ERROR_EMAIL_2;
break;
case(3):
echo ERROR_EMAIL_3;
break;
case(4):
echo ERROR_EMAIL_4;
break;
}
//ошибки ввода пароля
switch ($password_error_set)
{
case(1):
echo ERROR_PASSWORD_1;
break;
case(2):
echo ERROR_PASSWORD_2;
break;
case(3):
echo ERROR_PASSWORD_3;
break;
}
}
else
{
echo "<div>";
}
echo "<br /><br /></div>";
?>
<!--форма регистрации-->
<form action="registration.php" method="POST">
<table border="0">
<tr>
<td>Имя пользователя(логин): </td>
<td><input type="text" name="login" value="<?php if(isset($_SESSION['login'])) echo $_SESSION['login']; ?>" size="25" /></td>
</tr>
<tr>
<td>E-mail: </td>
<td><input type="text" name="email" value="<?php if(isset($_SESSION['email'])) echo $_SESSION['email']; ?>" size="25" /></td>
</tr>
<tr>
<td>Пароль: </td>
<td><input type="password" name="password" value="" size="25" /></td>
</tr>
<tr>
<td>Пароль еще раз: </td>
<td><input type="password" name="password2" value="" size="25" /></td>
</tr>
<tr>
<td colspan="2" align="right"><input type="submit" value="зарегестрировать" name="submit" /></td>
</tr>
</table>
</form>
|
проверка формы
<?php
//включаем сессию
session_start();
//подключаем БД
include 'include/configuration.php';
//Проверка переходa со страницы авторизации
if(isset($_POST['login']))
{
//Сравниваем переданный идентификатор из формы с текущим идентификатором сессии
if($_SESSION['id'] != session_id())
{
exit("$error");
}
//проверяем логин
$login = $_POST['login'];
$login_error_set = 0;
$llen = strlen($login);
if($llen < 2 )
$login_error_set |= LOGIN_TooSmal;
if($llen > 22)
$login_error_set |= LOGIN_TooBig;
if(!preg_match("|^[-0-9a-z_\.]+$|i", $login))
$login_error_set |= LOGIN_InvalidChars;
$e_login = mysql_escape_string($login);
if(mysql_result(mysql_query("SELECT COUNT(*) FROM user WHERE login='$e_login' "), 0) !== '0')
$login_error_set |= LOGIN_AlreadyRegistered;
$_SESSION['login_error_set'] = $login_error_set;
unset($_SESSION['login']);
if ($login_error_set == 0) $_SESSION['login']=$login;
//проверяем e-mail
$email = $_POST['email'];
$email_error_set = 0;
$elen = strlen($email);
if($elen < 1 )
$email_error_set |= EMAIL_TooNo;
if(!preg_match("|^[-0-9a-z_\.]+@[-0-9a-z\.]+\.[a-z]{2,6}$|i", $email))
$email_error_set |= EMAIL_InvalidChars;
$e_email = mysql_escape_string($email);
if(mysql_result(mysql_query("SELECT COUNT(*) FROM user WHERE email='$e_email' "), 0) !== '0')
$email_error_set |= EMAIL_AlreadyRegistered;
$_SESSION['email_error_set'] = $email_error_set;
unset($_SESSION['email']);
if ($email_error_set == 0) $_SESSION['email']=$email;
//проверяем пароль
$password = $_POST['password'];
$password_error_set = 0;
$plen = strlen($password);
if($plen < 1 )
$password_error_set |= PASSWORD_TooNo;
if($password != $_POST['password2'])
$password_error_set |= PASSWORD_NotEqual;
$_SESSION['password_error_set'] = $password_error_set;
if($login_error_set!=0 || $email_error_set!=0 || $password_error_set!=0)
{
$_SESSION['error']=2;
echo"<META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php'>";
}
else
{
session_unset();
$_SESSION['error']=1;
$_SESSION['login']=$login;
$password = md5(md5($password));
$save_user = "INSERT INTO user VALUES('', '".$login."', '".$email."', '".$password."')";
if (mysql_query($save_user))
{
echo "Данные успешно добавлены!<br />";
echo"<META HTTP-EQUIV='Refresh' CONTENT='1; URL=login.php'>";
}
}
}
else
{
exit ("$error");
}
?>
|
авторизация
<?php
//включаем сессию
session_start();
//подключаем БД
include 'include/configuration.php';
$_SESSION['id'] = session_id();
$url=$_SERVER['PHP_SELF'];
$filename = basename($url);
$_SESSION['url'] = "$filename";
if ($_SESSION['error']==1)
{
echo "<div id=\"congratulate\"><img src=\"media/congratulate.gif\" width=\"24\" height=\"24\" alt=\"поздравляем!\"/> Поздравляем, теперь Вы можете авторизоваться!<br /><br /></div>";
}
?>
<!--форма регистрации-->
<form action="authorization.php" method="POST">
<table border="0">
<tr>
<td>Имя пользователя(логин): </td>
<td><input type="text" name="login" value="<?php if($_SESSION['login'] == 0) echo $_SESSION['login']; ?>" size="25" /></td>
</tr>
<tr>
<td>Пароль: </td>
<td><input type="password" name="password" value="" size="25" /></td>
</tr>
<tr>
<td colspan="2" align="right"><input type="submit" value="войти" name="submit" /></td>
</tr>
</table>
</form>
|
проверка формы
<?php
//включаем сессию
session_start();
$filename = $_SESSION['url'];
echo $filename;
//подключаем БД
include 'include/configuration.php';
//Проверка переходa со страницы авторизации
if(isset($_POST['submit']))
{
//Сравниваем переданный идентификатор из формы с текущим идентификатором сессии
if($_SESSION['id'] != session_id())
{
exit("$error");
}
//Авторизация
$login = mysql_escape_string($_POST['login']);
$email_query = "SELECT password FROM user WHERE login='".$login."'";
$name = mysql_query($email_query);
if(!$name)
{
echo mysql_error();
echo "Ошибка выполнения запроса!<br />";
echo "<a href='".$filename."'>Попробовать еще!</a>";
exit();
}
if(mysql_num_rows($name) > 0)
{
$password = mysql_result($name, 0);
if (md5(md5($_POST['password'])) == $password)
{
if(session_start())
{
$_SESSION['ok'] = 1;
echo "<meta http-equiv='refresh' content='0; url=".$filename."'>";
echo "<a href='".$filename."'>Нажмите ссылку, если Ваш браузер не поддерживает автоматическую переадресацию!</a>";
}
}
else
{
echo "Неправильный пароль!<br />";
echo "<a href='".$filename."'>Попробовать еще!</a>";
exit();
}
}
else
{
echo "Такой пользователь не зарегистрирован!<br />";
echo "<a href='".$filename."'>Попробовать еще!</a>";
exit();
}
}
else
{
exit ("$error");
}
?>
|
конфигурационный файл
<?php
// Имя сервера базы данных
$dblocation = "localhost";
// Имя базы данных
$dbname = "user";
// Имя пользователя
$dbuser = "root";
// Пароль
$dbpasswd = "";
// Соединяемся с сервером базы данных
$dbconnect = @mysql_connect($dblocation,$dbuser,$dbpasswd);
if (!$dbconnect)
{
echo( "<P>Сервер базы данных не доступен, зайдите позже!</P>" );
exit();
}
// Выбираем базу данных
if (! @mysql_select_db($dbname,$dbconnect) )
{
echo( "<P>База данных не доступна, зайдите позже!</P>" );
exit();
}
// ошибки при заполнени логина
define('ERROR_LOGIN_1', "имя пользователя меньше 2 символов <br />");
define('ERROR_LOGIN_2', "имя пользователя больше 22 символов <br />");
define('ERROR_LOGIN_4', "имя пользователя должно состоять из символов <b>a-z A-Z 0-9 .- _</b> <br />");
define('ERROR_LOGIN_5', "имя пользователя меньше 2 символов<br />имя пользователя должно состоять из символов <b>a-z A-Z 0-9 .- _</b> <br />");
define('ERROR_LOGIN_6', "имя пользователя больше 22 символов<br />имя пользователя должно состоять из символов <b>a-z A-Z 0-9 .- _</b> <br />");
define('ERROR_LOGIN_8', "такой пользователь уже существует <br />");
define('LOGIN_TooSmal', 1);
define('LOGIN_TooBig', 2);
define('LOGIN_InvalidChars', 4);
define('LOGIN_AlreadyRegistered', 8);
// ошибки при заполнени email
define('ERROR_EMAIL_1', "не введен e-mail <br />");
define('ERROR_EMAIL_2', "e-mail не соответствует формату <b>sc2r2bey@netsurfing.ru</b> <br />");
define('ERROR_EMAIL_3', "не введен e-mail <br />e-mail не соответствует формату <b>sc2r2bey@netsurfing.ru</b> <br />");
define('ERROR_EMAIL_4', "такой e-mail уже существует <br />");
define('EMAIL_TooNo', 1);
define('EMAIL_InvalidChars', 2);
define('EMAIL_AlreadyRegistered', 4);
// ошибки при заполнени пароля
define('ERROR_PASSWORD_1', "не введен пароль <br />");
define('ERROR_PASSWORD_2', "пароли не совпадают <br />");
define('ERROR_PASSWORD_3', "не введен пароль<br />пароли не совпадают <br />");
define('PASSWORD_TooNo', 1);
define('PASSWORD_NotEqual', 2);
$error = "<div align=\"center\"><b>Ошибка 404</b>, страница не найдена!</div>";
?>
|
| |
|
|
|
|