|
|
|
| Подскажите, пожалуйста.
Я сделал авторизацию, но есть одно неудобство. Дело в том, что очень часто на всех авторизациях обычно, как только заносят логин и пароль, внизу, под полями выводится сообщение, к примеру, "Приветствуем вас". Если же не верные данные, другое сообщение и перевести на главную форму(так я, например, хотел сделать). Не могли бы вы рассказать об этой теме и, если не трудно, привести листинг с примером.
И еще вопрос: как узнать IP-адрес с URL-строки?
Заранее благодарен. | |
|
|
|
|
|
|
|
для: Денис
(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
?>
|
| |
|
|
|
|
|
|
|
для: 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. Извините, что, возможно, на ваш взгляд я задаю много вопросов и довольно простых... | |
|
|
|
|
|
|
|
для: Денис
(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 Это хорошо, что вы задаёте много простых вопросов, а не один сложный :))) - мы так с вами быстрее разберёмся в проблеме :))) Если серьёзно, то вы не должны извиняться за то, что задаёте вопросы в форуме который для этого и предназначен, это всё равно, что я или другие посетители, котрые отвечают на вопросы буду предварять каждый свой ответ "Извините, что отвечаю вам, если вам кажется, что я даю слишком много ответов, то скажите я больше никогда этого делать не буду" :))) Спрашивайте до тех пор, пока вам всё не будет ясно до конца. | |
|
|
|
|
|
|
|
для: 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?
В общем, запутался... Но ваш вариант отпадает точно... | |
|
|
|
|
|
|
|
для: Денис
(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-ились.
Желаю удачи.
П.С. Я предпочитаю конструкцию:
| |
|
|
|
|
|
|
|
для: Денис
(28.03.2005 в 22:35)
| | сделал (наконец-то :) ), все работает. Но появилась еще одна маленькая проблема (когда же они закончатся :) ): когда авторизирую пользователя, логин ввожу с большой буквы, в базе данных прописывается также. Когда же делаю вход и выполняю обыный запрос, при этом ввожу как с маленького так и с большого регистра логин - все равно считает правильным. Как мне учесть ригистр букв при проверке логина? | |
|
|
|
|
|
|
|
для: Денис
(01.04.2005 в 14:12)
| | Поля типа TEXT в базе данных MySQL являются регистер-незавимыми, здесь придётся наверное использовать производное от BLOB - так как для этого типа проводится бинарное сравнение. | |
|
|
|
|
|
|
|
для: cheops
(01.04.2005 в 22:13)
| | все оказалось гораздо проще: с помощью менеджера EMS MySQL в необходимых полях в секции "бинарное" нужно было поставить галочку и все заработало :). Спасибо за ответ. | |
|
|
|
|
|
|
|
для: Денис
(02.04.2005 в 13:49)
| | А да, можно и бинарные строки использовать, для этого перед столбцом в SQL-запросе необходимо использовать ключевое слово BINARY. | |
|
|
|