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