Короче есть сервак, нужно сделать веб панель для того, чтобы юзеры могли управлять своей учеткой.
Соль в следующем: есть MySQL база с игроками (ник, пароль, айпи), в этой базе прописаны права игрокам. Там же можно прикрепить пароль к нику, выставить флаги доступа (дают разные права и привелегии на сервере). Так вот, например, если кому-то надо поставить пароль на ник, то обязательно нужно лезть в эту базу, там ковыряться руками, а если таких людей 20 в день? Запарно. Нельзя ли (вернее я знаю, что можно) - как замутить такую веб панельку? Извините, если что криво описал - спать хочу безумно, голова не варит. Если что сутра объясню получше.
ну я так понял тебе нужна рега (как бы рега, ведь ник уже есть, осталось пароль прописать) и авторизация. Посмотри как это сделано в Фапосе.
Файл /modules/users/index.php
Там он разбит на экшены(function блабла())
Так вот найди экшены login и login_form - это авторизация
А так же add и add_form - это рега
Добавлено 2010.11.23 11-43
А так принцып в двух словах: РЕГИСТРАЦИЯ на PHP:
создаем форму
юзер ее заполняет и отправляет
мы ее проверяем и если что не так редиректим назад и выводим ошибки
если все ок, заносим данные в базу и выдаем мессагу типа все ОК
АВТОРИЗАЦИЯ на PHP:
создаем форму
юзер ее заполняет и отправляет
мы проверяем есть ли в базе такая пара пароль/логин
если есть создаем сессию для юзера как для авторизованного (как правило это просто инфа об этом юзере в сессии, например $_SESSION['user'] = array(блабла))
если такого нет выдаем мессагу типа вы ошиблись или пытаетесь нас брутфорсить)))
Drunya, сейчас получше объясню. Мне нужна рега для входа в панель, чтобы туда можно было зайти. Далее, уже, когда вошел в саму понель, чтобы можно было заполнить поле ник | пароль, при заполнении, чтобы они отправлялись в мускулу, а IP отправившего заносился в лог + создавались куки на неделю, запрещающие повтор.
Добавлено 2010.11.23 15-59
Drunya, вот я нашел тут для меня-чайника. http://dezignweb.h17.ru/reg_php.php
ну так обычная рега я о ней и говорил. А куда именно она будет позволять добраться это уже другой вопрос, куда хочешь туда и закрываешь доступ, это не проблема. А куки это лишь файл на компе клиента, так что запретить что либо они смогут только этому браузеру с которого заходили и больше никому
# проверям логин
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)
{
<?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;
}
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']."'");
<?php 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 "Включите куки";
}?>
Как сделать следующее:
1) print "Привет, ".$userdata['user_login'].". Всё работает!"; - изменить на главную страницу личного кабинета
2) Сделать кнопку "выход", которая затерает куки
Понаписал тут бреду...Короче, регистрацию в самом личном кабинете я оформил, просмотр только для зарегенных тоже. Теперь остался последний самый сложный вопрос.
Дело в том, что нужно сделать такую регистрацию:
- Ник
- Пароль
- Сервер (у каждого сервера свой ID - об этом дальше)
Далее ник и пароль заносятся в эту бд.
username и password соответственно. +каждому присваивается свой ID, который нам понадобится дальше. Остальные параметры, даже не разбирайте, это настройка прав доступа к серверу.
Эта бд отвечает только за создание учетки, за прикрепление к серверу отвечает следующая бд.
Чтобы аккаунт прикрепился к серверу, нужно заполнить ID игрока и ID сервера, который мы указали при регистрации.
Из необязательного: возможность выставить срок в конфигурационном файле реги, через который будет удалена запись.
Drunya, в общем такие пироги. Готов купить такую шнягу, потому что своим мозгом и незнанием php я вряд ли смогу что-то сделать
На самом деле ты все нормально делаешь. Только все данные ескейпи перед вставкой в запрос (mysql_real_escape_string())
Затирание куки есть не что иное как запись тех же кук только с пустыми значениями и временем истечения -1 секунда например
Привязку к серверу делай так же как и регу, то есть в самой реге, просто когда пишешь в базу нового юзера, наряду с другими данными пиши и ИД сервера
Добавить в первую базу, я смогу, после долгих мучений, конечно, но вот, как добавить во вторую базу...Там нужен ID, под которым добавили человека в предыдущую, ID сервера в принципе легко присваивается к его названию в заполнении формы. Отсюда вопрос: как узнать ID юзера, которого мы только что добавили в таблицу, чтобы вставит его во вторую? как-то так...
$cerere = "SELECT id FROM `amx_amxadmins` WHERE username='$user'";
$res=mysql_query($cerere) or die (mysql_error());
$row = mysql_fetch_row($res);
$id_player = $row[0];
$cerere="INSERT INTO `amx_admins_servers` (`admin_id`, `server_id`) VALUES ('$id_player','1')";
mysql_query($cerere) or die(mysql_error());?>