Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 08.05.2010
Сообщений: 51

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

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

Студворк — интернет-сервис помощи студентам
Собственно нужно сделать маленький блок авторизации, который в последствии можно разместить в любом месте сайта.
Он должен представлять из себя 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.04.2011, 18:38
Ответы с готовыми решениями:

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

Из Cookies в Session авторизация
Здравствуйте, помогите мне пожалуйста заменить сохранение в куки на сессии! Вот код страницы: &lt;? include('connectdb.php');//...

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

11
 Аватар для __PION__
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
14.04.2011, 19:57
Цитата Сообщение от 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  [ТС]
А откуда потом login то вызывать?
Всё равно будет ошибку давать!!!
И мне нужно лигин и пароль проверять.
0
 Аватар для Good-bad man
256 / 234 / 38
Регистрация: 31.10.2010
Сообщений: 504
15.04.2011, 18:25
Ругается на то, что у тебя есть вывод текста перед вызовом функции 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
 Аватар для __PION__
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
15.04.2011, 19:54
Цитата Сообщение от 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  [ТС]
Так только вот я этот блок встраиваю как функции в основной код сайта. То есть вызываю это как функцию, но перед этим у меня выводится через echo шапка сайта.

Добавлено через 1 минуту
Мне нужно чтоб всё выполнялось в 1 скримте (пусть index.php) и не перенаправлялся на другой(допустим login.php)
0
 Аватар для __PION__
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
17.04.2011, 00:13
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  [ТС]
Решил сделать так:
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
 Аватар для __PION__
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
17.04.2011, 13:00
Цитата Сообщение от 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  [ТС]
Спс, разобрался... А вот ещё вопрос: можно ли задать массив констант?
Мне нужно задать допустим группы пользователей которые могут посещать определённые страницы.
Мне хотелось бы сразу забить id групп в 1 константу и сравнивать входит ли пользователь в эту группу или нет, и в зависимости от этого выводить ту или иную информацию...
0
 Аватар для __PION__
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
17.04.2011, 22:32
можно задать массив чего угодно. Тока не пойму почему именно констант, просто назови группы своими именами, и у тя будет список (то бишь массив) имен групп, И в зависимости какая группа выбрана выполняешь свои действия
0
0 / 0 / 0
Регистрация: 08.05.2010
Сообщений: 51
18.04.2011, 17:38  [ТС]
Нужно организовать функцию которая возвращает истину если пользователь имеет права на данное действие.
Допустим удаление или редактирование. И я хочу поместить создать 1 файл с уровнями доступа. В нём будет храниться массив групп для каждого действия. Вот функция будет обращаться к этому массиву, и если група пользователя имеется в массиве, то функция возвращает истину.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.04.2011, 17:38
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru