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

Форум PHP

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

 

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

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

тема: И снова об авторизации
 
 автор: Денис   (28.03.2005 в 22:35)   письмо автору
 
 

Подскажите, пожалуйста.
Я сделал авторизацию, но есть одно неудобство. Дело в том, что очень часто на всех авторизациях обычно, как только заносят логин и пароль, внизу, под полями выводится сообщение, к примеру, "Приветствуем вас". Если же не верные данные, другое сообщение и перевести на главную форму(так я, например, хотел сделать). Не могли бы вы рассказать об этой теме и, если не трудно, привести листинг с примером.
И еще вопрос: как узнать IP-адрес с URL-строки?
Заранее благодарен.

   
 
 автор: cheops   (28.03.2005 в 23:21)   письмо автору
 
   для: Денис   (28.03.2005 в 22:35)
 

Данная тема много раз обсуждалась в форуме - вы можете набрать в поиске ключевое слово "авторизац" и выбрать в выпадающем списке форум "PHP", искать в "названиях тем" - будет выведено около 26 тем по данному вопросу. Поэтому, Artem S. написал специальную статью, посвящённую этому вопросу, которую можно почитать по ссылке http://www.softtime.ru/info/articlephp.php?id_article=34. Если у вас всё-таки останутся вопросы - давайте продолжим.

IP-адрес можно узнать при помощи функции gethostbyname
<?php
  
echo gethostbyname("mail.ru"); // 194.67.57.26
?>

   
 
 автор: Денис   (30.03.2005 в 21:28)   письмо автору
 
   для: cheops   (28.03.2005 в 23:21)
 

Извините, что еще раз обращаюсь по этому поводу, но это не совсем то, что я искал.
Имеется файл input.php

<?php
    session_name
("viewpoint");
    
session_start(); 
    
$value "";
    if(isset(
$_SESSION['username']))
    {    
        
$value $_SESSION['username'];
    }
        
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
</head>
<body>
<TABLE class=toplineaction height=120 cellSpacing=0 cellPadding=0 width="100%" border=3>
<TBODY>
      <TR vAlign=top>
        <TD height=35>
            <H1 align="center">Видеоточка</H1></TD>
      </TR>
      <TR>
          <TD height=25>
            <P><A href="main.html">Вернуться на главную страницу</A></P></TD>
    </TR>
</TBODY>
<TABLE cellSpacing=0 cellPadding=0 width="25%" align=center border=5>
  <TBODY>
      <TR>
        <TD height=25>
              <P align="center"><b>Вход на сайт</b></P></TD>
    </TR>
      <TR vAlign=top>
        <TD>
              <FORM action="db_input.php" method="post" encType=multipart/form-data>
              <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
            <TBODY>
                <TR vAlign=top>
                      <TD>
                           <TABLE>
                          <TBODY>
                              <TR>
                                <TD><P>Имя:</P></TD>
                                <TD><INPUT TYPE="text" NAME="name" SIZE="35" MAXLENGTH=100></TD>
                            </TR>
                              <TR>
                                <TD><P>Пароль:</P></TD>
                                <TD><INPUT TYPE="password" NAME="passw" SIZE="35" MAXLENGTH=100></TD>
                            </TR>
                              <TR>
                                <TD colspan="2" align="center">
                                <input type="hidden" name="mode" value="<?=$mode?>">
                                <INPUT type="submit" name="ctrl_Login:btn_Submit" value="Войти" id="ctrl_Login_btn_Submit" />
                                </TD>
                              </TR>

<?php  
  
// Приветствие посетителя, если он "вошел" 
  
if(isset($_SESSION['username'])) echo "Здравствуйте, ".$_SESSION['username']."!"
?> 
              </TBODY>
             </TABLE>
          </TD>
        </TR>
        </TBODY>
      </TABLE>
</body>
</html>


и файл обработки: db_input.php

<?php
    
require ("db_login.php");    
    
session_name("viewpoint");
    
session_start();
    if(isset(
$_SESSION['username']))
    {
        
$user $_SESSION["username"];    
        if (
$user != null
        {
            
header("Location: main.php");
        }
    }
    
$error null;
        
db_connect();
        
$name $_POST["name"];
        
$passw $_POST["passw"];
        
        if (
$name != null && $passw != null
        {
            
$login trim($name);
            
$password trim($passw);
            if (
$name != "" && $passw != ""
            {
                if (
get_login($name)) 
                {
                    if(
get_passw($passw))
                    {
                        
$_SESSION["username"] = $name;
                        
header("Location: main.php");        
                    }
                    else 
                    {
                        
header("Location:index.php");                    
                    }
                }
                else 
                {
                    
$error "Ошибка: неправильный логин или пароль";
                }
            }
            else 
            {
                
$error "Ошибка: не все обязательные поля были созданы";
            }
        }
        else 
        {
            
$error "Ошибка: не все данные были переданы";
        }
    
    if (
$error != null
    {
        
$_SESSION["error"] = $error;
        
header("Location: register.php");
    }
?>


Идея error в том, чтобы передать это сообщение на форму входа (или другую форму) при случае ошибки неправильного ввода. Как это сделать - не знаю.
Если сможете, обьясните мою неточность в действиях и расскажите, каким образом мне выдать ошибку пользователю на той же форме входа или регистрации и как, при переадресации на друю форму, учесть либо это была ошибка, либо это был просто вход и тогда вывести обычное приветствие.

P.S. Извините, что, возможно, на ваш взгляд я задаю много вопросов и довольно простых...

   
 
 автор: cheops   (30.03.2005 в 23:07)   письмо автору
 
   для: Денис   (30.03.2005 в 21:28)
 

Хм... а такой вывод срабатывает?
<?php 
    session_name
("viewpoint"); 
    
session_start(); 
    
$value ""
    if(isset(
$_SESSION['username'])) 
    {     
        
$value $_SESSION['username']; 
    } 
?> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
<title></title> 
</head> 
<body> 
<TABLE class=toplineaction height=120 cellSpacing=0 cellPadding=0 width="100%" border=3> 
<TBODY> 
      <TR vAlign=top> 
        <TD height=35> 
            <H1 align="center">Видеоточка</H1></TD> 
      </TR> 
      <TR> 
          <TD height=25> 
            <P><A href="main.html">Вернуться на главную страницу</A></P></TD> 
    </TR> 
</TBODY> 
<TABLE cellSpacing=0 cellPadding=0 width="25%" align=center border=5> 
  <TBODY> 
      <TR> 
        <TD height=25> 
              <P align="center"><b>Вход на сайт</b></P></TD> 
    </TR> 
      <TR vAlign=top> 
        <TD> 
              <FORM action="db_input.php" method="post" encType=multipart/form-data> 
              <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0> 
            <TBODY> 
                <TR vAlign=top> 
                      <TD> 
                           <TABLE> 
                          <TBODY> 
                              <TR> 
                                <TD><P>Имя:</P></TD> 
                                <TD><INPUT TYPE="text" NAME="name" SIZE="35" MAXLENGTH=100></TD> 
                            </TR> 
                              <TR> 
                                <TD><P>Пароль:</P></TD> 
                                <TD><INPUT TYPE="password" NAME="passw" SIZE="35" MAXLENGTH=100></TD> 
                            </TR> 
                              <TR> 
                                <TD colspan="2" align="center"> 
                                <input type="hidden" name="mode" value="<?=$mode?>"> 
                                <INPUT type="submit" name="ctrl_Login:btn_Submit" value="Войти" id="ctrl_Login_btn_Submit" /> 
                                </TD> 
                              </TR> 

<?php 
  
// Приветствие посетителя, если он "вошел" 
  
if(isset($_SESSION['username'])) echo "Здравствуйте, ".$_SESSION['username']."!"
  if(isset(
$_SESSION['error'])) echo $_SESSION['error'];
?> 
              </TBODY> 
             </TABLE> 
          </TD> 
        </TR> 
        </TBODY> 
      </TABLE> 
</body> 
</html>

т.е. если просто добавить строку if(isset($_SESSION['error'])) echo $_SESSION['error']; ? Или этого недостаточно?

PS Это хорошо, что вы задаёте много простых вопросов, а не один сложный :))) - мы так с вами быстрее разберёмся в проблеме :))) Если серьёзно, то вы не должны извиняться за то, что задаёте вопросы в форуме который для этого и предназначен, это всё равно, что я или другие посетители, котрые отвечают на вопросы буду предварять каждый свой ответ "Извините, что отвечаю вам, если вам кажется, что я даю слишком много ответов, то скажите я больше никогда этого делать не буду" :))) Спрашивайте до тех пор, пока вам всё не будет ясно до конца.

   
 
 автор: Денис   (30.03.2005 в 23:40)   письмо автору
 
   для: cheops   (30.03.2005 в 23:07)
 

Нет, не то. На форме вместе с приветствием выдает сообщение "Ошибка, не все данные были переданы", ну т.е. то сообщение, которое сохраняется в массив error.
Идея следующая: после ввода данные отправляются в файл обработки, там обрабатываются, срабатывает error и возвращаемся на ту же форму ввода. Я подумал, может сделать следующее:

<?php 
    session_name
("viewpoint"); 
    
session_start(); 
    
$value ""
    if(isset(
$_SESSION['username'])) 
    {      
        
$value $_SESSION['username']; 
    } 

    
$error $_SESSION["error"];

?> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
<title></title> 
</head> 
<body> 
<TABLE class=toplineaction height=120 cellSpacing=0 cellPadding=0 width="100%" border=3> 
<TBODY> 
      <TR vAlign=top> 
        <TD height=35> 
            <H1 align="center">Видеоточка</H1></TD> 
      </TR> 
      <TR> 
          <TD height=25> 
            <P><A href="main.html">Вернуться на главную страницу</A></P></TD> 
    </TR> 
</TBODY> 
<TABLE cellSpacing=0 cellPadding=0 width="25%" align=center border=5> 
  <TBODY> 
      <TR> 
        <TD height=25> 
              <P align="center"><b>Вход на сайт</b></P></TD> 
    </TR> 
      <TR vAlign=top> 
        <TD> 
              <FORM action="db_input.php" method="post" encType=multipart/form-data> 
              <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0> 
            <TBODY> 
                <TR vAlign=top> 
                      <TD> 
                           <TABLE> 
                          <TBODY> 
                              <TR> 
                                <TD><P>Имя:</P></TD> 
                                <TD><INPUT TYPE="text" NAME="name" SIZE="35" MAXLENGTH=100></TD> 
                            </TR> 
                              <TR> 
                                <TD><P>Пароль:</P></TD> 
                                <TD><INPUT TYPE="password" NAME="passw" SIZE="35" MAXLENGTH=100></TD> 
                            </TR> 
                              <TR> 
                                <TD colspan="2" align="center"> 
                                <input type="hidden" name="mode" value="<?=$mode?>"> 
                                <INPUT type="submit" name="ctrl_Login:btn_Submit" value="Войти" id="ctrl_Login_btn_Submit" /> 
                                </TD> 
                              </TR> 

<?php
if ($error != null
{
?>
            <tr>
                <td></td>
                <td colspan="5" height="1" bgcolor="#99CCCC"></td>
                <td></td>
            </tr>
            <tr>
                <td></td>
                <td bgcolor="#99CCCC"></td>
                <td width="282" height="20" colspan="3" align="center"><div class="errortext"><?=$error?></div></td>
                <td bgcolor="#99CCCC"></td>
                <td></td>
            </tr>
<?php
              
</TBODY
             </
TABLE
          </
TD
        </
TR
        </
TBODY
      </
TABLE
</
body
</
html


только вот проблема. Как передать форме эту ошибку? я в коде видел вот такую строку:

header("Location: index.php?mode=$mode");

если я не ошибся, то обычным GET - запросом в строке

<input type="hidden" name="mode" value="<?=$mode?>">

value присваиваем то, что в переменной $mode?

В общем, запутался... Но ваш вариант отпадает точно...

   
 
 автор: Flash5   (31.03.2005 в 16:51)   письмо автору
 
   для: Денис   (30.03.2005 в 23:40)
 

Как я понял вы уже решили проблему, если вы будете использовать:
header("Location: index.php?mode=$mode");

то в этом случае надо искать переменную в массиве $_GET, а если будете использовать метод:
<input type="hidden" name="mode" value="<?=$mode?>">

то искать переменную нужно будет уже в $_POST массиве. Но в тоже время если рассуждать логически то при вызове
header("Location: index.php")
переменная mode не будет иметь значения так как не была нажата кнопка и данные не POST0-ились.
Желаю удачи.
П.С. Я предпочитаю конструкцию:
index.php?mode=$mode

   
 
 автор: Денис   (01.04.2005 в 14:12)   письмо автору
 
   для: Денис   (28.03.2005 в 22:35)
 

сделал (наконец-то :) ), все работает. Но появилась еще одна маленькая проблема (когда же они закончатся :) ): когда авторизирую пользователя, логин ввожу с большой буквы, в базе данных прописывается также. Когда же делаю вход и выполняю обыный запрос, при этом ввожу как с маленького так и с большого регистра логин - все равно считает правильным. Как мне учесть ригистр букв при проверке логина?

   
 
 автор: cheops   (01.04.2005 в 22:13)   письмо автору
 
   для: Денис   (01.04.2005 в 14:12)
 

Поля типа TEXT в базе данных MySQL являются регистер-незавимыми, здесь придётся наверное использовать производное от BLOB - так как для этого типа проводится бинарное сравнение.

   
 
 автор: Денис   (02.04.2005 в 13:49)   письмо автору
 
   для: cheops   (01.04.2005 в 22:13)
 

все оказалось гораздо проще: с помощью менеджера EMS MySQL в необходимых полях в секции "бинарное" нужно было поставить галочку и все заработало :). Спасибо за ответ.

   
 
 автор: cheops   (02.04.2005 в 20:07)   письмо автору
 
   для: Денис   (02.04.2005 в 13:49)
 

А да, можно и бинарные строки использовать, для этого перед столбцом в SQL-запросе необходимо использовать ключевое слово BINARY.

   
Rambler's Top100
вверх

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