Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Авторизация
 
 автор: natsuho   (26.03.2010 в 13:37)   письмо автору
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();
}
?>

  Ответить  
 
 автор: Slo_Nik   (26.03.2010 в 14:38)   письмо автору
 
   для: natsuho   (26.03.2010 в 13:37)
 

начнём с самого начала....
при написании сообщения, справа от формы есть теги выделения текста, там есть тег code, используйте его для оформления кода в сообщении
пример.

<?php 
$a 
1;
echo 
$a;
// код выводится с подсветкой, теперь его легче читать и разобраться в нём.
?>

это не прихоть, так действительно удобней смотреть чужой код...

  Ответить  
 
 автор: natsuho   (26.03.2010 в 15:17)   письмо автору
 
   для: 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($nme0);  
       
// Сравниваем пароль из базы данных и введённый посетителем  
       
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(); 
}
?>

  Ответить  
 
 автор: Рома   (26.03.2010 в 15:19)   письмо автору
 
   для: 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)  
    {}  
    }

тогда проверка количества строк в результатах выборки осуществится в случае успешно выполненного запроса, а не в любом случае.

  Ответить  
 
 автор: Slo_Nik   (26.03.2010 в 16:26)   письмо автору
 
   для: 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 не рекомендуют хранить пароль пользователя

обо всём этом можно найти через поиск на этом форуме.

  Ответить  
 
 автор: natsuho   (27.03.2010 в 12:45)   письмо автору
 
   для: Slo_Nik   (26.03.2010 в 16:26)
 

Рома
Я все исправила как Вы написали!

Slo_Nik
В БД пароль обрабатывается с md5, поэтому строчку с md5 добавила!
mysql_real_escape_string тоже лописала)

А как выполнить авторизацию, чтоб пользователь видел свою страничку со своими данными, которые он бы мог в последствии изменять!

Подскажите, пожалуйста!)

  Ответить  
 
 автор: Slo_Nik   (27.03.2010 в 14:01)   письмо автору
 
   для: 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

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования