|
|
|
| Форма:
<form action='../admin.php' method='post'>
<input type=hidden name='session_id' value=<?php echo session_id(); ?>>
<table width=220 border=0 align='center' cellpadding=0 cellspacing=0>
<tr>
<td>
<div align='center'>
<input name='name' type='text' id='nick' onFocus="if(this.value=='Логин')
{this.value='';}this.className='loginsover'" onBlur="if(this.value=='')
{this.value='Логин';}this.className='logins'" value='<?php if($_POST['name']) echo htmlspecialchars($_POST['name']);?>' class='logins'>
</div></td>
</tr>
<tr>
<td><div align='center'>
<input name='pass' type='password' id='pass' onFocus="if(this.value=='Пароль')
{this.value='';}this.className='loginsover'" onBlur="if(this.value=='')
{this.value='Пароль';}this.className='logins'" value='<?php if($_POST['pass']) echo
md5($_POST['pass']);?>' class='logins'>
</div></td>
</tr>
<tr>
<td><div align='center'><br>
<input name='Enter' type='submit' class='but' onClick="this.value='Входим...';"
onMouseOver="this.style.color='#72acdd';" onMouseOut="this.style.color='#6497c2';" value='Войти'>
</div></td>
</tr>
</table>
</form>
|
Обработчик:
<?php
include("configs/dbopen.php");
session_start();
//ошибки
$error = array();
if(isset($_POST['Enter'])){
//Сравниваем переданный идентификатор из формы с текущим идентификатором сессии
if($_POST['session_id'] != session_id()){
echo session_id();
exit("Попытка передачи данных с другого хоста. Скрипт остановлен.");
}
// Защита от SQL-инъекции
if (!get_magic_quotes_gpc()){
$_POST['name'] = mysql_escape_string($_POST['name']);
$_POST['pass'] = mysql_escape_string($_POST['pass']);
}
//если есть ошибки, выводим предупреждение
if(!$_POST['name']) $error['name'] = "Введите свой логин!";
if(!$POST['pass']) $error['pass'] = "Введите пароль";
//если ошибок нет...
if(!$error){
//Формируем и выполняем SQL-запрос имеется ли пользователь
//с именем $_POST['name']
$sql = "SELECT pass = MD5('$_POST[pass]'), id_group FROM users WHERE login = '$_POST[name]'";
$res = mysql_query($sql);
if(!$res) exit("Error in $sql: ". mysql_error());
//Если запрос вернул результат - производим дальнейшую обработку
if(mysql_num_rows($res) > 0){
//Идентификация прошла успешно - осуществляем
//вход посетителя
if(session_start()){
$_SESSION['name'] = $_POST['name'];
$_SESSION['pass'] = $_POST['pass'];
//статус пользователя
$_SESSION['status'] = mysql_result($res,0,"id_group");
if(!empty($_SESSION['name']))
echo "Добро пожаловать, " . $_SESSION['name'];
if(isset($_SESSION['status'])){
$sql = "SELECT type_group FROM groups WHERE id_group = '$_SESSION[status]'";
//print $sql;
$res = mysql_query($sql);
if(!$res) exit("Error in $sql: ". mysql_error());
$group = mysql_result($res,0,"type_group");
if($group == 'admin'){
echo "<br />Привет, админ ".$_SESSION['name'] . ". Заждались тебя...";
include("cms.php");
}else
echo "Извините, уважаемый, но вы не админ! Уходите по-хорошему.";
}
}else exit("Ошибка идентификации: неправильный пароль");
}else exit("Ошибка индентификации: пользователь не зарегистрирован");
}
}
if(!isset($_POST['Enter'])){
//ошибки
if($error)
print "<p style='color: #ff0000;'>" . $error . "</p>";
//вывод формы
include("admin/admin_form.php");
}
?>
|
Обработчик выдает пустую страницу, без ошибок | |
|
|
|
|
|
|
|
для: Лена
(23.12.2008 в 23:38)
| | прпробуйте для начала поменять местами.. вот так:
session_start();
include("configs/dbopen.php");
|
| |
|
|
|
|
|
|
|
для: Лена
(23.12.2008 в 23:38)
| | факт равенства хешей паролей Вы не проверяете.
В качестве пароля можно набирать что угодно. | |
|
|
|
|
|
|
|
для: Trianon
(24.12.2008 в 00:00)
| | Вот так поменяла:
<?php
if(!$error){
//Формируем и выполняем SQL-запрос имеется ли пользователь
//с именем $_POST['name']
$pass = md5($_POST['pass']);
$sql = "SELECT * FROM users WHERE login = '$_POST[name]'";
$res = mysql_query($sql);
if(!$res) exit("Error in $sql: ". mysql_error());
//Если запрос вернул результат - производим дальнейшую обработку
if(mysql_num_rows($res) > 0){
$log_pass = mysql_fetch_assoc($res);
if ($pass == $log_pass['pass']) {
//вход посетителя
if(session_start()){
?>
|
Без изменений. Пустая страница | |
|
|
|
|
|
|
|
для: Лена
(24.12.2008 в 21:31)
| | Ну вот, стоп. На самом интересном месте... ))) А почему Вы сразу не хотите запрос по условию сформировать? Вроде так проще обработать потом:
<?
$sql = "SELECT * FROM users WHERE login = '$_POST[name]' AND pass='".md5($_POST['pass'])."'";
|
| |
|
|
|
|
|
|
|
для: Николай2357
(25.12.2008 в 00:27)
| | человек хочет подумать сам. А Вы ему в этом нехитром желании отказали. Довольно редком, среди обитателей этого портала, между прочим... Фу. | |
|
|
|
|
|
|
|
для: Trianon
(25.12.2008 в 01:03)
| | Можно не смотреть, если не хочет. А может потом поможет... А мне спать пора. Ни чё не Фу. | |
|
|
|
|
|
|
|
для: Trianon
(25.12.2008 в 01:03)
| | Получилось вот что:
<?php
session_start();
include("configs/dbopen.php");
//ошибки
$error = array();
if(isset($_POST['Enter'])){
print_r($_POST);
// Защита от SQL-инъекции
if (!get_magic_quotes_gpc()){
$_POST['name'] = mysql_escape_string($_POST['name']);
$_POST['pass'] = mysql_escape_string($_POST['pass']);
}
//если есть ошибки, формируем массив ошибок
if(empty($_POST['name'])) $error['name'] = "Введите свой логин!";
if(empty($POST['pass'])) $error['pass'] = "Введите пароль!";
//Формируем и выполняем SQL-запрос имеется ли пользователь
//с именем $_POST['name']
$sql = "SELECT * FROM users WHERE login = '$_POST[name]' AND pass = '" . md5($_POST['pass']) ."'";
$res = mysql_query($sql);
if(!$res) exit("Error in $sql: ". mysql_error());
//Если запрос вернул результат - производим дальнейшую обработку
if(mysql_num_rows($res) > 0){
//вход посетителя
if(session_start()){
$_SESSION['name'] = $_POST['name'];
$_SESSION['pass'] = $_POST['pass'];
//статус пользователя
$_SESSION['status'] = mysql_result($res,0,"id_group");
if(!empty($_SESSION['name']))
echo "Добро пожаловать, " . $_SESSION['name'];
if(isset($_SESSION['status'])){
$sql = "SELECT type_group FROM groups WHERE id_group = '$_SESSION[status]'";
//print $sql;
$res = mysql_query($sql);
if(!$res) exit("Error in $sql: ". mysql_error());
$group = mysql_result($res,0,"type_group");
if($group == 'admin'){
echo "<br />Привет, админ ".$_SESSION['name'] . ". Заждались тебя...";
include("admin/cms.php");
}else
echo "Извините, уважаемый, но вы не админ! Уходите по-хорошему.";
}
}
}
}
if(!isset($_POST['Enter']) || $error){
//ошибки
foreach ($error as $e)
print "<center><strong><p style='color: #ff0000;'>" . $e . "</p></strong></center>";
//вывод формы
include("admin/admin_form.php");
}
?>
|
Когда не заполняю поля - появляются сообщения об ошибках, как и надо. А когда заполняю все поля, пост массив, допустим, такой Array ( [name] => admin [pass] => admin [Enter] => Войти ), то вместе с надписью "Добро пожаловать, admin" появляется сообщение "Введите пароль!" и сама форма, хотя пароль уже введен и передан. В чем причина - не пойму. | |
|
|
|
|
|
|
|
для: Лена
(25.12.2008 в 20:23)
| | Вот эта строчка:
<?
$_POST['pass'] = mysql_escape_string($_POST['pass']);
| у Вас явно лишняя, и может испортить всё дело.Инъекция и так не пролезет, Вы же подставляете в запрос хэш, а не значение переменной.
А вот тут Вы пропустили чёрточку ))):
<?
if(empty($POST['pass'])) $error['pass'] = "Введите пароль!";
|
| |
|
|
|
|
|
|
|
для: Николай2357
(25.12.2008 в 20:46)
| | Представляете, вот из-за этой черточки и не работало! Спасибо.
Просто вбиваю все сама и как-то пропустила. Буду внимательней. | |
|
|
|
|
|
|
|
для: Trianon
(24.12.2008 в 00:00)
| | - | |
|
|
|
|
|
|
|
для: Лена
(23.12.2008 в 23:38)
| | <input name='pass' type='password' id='pass' onFocus="if(this.value=='Пароль')
{this.value='';}this.className='loginsover'" onBlur="if(this.value=='')
{this.value='Пароль';}this.className='logins'" value='<?php if($_POST['pass']) echo
md5($_POST['pass']);?>' class='logins'>
SELECT pass = MD5('$_POST[pass]'),
Здесь уже будет хеш, далее получается вы хотите вывести из базы то, что вы захешировали в форме и повторным MD5 в запросе, пытаетесь вывести хеш хеша(пароля) при выводе, соответственно равенства не будет. | |
|
|
|
|
|
|
|
для: AcidTrash
(24.12.2008 в 22:19)
| | Это уже исправила.
Данные формы вообще не передаются в обработчик. Все из-за <input type= 'hidden' name='session_id' value='<?php echo session_id(); ?>'>
Если его нет - все нормально. | |
|
|
|
|
|
|
|
для: Лена
(24.12.2008 в 23:00)
| | | |
|
|
|
|
|
|
|
для: Valick
(24.12.2008 в 23:26)
| | print_r($_POST) выводит переданный массив. А страница пустая.
Дайте сама подумаю. Всем стоп! | |
|
|
|
|
|
|
|
для: Лена
(24.12.2008 в 23:00)
| | а зачем сессию передавать в форме ?? она и так доступна всегда | |
|
|
|
|
|
|
|
для: Лена
(24.12.2008 в 23:00)
| | session_id();
А зачем вам оная нужна? | |
|
|
|