[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: регистрация и авторизация
2fed
не понимаю в чём проблема, у меня две формы регистрации (в админ панели) 1 для реги пользователей, другая - админов!

формы абсолютно одинаковые, только название таблицы другое!(таблицы тоже одникаовые) и ещё....почему то не проверяет логины, тоесть даже если такой логин есть - это всё равно решитсрирует его(

вот код:

<?
include('connect.php');// подключение к серверу MySql и выбор БД

if (($_POST['login']!='') ||
(
$_POST['pass']!='') ||
(
$_POST['pass2']!='') ||
(
$_POST['email']!='')) { // если все данные для регистрации введены, то продолжаем
$pass1 = $_POST['pass'];
$pass2 = $_POST['pass2'];

if (strcmp($pass1, $pass2) == 0) {// если пароли совпадают, то продолжаем
$login = $_POST['login'];
$email = $_POST['email'];

//проверяем наличие в БД пользователя с логином $login
$sql='SELECT * FROM users WHERE login='.$login; // поиск по логину в таблице users
if (!($res=mysql_query($sql)) || (mysql_num_rows($res) == 0)) { // если количество найденых записей ноль, то продолжаем
// sql-скрипт для добавления даных в таблицу

$sql = 'INSERT INTO `hacknet8`.`users`(login, pass, email)
VALUES("'
.$login.'", "'.$pass.'", "'.$email.'")';
if(mysql_query($sql)) {// выполняем скрипт
echo 'Пользователь '.$_POST['login'].' успешно зарегистрирован!.';
} else {
echo 'При регистрации произошла ошибка, повторите попытку.';
}
}
else echo 'Пользователь с таким логином уже зарегистрирован!';
} else echo 'Введенные пароли не совпадают, повторите попытку.';
}
?>




а вот авторизация:



<?
include('connect.php');// подключение к серверу MySql и выбор БД
$userinfo='';
$state='0';
if( (isset($_COOKIE['login'])) & (isset($_COOKIE['pass'])) ) {// если в куках лежит логин и зашифрованый пароля
if (!isset($_GET['exit'])) {// если кнопка выход не была нажата
$login=$_COOKIE['login'];
$pass=$_COOKIE['pass'];

// проверяем наличие пользователя в БД и достаём оттуда пароль
$sql="SELECT id, pass FROM users WHERE login='$login'";
$res=mysql_query($sql);
if(mysql_num_rows($res)>0){// если пользователь есть в БД
$userinfo = mysql_fetch_array($res);// в этой переменной лежит пароль из БД
if(strcmp($pass,md5($userinfo['pass'])) == 0) { //проверяем схожесть пароля из БД с паролем из куков

// достаём все данные из БД

$sql="SELECT * FROM users WHERE login='$login'";
$res=mysql_query($sql);
$userinfo=mysql_fetch_array($res); // в этой переменной будет лежать вся информация о пользователе из БД
$time=time();
// устанавливаем куки для запоминания статуса пользователя
setcookie("login",$login,$time+1800);
setcookie("pass",$pass,$time+1800);
$state = 1;// статус, если 1, тогда пользователь авторизован
}
}
}
else {
//обнуляем куки, если была нажата кнопка выход
setcookie("login");
setcookie("pass");
}
}

if($state != 1) {// если после проверки куков, оказалось, что пользователь не авторизован, то идем дальше
if( (isset($_POST['login'])) & (isset($_POST['pass'])) ){ // если пользователь ввёл логин и пароль
$login = $_POST['login'];

// проверяем наличие пользователя в БД и достаём оттуда пароль
$sql = "SELECT id, pass FROM users WHERE login='$login'";
$res = mysql_query($sql);
if(mysql_num_rows($res)>0) {// если пользователь есть в БД
$userinfo = mysql_fetch_array($res);// в этой переменной лежит пароль из БД и номер пользователя
$pass = $_POST['pass'];
if(strcmp($pass,$userinfo['pass'])==0){

// достаём все данные из БД
$sql="SELECT * FROM users WHERE login='$login'";
$res=mysql_query($sql);
$userinfo=mysql_fetch_array($res);// в этой переменной будет лежать вся информация о пользователе из БД
$time=time();
// устанавливаем куки для запоминания статуса пользователя, пароль шифруем
setcookie("login", $login, $time+1800);
setcookie("pass", md5($pass), $time+1800);
$state = 1;// статус, если 1, тогда пользователь авторизован
}
}
}
}

if($state != 1) {
?>


что тут не так?



Спустя 1 час, 16 минут, 44 секунды (12.05.2011 - 16:46) Mirexzpalich написал(а):
У голубчик, аккуратнее надо быть:

//проверяем наличие в БД пользователя с логином $login
$sql='SELECT * FROM users WHERE login="'.$login.'"'; // поиск по логину в таблице users
//Необходимо $login брать в кавычки, иначе запрос вернет ошибку

//Ваш запрос возвращает ошибку и !($res=mysql_query($sql)) получается TRUE.. и идет перезаписование.... Аккуратнее надо

if (!($res=mysql_query($sql)) || (mysql_num_rows($res) == 0)) { // если количество найденых записей ноль, то продолжаем
// sql-скрипт для добавления даных в таблицу

$sql = 'INSERT INTO `hacknet8`.`users`(login, pass, email)
VALUES("'
.$login.'", "'.$pass.'", "'.$email.'")';
if(mysql_query($sql)) {// выполняем скрипт
echo 'Пользователь '.$_POST['login'].' успешно зарегистрирован!.';
} else {
echo 'При регистрации произошла ошибка, повторите попытку.';
}
}
else echo 'Пользователь с таким логином уже зарегистрирован!';
} else echo 'Введенные пароли не совпадают, повторите попытку.';


Спустя 18 минут, 55 секунд (12.05.2011 - 17:05) XCross написал(а):

<?
include('connect.php');// подключение к серверу MySql и выбор БД


$errors=array();


if (empty($_POST['login'])){
$errors[]='Введите логин';
}


if (empty($_POST['pass'])){
$errors[]='Введите пароль';
}

if (empty($_POST['pass2'])){
$errors[]='Подтвердите пароль';
}


if (empty($_POST['email'])){
$errors[]='Укажите email';
}


if (strcmp($_POST['pass'], $_POST['pass2']) != 0){
$errors[]='Введенные пароли не совпадают';
}


if(count($errors)==0){


$login=trim(mysql_real_escape_string($_POST['login']));
$pass=trim(mysql_real_escape_string($_POST['pass']));
$email=trim(mysql_real_escape_string($_POST['email']));


$reg_step=mysql_query("SELECT * FROM `users` WHERE `login`='$login'") or die (mysql_error());

if(mysql_num_rows($reg_step)==0{

$add_query=mysql_query("INSERT INTO `hacknet8`.`users` SET
`login`= '
$login',
`pass`= '
$pass',
`email`='
$email'
"
) or die(mysql_error());

}
else{

$errors[]='Пользователь с таким именем уже существует!';

}



}


?>


На работоспособность не проверил, но основной принцип должен быть понятен. Не забуль отфильтровать входные данные. Вот отличная тема:

http://phpforum.ru/index.php?showtopic=21213


А и да....где нужно ошибки вывести там вставляй:


if(count($errors) != 0){
echo implode('<br>', $errors) .'<br>';
}

Спустя 1 час, 2 минуты, 4 секунды (12.05.2011 - 18:07) 2fed написал(а):
всем большое спасибо!
Быстрый ответ:

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