Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2009, 23:35   #1
SwiP
Форумчанин
 
Регистрация: 18.03.2009
Сообщений: 101
Вопрос Админская страница, проверка ввода данных

Помогите плиз со скриптиком.
Написал небольшую админскую панель, так вот надо сверять имя и пароль с оными в базе данных. Это я сделал, но не знаю, как остановить выполнение дальнейшего скрипта, если пароль или логин неверны. Если введу break; то оно будет работать, но будет и выдавать ошибку в браузере: Fatal error: Cannot break/continue 1 level in
И ещё, если кто-то напрямую залезет в админскую страницу, то эта вся байда не срабатывает

Вот код если чё:

ident.php
Код:
<meta http-equiv="Content-Type" content="no-cache; charset=windows-1251"/>
<title>Вход в админскую панель</title>

<form method=post action=mwork.php>
Введите логин:<BR>
<input type=text name=name><br>
Введите пароль:<BR>
<input type=password name=pass><br>
<input type=submit name=send value=Проверить>
</form>
mwork.php
Код:
***блаблабла соединение с бд и тд итп... ***


$name =  stripslashes(trim($_POST['name']));
$pw =  md5(stripslashes(trim($_POST['pass'])));
$adminlogin=mysql_query ("select name from admmenu;"); // Запрос имени и пароля из БД
$adminpassw=mysql_query ("select passw from admmenu;"); 
$adname=mysql_result($adminlogin,0,'name'); // Их перевод в сам php
$adpass=mysql_result($adminpassw,0,'passw');

if(@$_POST['send'] != '') { //Если нажата кнопка send
	if ($name!==$adname) { echo "Неверное имя!"; } // Если введённое имя и пароль не совпадает с 
//оными из БД, то должно написать эту ошибку и 
//ОСТАНОВИТЬ СКРИПТ (КАК ЭТО СДЕЛАТЬ?)
		if ($pw!==$adpass) { echo "Неверный пароль";  }

						  }

//Ещё нужна защита от того, кто напрямую зайдёт на админскую страницу (КАК ЭТО СДЕЛАТЬ?)
Там где надобно помочь, я пометил "(КАК ЭТО СДЕЛАТЬ?)"
SwiP вне форума Ответить с цитированием
Старый 11.04.2009, 23:44   #2
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

Можно остановить через die("Неверное имя!"); вместо echo, но мне кажется это будет некрасиво, так как скрипт полностью прекратит своё выполнение. Лучше вместо этого вывести красивую табличку, что мол так и так, но ваш логин/пароль неверны. А если логин пароль верны - перекинуть на админскую страницу с уникальным ид, для того чтобы определить пользователя как залогинившегося.

Цитата:
И ещё, если кто-то напрямую залезет в админскую страницу, то эта вся байда не срабатывает
Вообще не понял о чём речь.
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Старый 12.04.2009, 00:01   #3
memka
Пользователь
 
Аватар для memka
 
Регистрация: 31.03.2009
Сообщений: 71
По умолчанию

может поменять местами и немного по другому т.е.
сначало сверить если совпадает имя, то проверить пароль, если пароль совпал то include (file) else {данные не верны}
я новичок в php
memka вне форума Ответить с цитированием
Старый 12.04.2009, 01:22   #4
SwiP
Форумчанин
 
Регистрация: 18.03.2009
Сообщений: 101
По умолчанию

Цитата:
Вообще не понял о чём речь.
Если кто-то, зайдёт не на страницу ident.php, а сразу зайдёт в mwork.php, то этот скрипт не срабатывает! Без всяких вопросов открывается админка, хотя надо, чтобы выскакивало "Отказано в доступе"

Цитата:
если пароль совпал то include (file) else {данные не верны}
А что именно инклюдить в моём случае?
SwiP вне форума Ответить с цитированием
Старый 12.04.2009, 01:32   #5
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

SwiP
Можешь устанавливать cookies чтобы определять какой пользователь прошёл авторизацию, а какой нет.

Либо как вариант сделать файл админки встраиваемым в файл проверки и использовать константы для определения прохождения проверки.
define('verified', TRUE);
а в файле админки проверять
defined ('verified')
если константа существует - давать доступ к админке, если нет: die('Direct access forbidden');
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Старый 12.04.2009, 13:25   #6
InCun
Пользователь
 
Аватар для InCun
 
Регистрация: 11.04.2009
Сообщений: 64
По умолчанию

Как то у вас всё запутанно получается....
Напишу примерную логику, по которой делал я админку(в одном файле).

Код:
<?
include connectdb.php;

if (!isset($_SESSION['autorized'])) // Проверяем авторизацию. 
{
    if (!isset($_POST['enter'])) // Авторизации - нету ( Делаем авторизацию....
	{
	echo "Авторизируйтесь пожалуйста<br>";
	echo "<form method='post'>Логин:<br /> <input type='text' name='login' value='' width='150'><br />
                                              Пароль:<br /> <input type='password' name='pass' width='151' class='input'><br />
                                                            <input type='submit' name='enter' value='Войти'>";
	 if ($_SESSION['login'] == false) {echo "Меню администратора не доступно, что бы оно было доступно, авторизируйтесь";}
	} 
	else     // После ввода и нажатия "Принять" (Ентер) выполняется авторизация....
	{
	if ($_POST['login']!='' and $_POST['pass']!='') // Далее... идет проверка - совпадает ли логин с паролем пользователя.
		{
				$safe_name=mysql_escape_string(trim($_POST['login']));
				$safe_pass=mysql_escape_string(trim($_POST['pass']));
				$safe_pass=md5($safe_pass);
				$sql="SELECT login,pass FROM users WHERE login='".$safe_name."' and pass='".$safe_pass."'";
				$result=mysql_query($sql);
		if (!mysql_num_rows($result)) 
			{
		        	echo "Неверный логин или пароль <a href=\"javascript:history.back()\" title=\"назад\">назад</a>";
			}
			else 
			{
				$line=mysql_fetch_row($result);
				$_SESSION['autorized']=true;
				$_SESSION['login']=$_POST['login'];
				echo "Вы Авторизированы";
				echo "<meta http-equiv='refresh' content='2; url=".$_SERVER['PHP_SELF']."'>";
			
			}
		}	else { die("Неверный логин или пароль <a href=\"javascript:history.back()\" title=\"назад\"><b>назад</b></a>");}
	}
}
else // После выполнения Успешной авторизации выполняется следующий код:
{

echo "Вы успешно прошли авторизацию! Поздравляем! Теперь вы можете увидеть админский текст";
}
?>
InCun вне форума Ответить с цитированием
Старый 12.04.2009, 19:17   #7
SwiP
Форумчанин
 
Регистрация: 18.03.2009
Сообщений: 101
По умолчанию

Насчёт куки:
Вот добавил это в ident.php:
Код:
<?
setcookie ("imja",$_POST['name'],600);
?>
<meta http-equiv="Content-Type" content="no-cache; charset=windows-1251"/>
<title>Вход в админскую панель</title>
<form method=post action=mwork.php>
Введите логин:<BR>
<input type=text name=name><br>
Введите пароль:<BR>
<input type=password name=pass><br>
<input type=submit name=send value=Проверить>
</form>
Но она не читается, когда, я проверяю её в mwork.php Там просто пустое значение. Как её правильно передавать?
SwiP вне форума Ответить с цитированием
Старый 12.04.2009, 19:58   #8
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

Куки нужно добавлять когда пользователь УЖЕ проверен, а не до проверки. И добавлять нужно не логин, а какую-либо рандомную строку присвоенную данному пользователю для определения его сессии. И как ты читаешь куки?

Кстати, InCun привёл отличный пример авторизации.
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Старый 12.04.2009, 20:45   #9
SwiP
Форумчанин
 
Регистрация: 18.03.2009
Сообщений: 101
По умолчанию

Читаю вот так:
Код:
echo $_COOKIE["name"];
Так, вставил такой код после проверки всех данных:

Код:
setcookie ("login","$name");
if (!isset ($_COOKIE["login"])) die ("Авторизация неуспешна");
Теперь просто то заходит, то не заходит. Выдаёт ошибку Авторизация неуспешна
Только вместо имени вы сказали лучше помещать рандомную строку. А это как?

Насчёт примера InCun'a, пример хороший, но всё же хотелось бы самому сделать

Последний раз редактировалось SwiP; 12.04.2009 в 20:54.
SwiP вне форума Ответить с цитированием
Старый 12.04.2009, 21:55   #10
InCun
Пользователь
 
Аватар для InCun
 
Регистрация: 11.04.2009
Сообщений: 64
По умолчанию

Swip, изобретаешь велосипед?

За хороший пример спасибо.
InCun вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка правильности ввода. Whiplash Паскаль, Turbo Pascal, PascalABC.NET 6 14.11.2008 18:00
Проверка правильности ввода символов LLIypLLIyH Помощь студентам 7 22.07.2008 19:30
Проверка ввода Panda Помощь студентам 2 08.07.2008 19:23
проверка ввода данных в форму @Simpson JavaScript, Ajax 1 12.11.2007 02:17
Проверка ввода символов Raz0r Помощь студентам 2 06.11.2007 14:16