0 / 0 / 0
Регистрация: 08.05.2010
Сообщений: 51
1

Авторизация через cookies c выводом ошибок

14.04.2011, 18:38. Показов 1407. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Собственно нужно сделать маленький блок авторизации, который в последствии можно разместить в любом месте сайта.
Он должен представлять из себя 2 поля (логин и пароль) и кнопку отправки, то есть обычная форма. И нужно выводить при неправильном пароле ошибку.

Делаю так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function login(){
 
if(!isset($_POST["submit_login"])){
echo ("<form name='test' method='post' action=".$PHP_SELF.">
  <p><b>Логин:</b><br>
   <input name='login' type='text' size='40'>
  </p>
  <p><b>Пароль:</b><br>
   <input name='pass' type='text' size='40'>
  </p>
  <p><input type='submit' name='submit_login' value='OK'></p>
 </form>");
 
} elseif (($_POST["login"]=='admin')&&($_POST["pass"]=='pass')) {SetCookie("user","pass");} else echo ("bad password");
}
И ругается :
PHP
1
Warning: Cannot modify header information - headers already sent by (output started at /srv/disk1//body.php:62) in /srv/disk1//engine/lib/auth.php on line 41
Как я понял, ругается он на то, что я вывожу какой-то текст перед тем как создавать кук.

Нужно именно выводить ошибку в случае неверного пароле в этом же блоке...

Прошу помощи, гуру PHP =)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.04.2011, 18:38
Ответы с готовыми решениями:

Авторизация через ВК // Много ошибок
Доброго времени суток! Делаю авторизацию через вконтакте &lt;?php $hash_vk = $_GET; $app_id =...

Из Cookies в Session авторизация
Здравствуйте, помогите мне пожалуйста заменить сохранение в куки на сессии! Вот код страницы:...

Авторизация через AJAX + cookies
Надо написать простую форму удалённой авторизации (логин, пароль + кнопка &quot;вход&quot;) для сайта...

Авторизация и права доступа через ADOQuery: анализ ошибок
Добрый день, форумчане! У меня есть база данных в Access, в которой я создал таблицу Sotrudniki....

11
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
14.04.2011, 19:57 2
Цитата Сообщение от Krisstal Посмотреть сообщение
ругается он на то, что я вывожу какой-то текст перед тем как создавать кук
ну да, у тя echo перед куками, и не следует html совать внутрь ф-ии
Попробуй так
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function Login($user) 
{ 
    if ($user == '') 
        return false; 
 
    // Если надо, запоминаем имя в сессии 
    $_SESSION['login'] = $user; 
     
    // и в cookies, запомнить его (на неделю). 
    setcookie('login', $user, time() + 3600 * 24 * 7); 
     
    // Успешная авторизация. 
    return true; 
}
а форму и проверку на заполненность сделай отдельно
0
0 / 0 / 0
Регистрация: 08.05.2010
Сообщений: 51
15.04.2011, 17:21  [ТС] 3
А откуда потом login то вызывать?
Всё равно будет ошибку давать!!!
И мне нужно лигин и пароль проверять.
0
256 / 234 / 38
Регистрация: 31.10.2010
Сообщений: 504
15.04.2011, 18:25 4
Ругается на то, что у тебя есть вывод текста перед вызовом функции setcookie. Перед функциями setcookie и header не должно быть вывода текста в браузер - даже пустая строка перед вызовом этих функций выдаст ошибку.

Неправильно:
PHP
1
2
Перенаправляю...
<?php header('Location: /'); ?>
Неправильно:
PHP
1
<?php header('Location: /'); ?>
Неправильно:
PHP
1
<?php echo 'Перенаправляю...'; header('Location: /'); ?>
Правильно:
PHP
1
2
3
<?php
  header('Location: /');
?>
1
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
15.04.2011, 19:54 5
Цитата Сообщение от Krisstal Посмотреть сообщение
А откуда потом login то вызывать?
посмотри в мануале как вызывать пользовательские ф-ии

Цитата Сообщение от Krisstal Посмотреть сообщение
Всё равно будет ошибку давать!!!
ты проверял?!!!

Цитата Сообщение от Krisstal Посмотреть сообщение
И мне нужно лигин и пароль проверять.
ну проверяй се за ф-ей. Ф-я такую проверку не делает, она только записывает имя в куки если оно есть.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if (($_POST["login"]=='admin')&&($_POST["pass"]=='pass')) {
   Login($_POST["login"]);
}
else {
   echo ("<form name='test' method='post' action=".$PHP_SELF.">
  <p><b>Логин:</b><br>
   <input name='login' type='text' size='40'>
  </p>
  <p><b>Пароль:</b><br>
   <input name='pass' type='text' size='40'>
  </p>
  <p><input type='submit' name='submit_login' value='OK'></p>
 </form>");
}
1
0 / 0 / 0
Регистрация: 08.05.2010
Сообщений: 51
16.04.2011, 22:04  [ТС] 6
Так только вот я этот блок встраиваю как функции в основной код сайта. То есть вызываю это как функцию, но перед этим у меня выводится через echo шапка сайта.

Добавлено через 1 минуту
Мне нужно чтоб всё выполнялось в 1 скримте (пусть index.php) и не перенаправлялся на другой(допустим login.php)
0
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
17.04.2011, 00:13 7
Krisstal, если те надо все в одном файле (index.php как ты хочешь) добавь в index.php все что находится в файле login.php.
Но, если ты шапку подключаешь через echo, и дальше по коду идет setcookie, тогда скрипт выдаст ошибку, мол заголовки отправлены
(Warning: Cannot modify header information - headers already sent by .......).
Можно решить так:
1. Подключать шапку через include (лучше так)
PHP
1
include ("header.php");  // вместо header подставь имя файла своей шапки
2. Если так хочется через echo подключать, то перед подключением шапки (перед echo) напиши ф-ю ob_start(); , а после setcookie напиши ф-ю ob_end_flush();
1
0 / 0 / 0
Регистрация: 08.05.2010
Сообщений: 51
17.04.2011, 12:36  [ТС] 8
Решил сделать так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
function login_sk(){
 
if ((isset($_SESSION['name']) && (!isset($_COOKIE['user'])) {
$login = $_SESSION['name'];
$query = "SELECT `id`
                    FROM `users`
                    WHERE `login`='{$login}' LIMIT 1";
$row = mysql_query($query) or die(mysql_error());
$loginpass=$login.'|||'.$row['pass'];
setcookie('user',$loginpass,time()+60*60*24*2);
} 
    elseif ((!isset($_SESSION['name']) && (isset($_COOKIE['user'])) {
$loginpass = explode("|||", $_COOKIE['user']);
$query =  "SELECT `id`
                    FROM `users`
                    WHERE `login`='{$loginpass[0]}' AND `password`='{$loginpass[1]}'
                    LIMIT 1";
$row = mysql_query($query);
 
if (mysql_num_rows($row) == 1) {
$_SESSION['name']=$row['login'];
$_SESSION['user_id']=$row['group_id'];}
 
else
{setcookie('user','',time()-999};
 
}
 
}
Но откуда-то синтаксическая ошибка!!!
PHP
1
Parse error: syntax error, unexpected '{' in /srv/disk1/679415/www/com/login.php on line 4
0
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
17.04.2011, 13:00 9
Цитата Сообщение от Krisstal Посмотреть сообщение
Но откуда-то синтаксическая ошибка!!!
у тя лишние скобки, напиши так
PHP
1
if ( isset($_SESSION['name']) && !isset($_COOKIE['user']) ) {
или
PHP
1
if ( (isset($_SESSION['name'])) && (!isset($_COOKIE['user'])) ) {
0
0 / 0 / 0
Регистрация: 08.05.2010
Сообщений: 51
17.04.2011, 22:26  [ТС] 10
Спс, разобрался... А вот ещё вопрос: можно ли задать массив констант?
Мне нужно задать допустим группы пользователей которые могут посещать определённые страницы.
Мне хотелось бы сразу забить id групп в 1 константу и сравнивать входит ли пользователь в эту группу или нет, и в зависимости от этого выводить ту или иную информацию...
0
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
17.04.2011, 22:32 11
можно задать массив чего угодно. Тока не пойму почему именно констант, просто назови группы своими именами, и у тя будет список (то бишь массив) имен групп, И в зависимости какая группа выбрана выполняешь свои действия
0
0 / 0 / 0
Регистрация: 08.05.2010
Сообщений: 51
18.04.2011, 17:38  [ТС] 12
Нужно организовать функцию которая возвращает истину если пользователь имеет права на данное действие.
Допустим удаление или редактирование. И я хочу поместить создать 1 файл с уровнями доступа. В нём будет храниться массив групп для каждого действия. Вот функция будет обращаться к этому массиву, и если група пользователя имеется в массиве, то функция возвращает истину.
0
18.04.2011, 17:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.04.2011, 17:38
Помогаю со студенческими работами здесь

Авторизация с использованием Cookies
Я вот первый раз такое делаю и не понимаю... Как вот получить куки. С помощью Fiddlera, я узнал что...

Не передаются cookies (secure?) авторизация на mail.ru
Вот мой ужасный тестовый код. Проблема в том, что не все кукисы, которые mail.ru устанавливает,...

Есть ли разница между обычным выводом через echo и выводом с использованием HEREDOC-синтаксиса?
Есть ли разницы между двумя многострочными выводами ? первый записывается как строка, второй код...

Проверка имени с выводом ошибок
Всем доброго времени суток! Как начинаю делать проверку preg_match на сайте теряю синхронизацию с...

Калькулятор с выводом ошибок в отдельном окне
простой калькулятор с выводом ошибок в отдельном окне . Мне нужно сделать чтоб в Edit можно было...

Цикл в цикле с выводом ошибок в текстовый файл
Есть бат-файл, нужно создать его аналог VBS с доработкой, в качестве примера взят notepad.exe ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru