[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Авторизация и регистрация
natsuho
Доброго времени суток!!!

Помогите решить следующую задачу:
Необходимо зарегистрировать пользователя. Внести все его данные в БД. При дальнейшей авторизации пользователя он видит свою страничку с заполненными данными, зарегистрированные пользователи могут изменять свои данные.

Администратор может заходить на все странички пользователей и редактировать их данные.

Заранее огромное спасибо!!

у меня есть маленькие заготовки.....здесь регистрируются пользователи, но при повторе логина......также пользователь создается.

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
<?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 ;

Спустя 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 написал(а):
можно форму изменения данных сделать или добавления ,пиши если что
Быстрый ответ:

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