Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Аутентификация, не работае скрипт 
V
    Опции темы
Slauta
  Дата 8.12.2009, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Оторванный от жизни
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 14.5.2009
Где: Солигорск

Репутация: нет
Всего: нет



Вот собственно все файлы:

enter.html
Код

<html>

<head>
  <title>Авторизация</title>
</head>

<body>
Укажите Ваши данные <br>
<form method = "post" action = "login.php">
<input name="login">Логин<br>
<input tupe = "password" name="pass" >Пороль<br>
<input type="submit" name="" value="Сохронить" tabindex="0">
</form>
<br>
<a href="register.html">Регистрация нового пользователя</a>
</body>

</html>



Login.php
Код

<?php
$db_name="portal";
$table="users";
$host="localhost";
$user="1111";
$pass="1111";
$link=mysql_connect($host,$user,$pass) or
die(mysql_errno($link).mysql_error($link));
//выбираем базу данных portal
$db=mysql_select_db($db_name,$link) or
die(mysql_errno($link).mysql_error($link));
$login=$_REQUEST['login'];
$pass=$_REQUEST['pass'];
$sqlquery = "SELECT count(*) FROM users WHERE login = \"$login\"";
//вибераем данные
$result=mysql_query($sqlquery, $link) or
die(mysql_errno($link).mysql_error($link));
$data=mysql_fetch_array($result);
if($data[0]>0){
// логин есть сравним пароль
$sqlquery = "SELECT pass FROM users WHERE login = \"$login\"";
 $result=mysql_query($sqlquery, $link) or
die(mysql_errno($link).mysql_error($link));
$password=mysql_fetch_array($result);
if($password[0]!=$pass){
echo ("Неверный пароль");
echo ("<br><a href=\"enter.html\">Перейти обратно</a>");
}
else{
session_start();
$_SESSION['is_logged'] = TRUE;
header('Location: closed.php');
}
}
else
{
echo ("Неверное имя пользователя");
echo ("<br><a href=\"register.html\">Переход на регистрацию.</a>");
}
mysql_free_result($result);
mysql_close($link);
?>


register.html
Код

<html>

<head>
  <title>Страница регистрации</title>
</head>

<body>
Укажите Ваши данные <br>
<form method = "post" action = "register.php">
<input name="login">Логин<br>
<input tupe = "password" name="pass" >Пороль<br>
<input type="submit" name="" value="Сохронить" tabindex="0">
</form>
</body>

</html>



register.php
Код

<?php
$db_name="portal";
$table="users";
$host="localhost";
$user="1111";
$pass="1111";
$link=mysql_connect($host,$user,$pass) or
die(mysql_errno($link).mysql_error($link));
//выбираем базу данных portal
$db=mysql_select_db($db_name,$link) or
die(mysql_errno($link).mysql_error($link));
$login=$_REQUEST['login'];
$pass=$_REQUEST['pass'];
$sqlquery = "SELECT count(*) FROM users WHERE login = \"$login\"";
//вибераем данные
$result=mysql_query($sqlquery, $link) or
die(mysql_errno($link).mysql_error($link));
$data=mysql_fetch_array($result);
if($data[0]>0){
echo ("Такой логин уже существует");
echo ("<br><a href=\"register.html\">Переход на регистрацию.</a>");
}
else
{
$sqlquery = "INSERT INTO users (login, pass) VALUES (\"$login\", \"$pass\")";
$result=mysql_query($sqlquery, $link) or
die(mysql_errno($link).mysql_error($link));
session_start();
$_SESSION['is_logged'] = TRUE;
header('Location: closed.php');
}
mysql_free_result($result);
mysql_close($link);
?>



closed.php
Код

<?php
include 'logged.php';
echo "Закрытый раздел сайта";
?>


logged.php
Код

<?
if((!isset($_SESSION['is_logged'])) || ($_SESSION['is_logged']==FALSE))
    header ('Location: enter.html');
?>



Вот блин регистрация работает нормальна...
Вопрос про аутентификацию... Ввожу логин пароль а она меня перебрасывает сначала на closed.php а патом опять на enter.html, а должна была бы оставить на closed.php, но если бы я вошёл прямой ссылка на closed.php она меня перебрасывала на enter.html...
Блин 7 час мучаюсь, весь инет перерыл... 

Может кто знает в чём проблема?
--------------------
Хм...
PM MAIL WWW ICQ Skype   Вверх
capitan
Дата 8.12.2009, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 27.2.2005
Где: Москва

Репутация: 9
Всего: 13



ни в одном скрипте не увидел 
Код

session_start();

PM MAIL WWW ICQ   Вверх
nginx
Дата 8.12.2009, 20:03 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 20.6.2009

Репутация: 1
Всего: -3



Цитата

$login=$_REQUEST['login'];

$_REQUEST - плохо юзать, нужно юзать четко $_GET
в случае $_REQUEST одинаковые ключи затираются, т.к $_REQUEST = $_GET + $_POST, а у вас могут быть одинаковые ключи в ГЕТе и ПОСТе, и используя РЕКВЕСТ в просто затрете их

сессию вы в конце юзаете
Цитата

else{
session_start();
$_SESSION['is_logged'] = TRUE;
header('Location: closed.php');



а нужно ее включать в самом начале файла всегда

вопрос вы случайно не книгу Шапошникова читатете?

Цитата

include 'logged.php';

вообще лучше require_once всегда юзать
почитайте разницу между require && include

вы и once лучше сразу всегда юзать, чтобы избежать переопределения, если вы случайно во 2-ой раз подряд включите один и тот же файл

и вообще советую сразу использовать mysqli или pdo  smile 

Цитата

if((!isset($_SESSION['is_logged'])) || ($_SESSION['is_logged']==FALSE))

лишний код, и (!isset($_SESSION['is_logged']) - хватит

а вообще код свой напишу пока

Код

<?php
session_start();

mysql_connect("localhost", "root", ""); //сами введете свои данные
mysql_select_db("mydbname");

$sql = mysql_query(sprintf("SELECT login, pass FROM users WHERE login = '%s'", mysql_real_escape_string($_POST['login'])));
$res = mysql_fetch_assoc($sql);

if(!$res)
{
exit("Нет таких данных в бд!"); //юзеру выводит не надо, сами тут разберетесь
}
elseif($res['login'] != $_POST['login'] && $res['pass'] != $_POST['pass'])
{
exit("Неверные данные!");
}
else
{
$_SESSION['user'] = $_POST['user'];
header('Location: main_page.php');
exit();
}
?>


У уже давно не занимался на ПХП, могут быть ошибки с кавычками, но думаю разьеретесь на основе этого очень простого примера, если не хотите сразу на mysqli || pdo


Это сообщение отредактировал(а) nginx - 8.12.2009, 21:19
PM MAIL   Вверх
nerezus
Дата 8.12.2009, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 12
Всего: 43



Цитата

а вообще код свой напишу пока
Код


<?php
session_start();
mysql_connect("localhost", "root", ""); //сами введете свои данные
mysql_select_db("mydbname");

$sql = mysql_query("SELECT * FROM users WHERE login = '{$_POST['login']}'");
$res = mysql_fetch_assoc($sql);

if($res['login'] != $_POST['login'])
{
print "Нет такого логина!";
exit();
}

$sql = mysql_query("SELECT pass FROM users WHERE  login = '{$_POST['login']}'");
$res = mysql_fetch_assoc($sql);

if($res['pass'] != $_POST['pass'])
{
print "Неверный пароль!";
exit();
}
else
{
$_SESSION['user'] = $_POST['user'];
header('Location: main_page.php');
exit();
}



1. SQL-inj
2. Зачем 2 раза делатьь запрос?


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
nginx
Дата 8.12.2009, 20:31 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 20.6.2009

Репутация: 1
Всего: -3



Нер, исправил зацени =)
PM MAIL   Вверх
capitan
Дата 8.12.2009, 20:56 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 27.2.2005
Где: Москва

Репутация: 9
Всего: 13



nginx
1. Не стоит так подробно информировать пользователя. Не тот логин, не тот пароль. Делать лучше так:"Неправильный пароль или логин".
2. 
Код

$_SESSION['user'] = $_POST['user'];


тоже не стоит так делать. $_POST['user'] нужно проверять.
PM MAIL WWW ICQ   Вверх
nerezus
Дата 8.12.2009, 21:00 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 12
Всего: 43



Код

$sql = mysql_query(sprintf("SELECT login, pass FROM users WHERE login = '%s' AND pass='%s'",
    mysql_real_escape_string($_POST['login']),
    mysql_real_escape_string($_POST['pass']));
$res = mysql_fetch_assoc($sql);
if (!$res) {
    die('Auth failure');
}
$_SESSION['user'] = $_POST['login'];
header('Location: main_page.php');


Как-то так.

Это сообщение отредактировал(а) nerezus - 8.12.2009, 21:00


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
nginx
Дата 8.12.2009, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 20.6.2009

Репутация: 1
Всего: -3



Прошу прощения, у меня условие неправильно написано.
Нер, как всегда, меня правит =) молодец

Цитата

$res = mysql_fetch_assoc($sql);
if (!$res) {
    die('Auth failure');
}


у меня на else выйдет сразу ) двоечник пока что $me  smile 
т.к. если в БД нет допустим такой записи, то и $res['login'] не будет =) и пасс тоже ) и в итоге на else выйдет
мдя...обложался =)

Цитата

1. Не стоит так подробно информировать пользователя. Не тот логин, не тот пароль. Делать лучше так:"Неправильный пароль или логин".

Дык, я же на рабочий вар-т =) Если рабочий, я бы сразу mysqli заюзал бы ) мы же тут просто помогаем ТС ) он вряд ли сейчас будет с mysqli && pdo работать


Цитата

$_SESSION['user'] = $_POST['user'];
тоже не стоит так делать. $_POST['user'] нужно проверять. 

дык мы и проверяем

Это сообщение отредактировал(а) nginx - 8.12.2009, 21:34
PM MAIL   Вверх
NewDima
Дата 9.12.2009, 07:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: 10
Всего: 12



Цитата(nginx @ 9.12.2009,  03:03)
вообще лучше require_once всегда юзать

Для каждой директивы свое место
nginxпочитайте разницу между require && include и за одно, что они возвращают

PM ICQ   Вверх
nginx
Дата 9.12.2009, 19:09 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 20.6.2009

Репутация: 1
Всего: -3



NewDima, прочитал, прочтите сами  smile 

Это сообщение отредактировал(а) nginx - 9.12.2009, 19:13
PM MAIL   Вверх
nerezus
Дата 9.12.2009, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 12
Всего: 43



Как по мне, то include/include_once не имеют смысла - отсутствие библиотеки или шаблона - это уже фатальная ошибка.

require же применять вижу смысл только для шаблонов - их возможно переподключать с разными assign-параметрами.
Так что логично, что в остальных случаях будет верно require_once.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
NLspieler
Дата 10.12.2009, 00:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: 16
Всего: 19



Цитата(nerezus @  9.12.2009,  19:24 Найти цитируемый пост)
include/include_once не имеют смысла

В данной ситуации или вообще?

На мой взгляд, include очень полезен
он позволяет сделать так, что бы файл выступал в роли функции. 
Очень часто, это бывает очень удобным


PM MAIL   Вверх
Pitlord
Дата 10.12.2009, 01:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 31.10.2009

Репутация: 4
Всего: 7



NLspieler, а файл и не должен выступать в роли функции.
PM MAIL   Вверх
Slauta
Дата 10.12.2009, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Оторванный от жизни
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 14.5.2009
Где: Солигорск

Репутация: нет
Всего: нет



Блин, этот шапашников...
Дайте мне норм ответ что бы хотя бы работала...
Я так понял вся проблема в include?
--------------------
Хм...
PM MAIL WWW ICQ Skype   Вверх
Pitlord
Дата 11.12.2009, 02:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 31.10.2009

Репутация: 4
Всего: 7



Slauta, нет, основная проблема в отсутствии session_start() в logged.php, о чём говорилось ещё в первом ответе.
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0995 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.