Вроде бы все правильно, но не получается создать просто страницы простейшей авторизации: должно уметь: Регистрация - логин (a-z0-9) - пароль Вход - логин - пароль Cookie - уникальный идентификатор юзера - хэш При регистрации в базу данных записываеться логин пользователя и пароль(в двойном md5 шифровании) Значит что я делаю: вот БД в мускуле [sql]-- - Структура таблицы `users` - CREATE TABLE `users` ( `user_id` int(11) unsigned NOT NULL auto_increment, `user_login` varchar(30) NOT NULL, `user_password` varchar(32) NOT NULL, `user_hash` varchar(32) NOT NULL, `user_ip` int(10) unsigned NOT NULL default '0', PRIMARY KEY (`user_id`) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;[/sql] создаем файлик register.php: PHP: <? // Страница регистрации нового пользователя # Соединямся с БД mysql_connect("localhost", "myhost", "myhost"); mysql_select_db("testtable"); if(isset($_POST['submit'])) { $err = array(); # проверям логин if(!preg_match("/^[a-zA-Z0-9]+$/",$_POST['login'])) { $err[] = "Логин может состоять только из букв английского алфавита и цифр"; } if(strlen($_POST['login']) < 3 or strlen($_POST['login']) > 30) { $err[] = "Логин должен быть не меньше 3-х символов и не больше 30"; } # проверяем, не сущестует ли пользователя с таким именем $query = mysql_query("SELECT COUNT(user_id) FROM users WHERE user_login='".mysql_real_escape_string($_POST['login'])."'"); if(mysql_result($query, 0) > 0) { $err[] = "Пользователь с таким логином уже существует в базе данных"; } # Если нет ошибок, то добавляем в БД нового пользователя if(count($err) == 0) { $login = $_POST['login']; # Убераем лишние пробелы и делаем двойное шифрование $password = md5(md5(trim($_POST['password']))); mysql_query("INSERT INTO users SET user_login='".$login."', user_password='".$password."'"); header("Location: login.php"); exit(); } else { print "<b>При регистрации произошли следующие ошибки:</b><br>"; foreach($err AS $error) { print $error."<br>"; } } } ?> <form method="POST"> Логин <input name="login" type="text"><br> Пароль <input name="password" type="password"><br> <input name="submit" type="submit" value="Зарегистрироваться"> </form> ?> создаем еще один файлик login.php: PHP: <? // Страница авторизации # Функция для генерации случайной строки function generateCode($length=6) { $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHI JKLMNOPRQSTUVWXYZ0123456789"; $code = ""; $clen = strlen($chars) - 1; while (strlen($code) < $length) { $code .= $chars[mt_rand(0,$clen)]; } return $code; } # Соединямся с БД mysql_connect("localhost", "myhost", "myhost"); mysql_select_db("testtable"); if(isset($_POST['submit'])) { # Вытаскиваем из БД запись, у которой логин равняеться введенному $query = mysql_query("SELECT user_id, user_password FROM users WHERE user_login='".mysql_real_escape_string($_POST['login'])."' LIMIT 1"); $data = mysql_fetch_assoc($query); # Соавниваем пароли if($data['user_password'] === md5(md5($_POST['password']))) { # Генерируем случайное число и шифруем его $hash = md5(generateCode(10)); if(!@$_POST['not_attach_ip']) { # Если пользователя выбрал привязку к IP # Переводим IP в строку $insip = ", user_ip=INET_ATON('".$_SERVER['REMOTE_ADDR']."')"; } # Записываем в БД новый хеш авторизации и IP mysql_query("UPDATE users SET user_hash='".$hash."' ".$insip." WHERE user_id='".$data['user_id']."'"); # Ставим куки setcookie("id", $data['user_id'], time()+60*60*24*30); setcookie("hash", $hash, time()+60*60*24*30); # Переадресовываем браузер на страницу проверки нашего скрипта header("Location: check.php"); exit(); } else { print "Вы ввели неправильный логин/пароль"; } } ?> <form method="POST"> Логин <input name="login" type="text"><br> Пароль <input name="password" type="password"><br> Не прикреплять к IP(не безопасно) <input type="checkbox" name="not_attach_ip"><br> <input name="submit" type="submit" value="Войти"> </form> ?> ну и надо теперь проверить скрипт, создаем последний файлик check.php PHP: <? // Скрипт проверки # Соединямся с БД mysql_connect("localhost", "myhost", "myhost"); mysql_select_db("testtable"); if (isset($_COOKIE['id']) and isset($_COOKIE['hash'])) { $query = mysql_query("SELECT *,INET_NTOA(user_ip) FROM users WHERE user_id = '".intval($_COOKIE['id'])."' LIMIT 1"); $userdata = mysql_fetch_assoc($query); if(($userdata['user_hash'] !== $_COOKIE['hash']) or ($userdata['user_id'] !== $_COOKIE['id']) or (($userdata['user_ip'] !== $_SERVER['REMOTE_ADDR']) and ($userdata['user_ip'] !== "0"))) { setcookie("id", "", time() - 3600*24*30*12, "/"); setcookie("hash", "", time() - 3600*24*30*12, "/"); print "Хм, что-то не получилось"; } else { print "Привет, ".$userdata['user_login'].". Всё работает!"; } } else { print "Включите куки"; } ?> должна работать регистрация и авторизация... ну должна и все!... работает только регистрация, авторизация нет... все перепроверила. не вижу ошибки. Еще надо чтоб после регистрации перенаправляло пользователя на index.php. вобщем в корень сайта, а у меня просто выдает что страница ненайдена. и при авторизации должно тоже перенаправлять на index.php, а авторизация вообще не работает... я уже сдаюсь и прошу специалистов помочь разобраться в моем корявом почерке. (большинство кусков было вытянуто с уроков Попова, часть с Нюки...) Если есть конечно желание и время, то помогите плз.
*шёпотом* не надо в этом признаваться вот один из примеров авторизации, для понимания основ достаточно. http://php.ru/forum/viewtopic.php?t=1732 Можете поискать по форуму, примеров много было.
Sofia login.php или check.php не работает? И при чем тут register.php, если регистрация работает? Думаешь, кто-то /бесплатно/ будет эти полтораста строк кода дебагить? Вопрос должен быть ясным, код надо приводить только относящийся непосредственно к вопросу. Действуй!
Luge я считаю что каждому человеку свойственно ошибаться, но самое главное - признавать свои ошибки. На мой взгляд - Попов единственный кто сделал PHP доступнее во всем рунете. Спасибо за ссылку, почитаю сейчас. Горбунов Олег тогда ПНХ тебе , ничего глупее я еще во всем рунете не видела, мозг у тебя не больше наперстка [vs] прочитай еще раз первый пост, последнее предложение. Ты думаешь я навязываю? А такие как ты, которые пальцы крутят и просто флудят на форуме, уже не в моде. Mr.M.I.T. заплатила конечно 1600р.
Бляяя я пацталом. =) Точно, надо их банить. У них фимоз головного мозга. И наличие сисек — не оправдание.
Тема закрыта. С проблемами Жени Попова разбирайтесь на его форуме поддержки. А тут зоопарк ламеров мне разводить не надо.