|
 2.2 Кб |
|
| Доброго времени суток!
Помогите решить следующую задачу:
выполнить авторизацию пользователей,чтоб.... при дальнейшей авторизации пользователя он видел свою страничку с заполненными данными, зарегистрированные пользователи могут изменять свои данные.
Администратор может заходить на все странички пользователей и редактировать их данные.
Вот что есть у меня:
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']; ?>>
<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>
а также файл handler.php:
<?php
// Это файл handler.php
// Имя сервера базы данных, например $dblocation = "mysql28.noweb.ru"
// сейчас выставлен сервер локальной машины
$dblocation = "localhost";
// Имя базы данных
$dbname = "karta";
// Имя пользователя... Скорее всего будет совпадать с вашим доменным именем
// у нас, например $dbuser = "softtime";
$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='".$_POST['name']."'";
$nme = mysql_query($query);
if(!$nme)
{
echo mysql_error();
echo "Ошибка выполнения запроса";
exit();
}
// Если запрос вернул результат - производим дальнейшую обработку
if(mysql_num_rows($nme) > 0)
{
// Получаем пароль
$password = mysql_result($nme, 0);
// Сравниваем пароль из базы данных и введённый посетителем
if ($_POST['password'] == $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=registration/index.php' >
</HEAD><body>";
exit();
}
?> | |
|
|
|
|
|
|
|
для: natsuho
(26.03.2010 в 13:37)
| | начнём с самого начала....
при написании сообщения, справа от формы есть теги выделения текста, там есть тег code, используйте его для оформления кода в сообщении
пример.
<?php
$a = 1;
echo $a;
// код выводится с подсветкой, теперь его легче читать и разобраться в нём.
?>
|
это не прихоть, так действительно удобней смотреть чужой код... | |
|
|
|
|
|
|
|
для: Slo_Nik
(26.03.2010 в 14:38)
| | Сори я не видела..не заметила!
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']; ?>>
<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>
|
handler.php
<?php
// Это файл handler.php
// Имя сервера базы данных, например $dblocation = "mysql28.noweb.ru"
// сейчас выставлен сервер локальной машины
$dblocation = "localhost";
// Имя базы данных
$dbname = "karta";
// Имя пользователя... Скорее всего будет совпадать с вашим доменным именем
// у нас, например $dbuser = "softtime";
$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='".$_POST['name']."'";
$nme = mysql_query($query);
if(!$nme)
{
echo mysql_error();
echo "Ошибка выполнения запроса";
exit();
}
// Если запрос вернул результат - производим дальнейшую обработку
if(mysql_num_rows($nme) > 0)
{
// Получаем пароль
$password = mysql_result($nme, 0);
// Сравниваем пароль из базы данных и введённый посетителем
if ($_POST['password'] == $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=registration/index.php' >
</HEAD><body>";
exit();
}
?>
|
| |
|
|
|
|
|
|
|
для: natsuho
(26.03.2010 в 15:17)
| |
<?php
// именем $_POST['name']
$query = "SELECT password FROM users WHERE name='".$_POST['name']."'";
$nme = mysql_query($query);
if(!$nme)
{
echo mysql_error();
echo "Ошибка выполнения запроса";
exit();
}
// Если запрос вернул результат - производим дальнейшую обработку
if(mysql_num_rows($nme) > 0)
{
| - ошибка!
если сработает условие
if(!$nme)
{
echo mysql_error();
echo "Ошибка выполнения запроса";
exit();
}
то следующий
if(mysql_num_rows($nme) > 0)
выдаст сообщени об ошибке.
нужно так:
<?php
if(!$nme)
{
echo mysql_error();
echo "Ошибка выполнения запроса";
exit();
}
else
{
// Если запрос вернул результат - производим дальнейшую обработку
if(mysql_num_rows($nme) > 0)
{}
}
|
тогда проверка количества строк в результатах выборки осуществится в случае успешно выполненного запроса, а не в любом случае. | |
|
|
|
|
|
|
|
для: natsuho
(26.03.2010 в 15:17)
| | вынисите код отвечающий за подключение к баз данных в отдельный файл, обзовите этот файл connect.php, например и подключайте в файлах, в которых надо соедениться с базой данных через require_once();
в запросе, там где подставляется имя пользователя из формы, данные надо обрабатывать фаункцией mysql_real_escape_string();
<?php
$query = "SELECT password FROM users WHERE name='".mysql_real_escape_string($_POST['name'])."'";
?>
|
в каком виде у Вас храниться пароль в базе данных?
хранить в открытом виде не рекомендуется, перед занесением в базу пароль обрабатывается функцией md5();
тогда при авторизации сверять хеш пароля с паролем из формы надо так
<?php
if($password == md5($_POST['password'])){
..................
}
?>
|
в массиве $_SESSION не рекомендуют хранить пароль пользователя
обо всём этом можно найти через поиск на этом форуме. | |
|
|
|
|
|
|
|
для: Slo_Nik
(26.03.2010 в 16:26)
| | Рома
Я все исправила как Вы написали!
Slo_Nik
В БД пароль обрабатывается с md5, поэтому строчку с md5 добавила!
mysql_real_escape_string тоже лописала)
А как выполнить авторизацию, чтоб пользователь видел свою страничку со своими данными, которые он бы мог в последствии изменять!
Подскажите, пожалуйста!) | |
|
|
|
|
|
|
|
для: natsuho
(27.03.2010 в 12:45)
| | ознакомтесь со статьями
http://www.softtime.ru/info/articlephp.php?id_article=34
http://phpfaq.ru/sessions
http://irbis-team.com/15/7 | |
|
|
|