Re: php + sql чат
Hanut, спасибо большое) все заработало прекрасно)
кстате, а чего это все утро форум не работал?
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форум PHP-MyAdmin.RU → Курилка → php + sql чат
Hanut, спасибо большое) все заработало прекрасно)
кстате, а чего это все утро форум не работал?
кстате, а чего это все утро форум не работал?
Hanut, вы хоть на чат мой взгляните)
chat196.u-gu.ru/?user=hanut
какой все-таки взнос вы в него сделали)
здравствуйте
теперь задумался об авторизации, ведь не удобно и не красиво менять ник в адресной строке
вот думаю, как же сделать авторизацию? с регистрацией и вводом логина/пароля, без регистрации и вводом логина/пароля или же просто с вводом желаемого ника в чате?
посоветуйте...
я теперь ближе склоняюсь к регистрации, чтобы можно было работать с каждым пользователем в отдельности..
как же сделать авторизацию?
Все зависит от того, что от чата требуется.
Сперва можете сделать только по имени, это проще всего реализовать, так как понадобится только заменить имя пользователя передаваемое через урл, на хранение имени пользователя в сессии.
PHP session_start().
а зачем сессию?
ведь я могу просто ввести желаемый ник, и он сохранится в переменной.. разве нет?
ведь я могу просто ввести желаемый ник, и он сохранится в переменной.. разве нет?
Вы о какой переменной? Обычные переменные PHP живут только время выполнения скрипта.
ах вот оно что...
ну тогда буду разбираться с сессиями
и еще вопросик: когда я ввожу адрес сайта (ну допустим chat.196.u-gu.ru), то теоретически он меня перекидывает на chat.196.u-gu.ru/index.html (или index.php ??). но ведь файл index.php у меня уже занят, а хотелось бы сделать на нем авторизацию.
могу ли я существующий файл index.php переименовать например в index2.php, а на index.php сделать авторизацию? или все сломается?
В каталоге должен быть либо index.html, либо index.php. Оба делать не надо.
Для авторизации сделайте отдельный файл login.php, например, и перекидывайте на него с index.php, если авторизация еще не пройдена.
точно!) как я не догадался...) тоесть в индексе можно стартовать сессию, а потом делать проверку, что переменная с ником не равна нулю, так? если не равна - то продолжаем, если равна - кидаем на login.php и опять же стартуем сессию и запоминаем переменную..
тогда, вероятно, нужно делать эту проверку на каждом php файле чата? (ну кроме login.php)
и напишите пожалуйста, как выглядит if с переадресацией на login.php
уххх, понеслась)
вероятно, нужно делать эту проверку на каждом php файле чата?
Совершенно верно. Только файлы загружаемые через Ajax, если авторизация не пройдена, не должны ничего возвращать, а просто будут прерываться через exit().
<?php
session_start();
if (!isset($_SESSION['name'])) {
header('Location: login.php');
exit();
}
?>
в общем наткнулся на такие ошибки:
Cannot send session cache limiter - headers already sent
ну и какие-то еще были про сессии...
прочитал вот это http://www.popov-roman.com/blog/program … rder-mark/
написано, что нужно менять кодировку.. попробовал - русские буквы краказябрами выводятся.. что посоветуете?
в общем застрял еще и на таком моменте (кроме проблемы выше):
login.php
<html>
<title>Авторизация пользователей на сайте</title>
<body>
<input type=hidden name=action value=post>
<form method="post" action="index.php">
Nickname <input type="text" name=name value='<? echo $name; ?>'>
<input type=submit value=' Enter '>
</form>
</body>
</html>
index.php
<?php
session_start();
if (!isset($_SESSION['name'])) {
header('Location: login.php');
exit();
}
else
{
$_SESSION['name'] = $_POST['name'];
echo 'Привет, '.$_SESSION['name']."<br>";
}
?>
<?php
include('db.php');
$user=$_SESSION['name'];
?>
<html>....
на индекс не попасть, ибо не задана переменная сессии. в логин.пхп при нажатии на кнопку ничего не происходит. что я делаю не так?
вроде разобрался)
сейчас постараюсь сделать проверку на всех пхп и выход из чата (типо разрушение сессии)
проверку не стал делать везде (не уверен, что это нужно)
выкладываю последнюю версию, так сказать
Hanut, прошу, чтобы вы просмотрели и прокомментировали)
Cannot send session cache limiter - headers already sent
Это означает, что вы функцию session_start() в одном скрипте пытаетесь выполнить два раза, чего делать нельзя.
Надо проверять так же и POST.
if (!isset($_SESSION['name']) && !isset($_POST['name'])) {
спасибо, подправил
в файле index.php session_start() вроде 1 раз используется, однако при кодировке utf-8 вылезает эта ошибка
проверку я сделал только в файле index.php . нужно ли еще где?
еще вопрос: сколько по времени длится сессия? ну видимо если я перезагружу страницу - сессия не пропадает, если закрою и открою заново - пропадет, ну и через некоторое время бездействия - тоже пропадает. я прав?
chatajax.php
date('G'); // кавычки у параметра обязательны.
index.php
<?php
session_start();
if (!isset($_SESSION['name']) && !isset($_POST['name'])) {
header('Location: login.php');
exit();
}
if (isset($_POST['name'])) {
$_SESSION['name'] = $_POST['name'];
}
$user=$_SESSION['name'];
?>
// Эту строку:
var dataString = 'user='+ user + '&msg=' + boxval;
// Меняем на:
var dataString = 'user='+ encodeURIComponent(user) + '&msg=' + encodeURIComponent(boxval);
session_start() вроде 1 раз используется, однако при кодировке utf-8 вылезает эта ошибка
Это не из-за кодировки. Используйте Notepad++. Не пишите скрипты в блокноте, он сохраняет utf8 файлы с бом байтом, чего скрипты не переносят.
проверку я сделал только в файле index.php . нужно ли еще где?
Если имя пользователя брать из сессии, то надо везде добавить проверку сессии. Но как я уже говорил, в файлах запускаемых через Ajax, не должно быть ничего возвращено скриптом, просто exit(), никаких редиректов.
сколько по времени длится сессия?
Пока не закроется браузер, либо не истечет значение директивы PHP session.gc_maxlifetime.
Не пишите скрипты в блокноте, он сохраняет utf8 файлы с бом байтом, чего скрипты не переносят.
в какой же кодировке тогда сохранять? если utf8 без бом - то русский язык отображается краказябрами
в файлах запускаемых через Ajax, не должно быть ничего возвращено скриптом, просто exit(), никаких редиректов.
вот это чтото не очень понял..
в общем, рассказываю..
выставил у всех php файлов проекта кодировку utf-8 (без BOM)
в результате:
тайтлы страниц, написанные русским языком, отображаются краказябрами
ники и сообщения, написанные на русском, отображаются краказябрами
ники и сообщения, загруженные из истории, отображаются краказябрами
сообщения на русском от русских ников заносятся в бд нормально (как ни странно)
что же делать, подскажите?
в общем проблему решил так:
1. в httpd.conf заменил AddDefaultCharset windows-1251 на AddDefaultCharset utf-8
2. изменил кодировку бд на utf8_general_ci
3. в начале каждого php файла добавил строку:
<?php
header('Content-Type: text/html; charset=UTF-8');
?>
скажите, можно ли так делать?
Достаточно сменить кодировку в базе и в коде html указать кодировку и все:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
естественно я сначала сменил кодировку в базе - ничего не изменилось
а про эту строчку я не очень понял: ведь у меня не во всех php файлах есть тег html. вот и не знал, что делать...
но а впринципе то мое решение подойдет?
Форум PHP-MyAdmin.RU → Курилка → php + sql чат
Форум работает на PunBB, при поддержке Informer Technologies, Inc
Currently installed 7 official extensions. Copyright © 2003–2009 PunBB.