Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Серверные технологии и Flash

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.12.2006, 16:56
Americanets вне форума Посмотреть профиль Отправить личное сообщение для Americanets Найти все сообщения от Americanets
  № 1  
Ответить с цитированием
Americanets
 
Аватар для Americanets

Регистрация: Jun 2005
Сообщений: 127
По умолчанию не работает система авторизации на php mysql и cookie

не работает система авторизации на php mysql и cookie, наделал ошибок, не пойму как исправить


Код:
CREATE TABLE `members` (
`id` SMALLINT NOT NULL AUTO_INCREMENT ,
`name` TINYTEXT NOT NULL ,
`password` TINYTEXT NOT NULL ,
`info` TEXT,
PRIMARY KEY ( `id` ) 
);
INSERT INTO `members` VALUES (1, 'demo', 'pass','информация');

Код HTML:
<form action='aut.php' method='POST'>
Логин: <input type='text' name='name'><br>
Пароль: <input type='text' name='pass'><br>
<input type='Submit' name='logs' value='Вход'><br>
</form>

aut.php

PHP код:
$name=$_POST['name'];
$pass=$_POST['pass'];


if( 
$_SERVER['REQUEST_METHOD'] == "POST" && isset( $_POST['logs'] ) )
  {
   if( empty( 
$_POST['name'] ) || empty( $_POST['pass'] ) )
    {  
print 
'не авторизовался, введите данные';

    }
   
auth();
  }
function 
auth()
  {
$result mysql_query"SELECT * FROM `members` WHERE `name` = $name AND `password` =$pass  LIMIT 1");
if( 
mysql_num_rows$result ) == )
    {  
print 
"не верные данные, пользователь не найден!";
    }
   
   
$result=mysql_fetch_array($result);
   
$name=$result['id'];
   
setcookie"identification" $name time() + 900 "/" );
   
header"Location: user.php");
  } 
user.php


PHP код:
  $id=$_COOKIE['identification'];
$result mysql_query"SELECT `*` FROM `members` WHERE `id` =$id);
$result=mysql_fetch_array($result);
$info=$result['info'];
print 
$info

Старый 10.12.2006, 19:10
Mnilionic вне форума Посмотреть профиль Отправить личное сообщение для Mnilionic Найти все сообщения от Mnilionic
  № 2  
Ответить с цитированием
Mnilionic
 
Аватар для Mnilionic

Регистрация: Aug 2005
Адрес: я из Ленинграда
Сообщений: 1,082
Отправить сообщение для Mnilionic с помощью ICQ
INSERT INTO `members` VALUES (1, 'demo', 'pass','информация');

Зачем вписывать значение ID если оно у тебя АВТОМАТИЧЕСКИ инкримируется?

Когда случается "тупиковое условие", по типу:
Код:
if( mysql_num_rows( $result ) == 0 ) {   
print "не верные данные, пользователь не найден!"; 
}
то в твоём варианте лучше останавливать выполнение скрипта, а то дерьмо выйдет.

А вообще разбираться трудно, потому что дикая расцветка у синтаксиса.

Старый 10.12.2006, 19:28
Americanets вне форума Посмотреть профиль Отправить личное сообщение для Americanets Найти все сообщения от Americanets
  № 3  
Ответить с цитированием
Americanets
 
Аватар для Americanets

Регистрация: Jun 2005
Сообщений: 127
пасибо, подсветка действительно отвлекает, может сцилка на примерчик ись?

Старый 11.12.2006, 12:53
Skubent вне форума Посмотреть профиль Отправить личное сообщение для Skubent Посетить домашнюю страницу Skubent Найти все сообщения от Skubent
  № 4  
Ответить с цитированием
Skubent
 
Аватар для Skubent

Регистрация: Oct 2005
Адрес: Млечный Путь, 7-й рукав, YD AC-451, 3-я планета.
Сообщений: 996
Отправить сообщение для Skubent с помощью ICQ
а вообще, покури про массивы $_COOKIE (это чтобы setcookie не дергать) и $_SESSION, чтобы не мучиться с передачей данных.
Кроме того, вкури пару статей про SQL-инъекции и методам защиты от оных.
__________________
Тут вы найдете ответы на почти все вопросы:
А можно ли сделать так ? - Можно.
Почему не работает ? - Неправильно сделано.
Где ошибка ? - В ДНК.

Старый 11.12.2006, 13:52
Americanets вне форума Посмотреть профиль Отправить личное сообщение для Americanets Найти все сообщения от Americanets
  № 5  
Ответить с цитированием
Americanets
 
Аватар для Americanets

Регистрация: Jun 2005
Сообщений: 127
спасибо за совет, буду читать, может примером поможете а то очень и очень нужно, а времени все понять не хватит

Старый 11.12.2006, 15:34
Skubent вне форума Посмотреть профиль Отправить личное сообщение для Skubent Посетить домашнюю страницу Skubent Найти все сообщения от Skubent
  № 6  
Ответить с цитированием
Skubent
 
Аватар для Skubent

Регистрация: Oct 2005
Адрес: Млечный Путь, 7-й рукав, YD AC-451, 3-я планета.
Сообщений: 996
Отправить сообщение для Skubent с помощью ICQ
Лучше день потерять, потом за пять минут долететь (с)
__________________
Тут вы найдете ответы на почти все вопросы:
А можно ли сделать так ? - Можно.
Почему не работает ? - Неправильно сделано.
Где ошибка ? - В ДНК.

Старый 11.12.2006, 16:49
Americanets вне форума Посмотреть профиль Отправить личное сообщение для Americanets Найти все сообщения от Americanets
  № 7  
Ответить с цитированием
Americanets
 
Аватар для Americanets

Регистрация: Jun 2005
Сообщений: 127
верно, спасибо, просто щас на работе а вечером боюсь не успею

Старый 12.12.2006, 16:25
rtm вне форума Посмотреть профиль Отправить личное сообщение для rtm Найти все сообщения от rtm
  № 8  
Ответить с цитированием
rtm

Регистрация: Nov 2006
Сообщений: 39
Во-первых: вспомните про область видимости переменных! У вас функция auth() никгда не найдет пользователя, так как не знает что искать (к слову интересных уход от SQL-инъекций). Вот пример из которого все будет ясно:
PHP код:
function f1() {
    
$a 5;
    echo 
"In f1(): \$a=$a<br>\n";
}
function 
f2() {
    global 
$a;
    
$a 3;
    echo 
"In f2(): \$a=$a<br>\n";
}

$a 10;
echo 
"Begin: \$a=$a<br>\n";
f1();
echo 
"After f1(): \$a=$a<br>\n";
f2();
echo 
"After f2(): \$a=$a<br>\n"
Во-вторых: как уже было подмечено при ошибках стоит помимо вывода сообщения, что-то делать например завершать работу скрипта.
В-трерьих: функции setcookie() и header() должны указываться ДО любого вывода в браузер, иначе будет выведено сообщение о том что нельзя отправить заголовки, и соответственно ни куки не будут установлены, ни перехода не будет.

Старый 12.12.2006, 16:43
Americanets вне форума Посмотреть профиль Отправить личное сообщение для Americanets Найти все сообщения от Americanets
  № 9  
Ответить с цитированием
Americanets
 
Аватар для Americanets

Регистрация: Jun 2005
Сообщений: 127
что - то ничего не понятно

Старый 12.12.2006, 17:20
rtm вне форума Посмотреть профиль Отправить личное сообщение для rtm Найти все сообщения от rtm
  № 10  
Ответить с цитированием
rtm

Регистрация: Nov 2006
Сообщений: 39
Хорошо, покажу на вашем примере: попровуйте вывести из функции auth() значения переменных $name и $pass, бьюсь об заклад, что они окажутся пустыми. Для того, чтобы функция auth() работала так, как вы хотите необходимо написать так:
PHP код:
function auth() {
    global 
$name,$pass;
...

Дальше, про setcookie() и header():
PHP код:
if( mysql_num_rows$result ) == 
    {   
print 
"не верные данные, пользователь не найден!"
    } 
    
   
$result=mysql_fetch_array($result); 
   
$name=$result['id']; 
   
setcookie"identification" $name time() + 900 "/" ); 
   
header"Location: user.php"); 
  } 
Если пользователь не найден, то появится Ваше сообщение и сообщение PHP
Код:
Warning: Cannot modify header information - headers already sent
и никакие куки установлены не будут и перехода не будет. Согласен, может быть и не нужно в этом случае устанавливать куки и делать переход, но, Вы меня извините, строить логику приложения исходя из того, как будет реагировать интерпретатор на логические ошибки в приложении, по крайней мере кощунственно.

Дальше - больше: зачем нужна фукнция auth() если она вызывается только раз, в одном месте и содержит 5 строчек кода, которые нельзя отнести к решению какой-то отдельной логической операции приложения?

Ещё дальше - ещё больше: если $_POST['name'] и $_POST['pass'] пусты, то Вы выводите об этом сообщение. Это хорошо, но зачем в этом случае пытаться проверять если такой пользователь в БД. Понят какие мысли приходят при виде сообщения "не авторизовался, введите данные" и при
"не верные данные, пользователь не найден!". Но какие чувства будет испытавать бедный пользователь, когда увидит оба эти сообщения сразу?!

Создать новую тему Ответ Часовой пояс GMT +4, время: 07:44.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 07:44.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.