Помогите решить следующую задачу:
Необходимо зарегистрировать пользователя. Внести все его данные в БД. При дальнейшей авторизации пользователя он видит свою страничку с заполненными данными, зарегистрированные пользователи могут изменять свои данные.
Администратор может заходить на все странички пользователей и редактировать их данные.
Заранее огромное спасибо!!
у меня есть маленькие заготовки.....здесь регистрируются пользователи, но при повторе логина......также пользователь создается.
index.php
<FORM name="myForm" action=adduser.php method=post>
<div align="center" style="width: 100%; height: 100%;">
<div align="center" style=" width: 90%; height: 30%;">
<FONT SIZE="7" face="Monotype Corsiva, Arial" color="##000080"><br>Регистрация на сайте</FONT>
<div style="height: 30%;"> </div>
<font face="Comic Sans MS"><br>Это бесплатно, и каждый желающий может присоединиться к нам. Внимание, Абитуриент, при регистрации ВСЕ ПОЛЯ обязательны для заполнения. </font>
</div>
<div align="center" style="margin: 1% auto; width: 400px; height: 250px;">
<div align="center" style=" width: 100%; height: 90%;">
<div style="height: 30%;"> </div>
<font face="Comic Sans MS">Логин:</font>
<br><input type=text name=name SIZE="15">
<font face="Comic Sans MS"><br><br>Пароль:</font>
<br><input type=password name=pass SIZE="15">
<font face="Comic Sans MS"><br><br>Повторите пароль:</font>
<br><input type=password name=pass_again SIZE="15">
<font face="Comic Sans MS"><br><br>E-mail:</font>
<br>Указывайте Ваш реально существующий e-mail
<br><input type=text name=email SIZE="15">
</div>
<div style="height: 20%;"> </div>
<div align="center" style=" width: 100%; height: 20%; float: left;">
<br><input type="submit" style="width:300x; height:40px" value="Создать">
</div>
</div>
</div>
</form>
</body>
</form>
</html>
adduser.php
[php]<BODY background="../images/bg.jpeg"></body>
<?php
// Устанавливаем соединение с базой данных
require_once("config.php");
// Модуль безопасности
require_once("security_mod.php");
// Проверяем переданы ли имя пользователя и пароль
if(empty($_POST['name'])) exit("Не указано имя нового пользователя");
if(empty($_POST['pass'])) exit("Не указан пароль пользователя");
$name = $_POST['name'];
$password = $_POST['pass'];
// Проверяем равны ли пароли
if($password != $_POST['pass_again']) exit("Пароли не равны");
// Проверяем, чтобы не было никаких SQL-инъекций
if (!get_magic_quotes_gpc()){
$name = mysql_escape_string($name);
$password = mysql_escape_string($password);
}
$name = str_replace("'","`",$name);
$password = str_replace("'","`",$password);
// Если всё нормально создаём нового пользователя
$query = "INSERT INTO userlist (`name`,`pass`) VALUES ('$name','".md5($password)."')";
if(mysql_query($query)){
echo "Новый пользователь создан";
// echo "<HTML><HEAD>
// <META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php'>
// </HEAD></HTML>";
}
else exit("Ошибка при добавлении нового пользователя");
?>
config.php
<?php
/* Соединение, выбор БД */
$link = mysql_connect("localhost", "root", "")
or die("Could not connect");
mysql_select_db("karta") or die("Could not select database");
?>
security_mod.php
<?php
// Устанавливаем соединение с базой данных
require_once("config.php");
// Если пользователь не авторизовался - авторизуемся
if(!isset($_SERVER['PHP_AUTH_USER']))
{
/*Header("WWW-Authenticate: Basic realm=\"Admin Page\"");
Header("HTTP/1.0 401 Unauthorized");
exit();*/
}
else
{
// Утюжим переменные $_SERVER['PHP_AUTH_USER'] и $_SERVER['PHP_AUTH_PW'],
// чтобы мышь не проскочила
if (!get_magic_quotes_gpc())
{
$_SERVER['PHP_AUTH_USER'] = mysql_escape_string($_SERVER['PHP_AUTH_USER']);
$_SERVER['PHP_AUTH_PW'] = mysql_escape_string($_SERVER['PHP_AUTH_PW']);
}
$_SERVER['PHP_AUTH_USER'] = str_replace("'","`",$_SERVER['PHP_AUTH_USER']);
$_SERVER['PHP_AUTH_PW'] = str_replace("'","`",$_SERVER['PHP_AUTH_PW']);
$query = "SELECT pass FROM userlist WHERE name='".$_SERVER['PHP_AUTH_USER']."'";
$lst = @mysql_query($query);
// Если ошибка в SQL-запросе - выдаём окно
if(!$lst)
{
Header("WWW-Authenticate: Basic realm=\"Admin Page\"");
Header("HTTP/1.0 401 Unauthorized");
exit();
}
// Если такого пользователя нет - выдаём окно
if(mysql_num_rows($lst) == 0)
{
Header("WWW-Authenticate: Basic realm=\"Admin Page\"");
Header("HTTP/1.0 401 Unauthorized");
exit();
}
// Если все проверки пройдены, сравниваем хэши паролей
$pass = @mysql_fetch_array($lst);
if(md5($_SERVER['PHP_AUTH_PW']) != $pass['pass'])
{
Header("WWW-Authenticate: Basic realm=\"Admin Page\"");
Header("HTTP/1.0 401 Unauthorized");
exit();
}
}
?>
[/php][/php][php]
Спустя 1 день, 2 часа, 28 минут, 46 секунд (27.03.2010 - 11:38) Bl@ck Devil написал(а):
Добавь в проверку
$query = mysql_query("SELECT COUNT(id) FROM userlist WHERE name='".mysql_escape_string($name)."'");
if(mysql_result($query, 0) > 0)
{
echo "Пользователь с таким логином уже зарегестрирован.";
exit();
}
Спустя 1 минута, 41 секунда (27.03.2010 - 11:39) Bl@ck Devil написал(а):
или
$query = mysql_query("SELECT COUNT(id) FROM userlist WHERE name='".mysql_escape_string($name)."'");
if(mysql_result($query, 0) > 0)
{
exit("Пользователь с таким логином уже зарегестрирован.");
}
Спустя 1 час, 16 минут, 18 секунд (27.03.2010 - 12:56) natsuho написал(а):
Спасибо пользователь с таким же логином не создается!
А как выполнить авторизацию,чтоб пользователь увидел свои данные.Подскажите!
А как выполнить авторизацию,чтоб пользователь увидел свои данные.Подскажите!
Спустя 12 минут, 33 секунды (27.03.2010 - 13:08) Bl@ck Devil написал(а):
у тебя ставятся куки когда пользователь входит ?
Спустя 17 минут, 25 секунд (27.03.2010 - 13:25) natsuho написал(а):
нет не ставятся.
Все что делается при авторизации..я выложила вверху
Все что делается при авторизации..я выложила вверху
Спустя 10 минут, 51 секунда (27.03.2010 - 13:36) Bl@ck Devil написал(а):
natsuho ага , вижу , ну попробую щас написать ченть
Спустя 6 минут (27.03.2010 - 13:42) Bl@ck Devil написал(а):
а зачем авторизация через массив SERVER, если можно через куки сделать?
Спустя 7 минут, 31 секунда (27.03.2010 - 13:50) natsuho написал(а):
я авторизацию вот так уже сделала.....
Что совсем Вас запутала я...
Итак...для регистрации используются файлы index.php, adduser.php и config.php
Для авторизации:
index.php
handler.php
Я уже подругому чуток сделала
Что совсем Вас запутала я...
Итак...для регистрации используются файлы index.php, adduser.php и config.php
Для авторизации:
index.php
<?php
// Это файл index.php
session_start();
$_SESSION['user']="";
$_SESSION['password']=""
?>
<BODY background="../images/bg.jpeg">
<FORM name="myForm" action=handler.php method=post>
<div align="center" style="width: 100%; height: 100%;">
<div align="center" style=" width: 90%; height: 30%;">
<FONT SIZE="7" face="Monotype Corsiva, Arial" color="##000080"><br>Авторизация на сайте</FONT>
<div style="height: 30%;"> </div>
<font face="Comic Sans MS"><br>Это бесплатно, и каждый желающий может присоединиться к нам. Внимание, Абитуриент, при регистрации ВСЕ ПОЛЯ обязательны для заполнения. </font>
</div>
<div align="center" style="margin: 1% auto; width: 400px; height: 250px;">
<div align="center" style=" width: 100%; height: 90%;">
<div style="height: 30%;"> </div>
<font face="Comic Sans MS">Логин:</font>
<br><input type=text name=name SIZE="15" value=<?php echo $_SESSION['user']; ?>>
<font face="Comic Sans MS"><br><br>Пароль:</font>
<br><input type=password name=password SIZE="15" value=<?php echo $_SESSION['password']; ?>>
</div>
<div style="height: 20%;"> </div>
<div align="center" style=" width: 100%; height: 20%; float: left;">
<br><input type="submit" style="width:300x; height:40px" value="Войти">
</div>
</div>
</div>
</form>
</body>
</form>
</html>
handler.php
<?php
// Это файл handler.php
// сейчас выставлен сервер локальной машины
$dblocation = "localhost";
// Имя базы данных
$dbname = "karta";
// Имя пользователя...
$dbuser = "root";
// Пароль - в комментариях не нуждается ;-)
$dbpasswd = "";
// Соединяемся с сервером базы данных
$dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);
if (!$dbcnx) {
echo( "<P>В настоящий момент сервер базы данных не
доступен, поэтому корректное отображение
страницы невозможно.</P>" );
exit();
}
// Выбираем базу данных
if (! @mysql_select_db($dbname,$dbcnx) ) {
echo( "<P>В настоящий момент база данных не доступна,
поэтому корректное отображение страницы
невозможно.</P>" );
exit();
}
// Формируем и выполняем SQL-запрос для посетителя с
// именем $_POST['name']
$query = "SELECT password FROM users WHERE name='".mysql_real_escape_string($_POST['name'])."'";
$nme = mysql_query($query);
if(!$nme)
{
echo mysql_error();
echo "Ошибка выполнения запроса";
exit();
}
else
// Если запрос вернул результат - производим дальнейшую обработку
if(mysql_num_rows($nme) > 0)
{
// Получаем пароль
$password = mysql_result($nme, 0);
// Сравниваем пароль из базы данных и введённый посетителем
// if ($_POST['password'] == $password)
if($password == md5($_POST['password']))
{
// Идентификация прошла успешно - осуществляем
// "вход" посетителя. Для того, чтобы в течении текущей
// сесси посетитель не вводил своё имя пароль повторно -
// передаём их через сессию
if(session_start())
{
$_SESSION['user'] = $_POST['name'];
$_SESSION['password'] = $_POST['password'];
// Осуществляем автоматический переход на
// страницу index.php чтобы убедится, что
// посетитель "вошёл"
echo "<HTML><HEAD>
<META HTTP-EQUIV='Refresh' CONTENT='0; URL=../index.php'>
</HEAD><body>";
}
}
else
{
echo "Ошибка идентификации: неправильный пароль";
exit();
}
}
// Если в результате запроса не получено ни одной
// строки - посетитель с таким именем не зарегистрирован
else
{
?>
<HTML><META charset=windows-1251><HEAD><script language="JavaScript">alert("Ошибка идентификации: пользователь не зарегистрирован"); </script> </HEAD><body>";
<?php
echo "<HTML><HEAD>
<META HTTP-EQUIV='Refresh' CONTENT='1; URL=../index.php' >
</HEAD><body>";
exit();
}
?>
Я уже подругому чуток сделала
Спустя 2 минуты, 7 секунд (27.03.2010 - 13:52) Bl@ck Devil написал(а):
Напиши какие строки в базе данных userlist есть.
Спустя 1 минута, 55 секунд (27.03.2010 - 13:54) natsuho написал(а):
--
-- Структура таблицы `users`
--
CREATE TABLE `users` (
`id_user` int(11) NOT NULL auto_increment,
`name` tinytext,
`password` tinytext,
PRIMARY KEY (`id_user`)
) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=12 ;
-- Структура таблицы `users`
--
CREATE TABLE `users` (
`id_user` int(11) NOT NULL auto_increment,
`name` tinytext,
`password` tinytext,
PRIMARY KEY (`id_user`)
) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=12 ;
Спустя 46 секунд (27.03.2010 - 13:55) Bl@ck Devil написал(а):
user.php
require_once("config.php");
//Если пользователь вошел то :
if (isset($_SERVER['PHP_AUTH_USER'])){
$query_user = mysql_query("SELECT * FROM userlist WHERE name='".$_SERVER['PHP_AUTH_USER']."'");
$userdt = mysql_fetch_assoc($query_user) or die ("Ошибка при выполнении запроса юзера: ".mysql_error ());
echo "Привет ,".$userdt['name'].".";
echo "Ты ".$userdt['id_user']." на этом сайте.";
//Ну и таким способом можно остальные данные вывести !
}
Спустя 2 минуты, 27 секунд (27.03.2010 - 13:57) Bl@ck Devil написал(а):
можно форму изменения данных сделать или добавления ,пиши если что