Изучаю php недавно. Необходимо сделать авторизацию пользователя на страницу администратора. Чудным образом все работало, и чудным образом перестало работать. В чем беда - не понимаю. Помогите, пожалуйста.
Фаил lock.php - страница, на которой происходит авторизация пользователя.
<html>
<title> Страница администратора </title>
<link href="css/style.css" rel="stylesheet" type="text/css">
</head>
<body>
<!-- Подключение шапки сайта-->
<? include ("blocs/header.php"); ?>
<tr>
<td height="100%" valign="top"><table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="1" height="100%" valign="top" background="images/sub_bot.gif" bgcolor="#c2ddfe" class="sub">
<!--Подключение меню сайта-->
<? include ("blocs/lefttd1.php"); ?>
<tr>
<td> </td>
</tr>
<tr>
<td><img src="images/spacer.gif" width="186" height="1"></td>
</tr>
</table></td>
<td valign="top" bgcolor="#e1e6f8"><table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td class="welcome"> <center>
<form action="login.php" method="post">
<table>
<tr>
<td>Логин:</td>
<td><input type="text" name="login" /></td>
</tr>
<tr>
<td>Пароль:</td>
<td><input type="password" name="password" /></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Войти" /></td>
</tr>
</table>
</form>
</td>
</tr>
<tr>
<td height="100%" class="base_txt">
<p>
</p>
</td>
</tr>
</table></td>
</tr>
</table></td>
</tr>
<tr>
<td height="1" valign="top"><table width="100%" border="0" cellspacing="0" cellpadding="0">
<!--Подключение нижней строки сайта-->
<? include ("blocs/futer.php"); ?>
</table></td>
</tr>
</table>
</body>
</html>
Фаил login.php - обработчик
<?
if (isset($_POST['login'])) {
$passwordHash = md5($_POST['password']);
$login = $_POST['login'];
// Проверка логина на плохие смиволы
if(!preg_match("/^\w{3,}$/", $login))
die('Неверный пароль');
$link = mysql_connect('localhost',$dbuser,$dbpass);
if (!$link) {
die('Не удалось соединиться с БД');
}else{
mysql_select_db('users', $link);
$res = mysql_query("SELECT id FROM users WHERE login='$login' and password='$password'", $link);
// Стартуем сессию и записываем логин в суперглобальный массив $_SESSION
session_start();
$_SESSION['user'] = $login;
mysql_close($link);
header ("location: index.php");
}
}
?>
Сейчас, если ввести любые данные (верные или неверные), то браузер переходит на страницу администратора. Как же сделать так, чтобы обработчик фильтровал своих и чужих?
Помогите, пожалуйста, исправить ошибку.
Styling by linker.
Спустя 28 минут, 9 секунд (29.04.2011 - 17:34) DedMorozzz написал(а):
Не хватает только ещё всё большими буквами наисать. А то читабельность слишком низная
Оформите код в соответствующие теги. Для подсветки
Оформите код в соответствующие теги. Для подсветки
Спустя 32 минуты, 8 секунд (29.04.2011 - 18:06) Игорь_Vasinsky написал(а):
ВОт этот вот кусок оссобенно интересный (в конце файла):
// Стартуем сессию и записываем логин в суперглобальный массив $_SESSION
session_start();
$_SESSION['user'] = $login;
mysql_close($link);
header ("location: index.php");
Спустя 1 день, 16 часов, 36 минут, 39 секунд (1.05.2011 - 10:43) Guest написал(а):
и что с этим куском делать то?
Спустя 4 минуты, 26 секунд (1.05.2011 - 10:47) quickxyan написал(а):
то что session_start(); надо писать перед выводом чего либо в браузер. лучше всего одной из первых строчек
Спустя 5 часов, 48 минут, 37 секунд (1.05.2011 - 16:36) walerus написал(а):
<?php
if (isset($_POST['login']))
{
$passwordHash = md5($_POST['password']);
$login = $_POST['login'];
// Проверка логина на плохие смиволы
if(!preg_match("/^\w{3,}$/", $login))
die('Неверный Логин'); // Проверяем вроде логин, а у Вас написано - неверный Пароль
$link = mysql_connect('localhost',$dbuser,$dbpass);
// Мне одному интересно от куда возьмутся данные ( $dbuser, $dbpass ) для подключения к базе ??
if (!$link)
{
die('Не удалось соединиться с БД');
}
else
{
mysql_select_db('users', $link);
$res = mysql_query("SELECT id FROM users WHERE login='$login' and password='$password'", $link);
// Стартуем сессию и записываем логин в суперглобальный массив $_SESSION
session_start();
$_SESSION['user'] = $login;
mysql_close($link);
header ("location: index.php");
}
}
?>
Интересно от куда берутся данные для переменных:
$login - логин понятно, ВОЗМОЖНО из _POST переменной
$password - а вот с паролем проблема, он нигде не обозначен никак
Еще непонятно, для чего шифровать пароль, если он никуда не передается?
[php]$passwordHash = md5($_POST['password']);[php]
$passwordHash - где оно используется то?
и Да !, в итоге, если Вы подключились каким то тайным образом к базе, то перейдете на index.php.
И как выглядит,называется - страница администратора?
Спустя 22 минуты, 33 секунды (1.05.2011 - 16:58) Basili4 написал(а):
может просто шорт теги отключили ?
Спустя 9 дней, 21 час, 46 минут, 34 секунды (11.05.2011 - 14:45) Ольга Секретно написал(а):
а что это? помогите мне, пожалуйста, не работает авторизация(((((((((
Спустя 4 минуты, 35 секунд (11.05.2011 - 14:49) T1grOK написал(а):
По логике вещей $passwordHash и надо подставлять в запрос. И еще неважно какой логин и пароль введешь, все равно авторизируешься.)
Спустя 3 дня, 21 час, 10 минут, 18 секунд (15.05.2011 - 12:00) Guest написал(а):
авторизация заработала, но, если я помещаю php-скрипт в html-файл, то получается ошибка:
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at z:\home\localhost\www\kafedra\admin\login.php:8) in z:\home\localhost\www\kafedra\admin\login.php on line 44
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at z:\home\localhost\www\kafedra\admin\login.php:8) in z:\home\localhost\www\kafedra\admin\login.php on line 44
Warning: Cannot modify header information - headers already sent by (output started at z:\home\localhost\www\kafedra\admin\login.php:8) in z:\home\localhost\www\kafedra\admin\login.php on line 50
что это такое? Помогите исправить.
Вот код файла login.php
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at z:\home\localhost\www\kafedra\admin\login.php:8) in z:\home\localhost\www\kafedra\admin\login.php on line 44
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at z:\home\localhost\www\kafedra\admin\login.php:8) in z:\home\localhost\www\kafedra\admin\login.php on line 44
Warning: Cannot modify header information - headers already sent by (output started at z:\home\localhost\www\kafedra\admin\login.php:8) in z:\home\localhost\www\kafedra\admin\login.php on line 50
что это такое? Помогите исправить.
Вот код файла login.php
<html>
<title> Страница администратора </title>
<link href="css/style.css" rel="stylesheet" type="text/css">
</head>
<body>
<!-- Подключение шапки сайта-->
<? include ("blocs/header.php"); ?>
<tr>
<td height="100%" valign="top"><table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="1" height="100%" valign="top" background="images/sub_bot.gif" bgcolor="#c2ddfe" class="sub">
<!--Подключение меню сайта-->
<? include ("blocs/lefttd1.php"); ?>
<tr>
<td> </td>
</tr>
<tr>
<td><img src="images/spacer.gif" width="186" height="1"></td>
</tr>
</table></td>
<td valign="top" bgcolor="#e1e6f8"><table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td class="welcome">
<?
Error_Reporting(E_ALL & ~E_NOTICE);
if (isset($_POST['login'])) {
$passwordHash = md5($_POST['password']);
$login = $_POST['login'];
// Проверка логина на плохие смиволы
if(!eregi("^([A-Za-z0-9А])", $login)) { die('Неверный пароль');}
$link = mysql_connect('localhost', 'php', '12345');
if (!$link) {
die('Не удалось соединиться с БД');
}else{
mysql_select_db('users', $link);
$res = mysql_query("SELECT id FROM users WHERE login='$login' and password='$password'", $link);
// Стартуем сессию и записываем логин в суперглобальный массив $_SESSION
session_start();
$_SESSION['user'] = $login;
mysql_close($link);
// Если определена страница с которой мы пришли,
// на нее и переадресуем, либо на главную
if (isset($_SERVER['HTTP_REFERER']))
header ("location: index.php");
}
}
?>
</td>
</tr>
<tr>
<td height="100%" class="base_txt">
<p>
</p>
</td>
</tr>
</table></td>
</tr>
</table></td>
</tr>
<tr>
<td height="1" valign="top"><table width="100%" border="0" cellspacing="0" cellpadding="0">
<!--Подключение нижней строки сайта-->
<? include ("blocs/futer.php"); ?>
</table></td>
</tr>
</table>
</body>
</html>
Спустя 11 минут, 3 секунды (15.05.2011 - 12:11) XCross написал(а):
Ну дак....
В самом начале(до HTML-тегов) session_start();
header ("location: index.php");
Должен быть до любого вывода в браузер.
В самом начале(до HTML-тегов) session_start();
header ("location: index.php");
Должен быть до любого вывода в браузер.
Спустя 13 секунд (15.05.2011 - 12:11) quickxyan написал(а):
Guest
ну что ж ты будешь делать.
ну что ж ты будешь делать.
Цитата (Guest @ 15.05.2011 - 09:00) |
// Стартуем сессию и записываем логин в суперглобальный массив $_SESSION session_start(); |
эта строчка должна быть в самом верху!
header ("location: index.php");
а эта команда должна быть использована до любого вывода инфы в браузер.
Спустя 10 минут, 54 секунды (15.05.2011 - 12:22) Guest написал(а):
Всем спасибо, авторизация заработала как надо)))
Спустя 22 часа, 44 минуты, 28 секунд (16.05.2011 - 11:06) Админ написал(а):
Цитата |
if(!eregi("^([A-Za-z0-9А])", $login)){die('Неверный пароль');} |
Так между делом - eregi стоило бы на preg_match заменить