51

Re: php + sql чат

Hanut, спасибо большое) все заработало прекрасно)

кстате, а чего это все утро форум не работал?

52

Re: php + sql чат

DimkaDimka сказал:

кстате, а чего это все утро форум не работал?

На хостинге был сбой.

53

Re: php + sql чат

Hanut, вы хоть на чат мой взгляните)
chat196.u-gu.ru/?user=hanut
какой все-таки взнос вы в него сделали)

54

Re: php + sql чат

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

55

Re: php + sql чат

DimkaDimka сказал:

как же сделать авторизацию?

Все зависит от того, что от чата требуется.

Сперва можете сделать только по имени, это проще всего реализовать, так как понадобится только заменить имя пользователя передаваемое через урл, на хранение имени пользователя в сессии.

PHP session_start().

56

Re: php + sql чат

а зачем сессию?
ведь я могу просто ввести желаемый ник, и он сохранится в переменной.. разве нет?

57

Re: php + sql чат

DimkaDimka сказал:

ведь я могу просто ввести желаемый ник, и он сохранится в переменной.. разве нет?

Вы о какой переменной? Обычные переменные PHP живут только время выполнения скрипта.

58

Re: php + sql чат

ах вот оно что...
ну тогда буду разбираться с сессиями

59

Re: php + sql чат

и еще вопросик: когда я ввожу адрес сайта (ну допустим chat.196.u-gu.ru), то теоретически он меня перекидывает на chat.196.u-gu.ru/index.html (или index.php ??). но ведь файл index.php у меня уже занят, а хотелось бы сделать на нем авторизацию.
могу ли я существующий файл index.php переименовать например в index2.php, а на index.php сделать авторизацию? или все сломается?

60

Re: php + sql чат

В каталоге должен быть либо index.html, либо index.php. Оба делать не надо.

Для авторизации сделайте отдельный файл login.php, например, и перекидывайте на него с index.php, если авторизация еще не пройдена.

61

Re: php + sql чат

точно!) как я не догадался...) тоесть в индексе можно стартовать сессию, а потом делать проверку, что переменная с ником не равна нулю, так? если не равна - то продолжаем, если равна - кидаем на login.php и опять же стартуем сессию и запоминаем переменную..
тогда, вероятно, нужно делать эту проверку на каждом php файле чата? (ну кроме login.php)
и напишите пожалуйста, как выглядит if с переадресацией на login.php
уххх, понеслась)

62

Re: php + sql чат

DimkaDimka сказал:

вероятно, нужно делать эту проверку на каждом php файле чата?

Совершенно верно. Только файлы загружаемые через Ajax, если авторизация не пройдена, не должны ничего возвращать, а просто будут прерываться через exit().

<?php

session_start();

if (!isset($_SESSION['name'])) {
  header('Location: login.php');
  exit();
}

?>

63

Re: php + sql чат

в общем наткнулся на такие ошибки:
Cannot send session cache limiter - headers already sent
ну и какие-то еще были про сессии...
прочитал вот это http://www.popov-roman.com/blog/program … rder-mark/
написано, что нужно менять кодировку.. попробовал - русские буквы краказябрами выводятся.. что посоветуете?

64

Re: php + sql чат

в общем застрял еще и на таком моменте (кроме проблемы выше):

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>....

на индекс не попасть, ибо не задана переменная сессии. в логин.пхп при нажатии на кнопку ничего не происходит. что я делаю не так?

65

Re: php + sql чат

вроде разобрался)
сейчас постараюсь сделать проверку на всех пхп и выход из чата (типо разрушение сессии)

66

Re: php + sql чат

проверку не стал делать везде (не уверен, что это нужно)

выкладываю последнюю версию, так сказать

Hanut, прошу, чтобы вы просмотрели и прокомментировали)

http://www.sendspace.com/file/twt6ye

67

Re: php + sql чат

DimkaDimka сказал:

Cannot send session cache limiter - headers already sent

Это означает, что вы функцию session_start() в одном скрипте пытаетесь выполнить два раза, чего делать нельзя.

Надо проверять так же и POST.

if (!isset($_SESSION['name']) && !isset($_POST['name'])) {

68

Re: php + sql чат

спасибо, подправил
в файле index.php     session_start() вроде 1 раз используется, однако при кодировке utf-8 вылезает эта ошибка
проверку я сделал только в файле index.php . нужно ли еще где?
еще вопрос: сколько по времени длится сессия? ну видимо если я перезагружу страницу - сессия не пропадает, если закрою и открою заново - пропадет, ну и через некоторое время бездействия - тоже пропадает. я прав?

69

Re: php + sql чат

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);

70

Re: php + sql чат

DimkaDimka сказал:

session_start() вроде 1 раз используется, однако при кодировке utf-8 вылезает эта ошибка

Это не из-за кодировки. Используйте Notepad++. Не пишите скрипты в блокноте, он сохраняет utf8 файлы с бом байтом, чего скрипты не переносят.

DimkaDimka сказал:

проверку я сделал только в файле index.php . нужно ли еще где?

Если имя пользователя брать из сессии, то надо везде добавить проверку сессии. Но как я уже говорил, в файлах запускаемых через Ajax, не должно быть ничего возвращено скриптом, просто exit(), никаких редиректов.

DimkaDimka сказал:

сколько по времени длится сессия?

Пока не закроется браузер, либо не истечет значение директивы PHP session.gc_maxlifetime.

71

Re: php + sql чат

Hanut сказал:

Не пишите скрипты в блокноте, он сохраняет utf8 файлы с бом байтом, чего скрипты не переносят.

в какой же кодировке тогда сохранять? если utf8 без бом - то русский язык отображается краказябрами

Hanut сказал:

в файлах запускаемых через Ajax, не должно быть ничего возвращено скриптом, просто exit(), никаких редиректов.

вот это чтото не очень понял..

72

Re: php + sql чат

в общем, рассказываю..
выставил у всех php файлов проекта кодировку utf-8 (без BOM)
в результате:
тайтлы страниц, написанные русским языком, отображаются краказябрами
ники и сообщения, написанные на русском, отображаются краказябрами
ники и сообщения, загруженные из истории, отображаются краказябрами
сообщения на русском от русских ников заносятся в бд нормально (как ни странно)

что же делать, подскажите?

73

Re: php + sql чат

в общем проблему решил так:
1. в httpd.conf заменил AddDefaultCharset windows-1251 на AddDefaultCharset utf-8
2. изменил кодировку бд на utf8_general_ci
3. в начале каждого php файла добавил строку:

<?php
header('Content-Type: text/html; charset=UTF-8');
?>

скажите, можно ли так делать?

74

Re: php + sql чат

Достаточно сменить кодировку в базе и в коде html указать кодировку и все:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

75

Re: php + sql чат

DmitryV сказал:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

естественно я сначала сменил кодировку в базе - ничего не изменилось

а про эту строчку я не очень понял: ведь у меня не во всех php файлах есть тег html. вот и не знал, что делать...

но а впринципе то мое решение подойдет?