Страница 1 из 2

Некорректно работает чат на php

Добавлено: 2016-02-08, 6:07:33
Леон
Здравствуйте. Проблема такого характера:

Создал чат на php на другом хостинге, с которого решил перейти сюда. На прошлом хостинге всё работало корректно, а здесь столкнулся сразу с несколькими проблемами:

1)Перенаправление на стартовую страницу чата с формой для ввода имени и выбора цвета при случайном попадании незалогиненного пользователя на основную страницу чата не работает. Вместо перенаправления осуществляется вход в основное окно чата с последующей возможностью оставлять сообщения без имени. http://h93256.s05.test-hf.su/chat.php - это сам чат, http://h93256.s05.test-hf.su - это страница с формой ввода имени, минуя которую, по идее, в чат попасть нельзя. Это от версии php зависит, или от чего? Почему так по-разному работает?
Выдаёт вот такое предупреждение:
Warning: Cannot modify header information - headers already sent by (output started at /home/h93256/data/www/h93256.s05.test-hf.su/chat.php:81) in /home/h93256/data/www/h93256.s05.test-hf.su/chat.php on line 189

2)Тоже проблема, с которой при использовании этого же чата на предыдущем хостинге не встречался: прямо в окне чата мне сообщается о переменных, которые не использовались во время отправки форм и не получили значения. Всего у меня пять переменных:
$strSubject=$_POST['subject'];

$strMycolor=$_POST['webcolors']; - эти две используются единожды при переходе на страницу чата со страницы с именной формой.

$strUserName=$_POST[username];

$strMessage=$_POST['message'];

$strUserColor=$_POST['usercolor']; - эти три используются при отправке каждого нового сообщения. При этом страница чата переходит сама на себя.
Во время отправки формы имени в окне чата появляется информация о том, что три переменных, используемые для сообщений, не определены. Когда пишешь сообщение, в окне чата появляется оповещение о том, что первые две переменных не определены (те, которые использовались единожды). Как убрать из окна чата эти оповещения: "Notice: Undefined index: subject in /home/h93256/data/www/h93256.s05.test-hf.su/chat.php on line 112 Notice: Undefined index: webcolors in /home/h93256/data/www/h93256.s05.test-hf.su/chat.php on line 114" ?

Некорректно работает чат на php

Добавлено: 2016-02-08, 9:19:55
lissyara
вам следует либо исправить код, чтобы ошибки и предупреждения не вылезали, либо отключить их:
http://www.host-food.ru/faq/technical.q ... .htaccess/

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

Отправлено спустя 19 секунд:
собственно, скорей всего после этого всё станет корректно

Некорректно работает чат на php

Добавлено: 2016-02-09, 1:09:18
Леон
Вот я и сам скорее склоняюсь к исправлению ошибок, нежели к настройкам, которые будут их игнорировать. Подскажите, как поступить с переменными, если часть из них используется для отлавливания форм только один раз при переходе с предыдущей страницы, а другая часть используется уже постоянно при отлавливании отправленных сообщений, и страница переходит при этом сама на себя? Как разместить все их на странице, чтобы не было этих ошибок? Пробовал поставить в условие переход с определённой страницы, но с этим вообще ничего не вышло.

И второй вопрос: почему не работает переход на стартовую страницу незалогиненных пользователей. Что это за оповещение по поводу заголовка, которое я привёл выше?

Некорректно работает чат на php

Добавлено: 2016-02-09, 10:01:35
lissyara
для начала вывод ошибок отключите, и проверьте всё ли работает

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

Некорректно работает чат на php

Добавлено: 2016-02-09, 15:50:57
Леон
Работает и так всё, кроме заголовка, несмотря на вывод ошибок на экран. Это и странно. По поводу заголовка я так и не понял. Если там что-то сначала выводится (я не разобрался, что имеется в виду в этом оповещении, и не понимаю сейчас), то почему такой переход на страницу работал на предыдущем ресурсе?

Некорректно работает чат на php

Добавлено: 2016-02-09, 15:53:48
Леон
"что касается заголовков переадресации - они естственно не работают, поскольку до них был вывод, по поводу ошибки в коде (предупрждение)" - Вывод чего был? Я же и говорю, что ранее уже использовал этот код, и он прекрасно работал, включая отправку на стартовую страницу для тех, кто на ней ещё не был и не написал своё имя.

Некорректно работает чат на php

Добавлено: 2016-02-09, 16:54:26
lissyara
отключите вывод ошибок на экран

Некорректно работает чат на php

Добавлено: 2016-02-09, 22:06:48
Леон
Но ведь Вы сами заметили, что лучше сделать код корректным. Вот я и хочу узнать, как.

Некорректно работает чат на php

Добавлено: 2016-02-09, 22:08:40
lissyara
исправить все ошибки в коде.
убрать все предупреждения - которые по сути, те же ошибки, просто не такие серьёзные.

Некорректно работает чат на php

Добавлено: 2016-02-09, 23:32:20
Леон
Меня интересует конкретика. То, что какие-то ошибки, я и так понял, ибо они вывелись прямо на экран. Меня интересует, какие именно ошибки. Пишу я именно поэтому. Давайте остановимся на этом более подробно.

Некорректно работает чат на php

Добавлено: 2016-02-10, 0:53:32
lissyara
вы программируете, или я? =)
конкретика бывает применительно к коду, который вы не опубликовали.

или к ошибкам, которые не привели - не считая варнинга с упоминанием 81 строки.
но что там, в 81 строке - я не знаю.

причём, судя по самому варнингу, ошибка-то была до него - как раз в 81 строке, и её вы не выложили.

==========

в общем, телепатировать можно до бесконечности.

Некорректно работает чат на php

Добавлено: 2016-02-10, 3:58:55
Леон
Сейчас уже совсем другая строка будет в предупреждении, потому что убрал пустые строки и всё лишнее. Код такой:
<?php

$strSubject=$_POST['subject']; // используется один раз при переходе со страницы с вводом имени
$strMycolor=$_POST['webcolors']; // используется один раз при переходе со страницы с вводом имени

if ($strSubject!='') {

$f=fopen('chat_logs.txt','a');
fwrite($f, '&nbsp;'.'В чат заходит '.'<b>'.'<span style="color:'.$strMycolor.'";>'.strip_tags($strSubject).'</span>'.'</b>'.' '.date('H').':'.date('i').' '.date('d').'.'.date('m').'.'.date('y').'<br>');

fclose($f);
}

$strMessage=$_POST['message']; // Используется при отправке сообщений постоянно. Страница переходит сама на себя.
$strUserName=$_POST['username']; // Используется при отправке сообщений постоянно. Страница переходит сама на себя.
$strUserColor=$_POST['usercolor']; // Используется при отправке сообщений постоянно. Страница переходит сама на себя.

if ($strMessage!='') {

$f=fopen('chat_logs.txt','a');
fwrite($f, '<span style="color:'.$strUserColor.'";>'.'<b>'.'&nbsp;'.$strUserName.'</b>'.' подумал и сказал: '.'<i>'.strip_tags($strMessage).'</i>'.'</span>'.' '.'&nbsp; &nbsp;'.date('H').':'.date('i').' '.date('d').'.'.date('m').'.'.date('y').'<br>');

fclose($f);

}

$f=fopen('chat_logs.txt','r');
while(!feof($f)) {
echo fgets($f);
}
fclose($f);

if ($strSubject=='' && $strUserName=='') {

header("Location: index.php"); //То самое перенаправление, по поводу которого предупреждение

}

?>

</div>

<div id="form1" style="margin: -17 3 0; background: black; color: white; width: 500; height: 97;">

<form method="post" action="chat.php">

<input type=hidden value="<?php

if ($strSubject!='') {
echo strip_tags($strSubject);

}else if ($strSubject==''){
echo $strUserName;
}

?>" name="username">

<input type=hidden value="<?php

if ($strMycolor!='') {
echo $strMycolor;
}else if ($strMycolor==''){
echo $strUserColor;
}

?>" name="usercolor">



<p>Message: <input name="message" type="text" maxlength="200" size="60">

Некорректно работает чат на php

Добавлено: 2016-02-10, 9:27:16
lissyara
для оформления кода есть кнопочка

Код: Выделить всё

 вообще-то ...
 
 и, разумеется, мне надо снова телепатически угадать какая именно ошибка у вас сейчас ?

Некорректно работает чат на php

Добавлено: 2016-02-10, 16:05:26
Леон

Код: Выделить всё

<?php

$strSubject=$_POST['subject']; // используется один раз при переходе со страницы с вводом имени
$strMycolor=$_POST['webcolors']; // используется один раз при переходе со страницы с вводом имени

if ($strSubject!='') {

$f=fopen('chat_logs.txt','a');
fwrite($f, '&nbsp;'.'В чат заходит '.'<b>'.'<span style="color:'.$strMycolor.'";>'.strip_tags($strSubject).'</span>'.'</b>'.' '.date('H').':'.date('i').' '.date('d').'.'.date('m').'.'.date('y').'<br>');

fclose($f);
}

$strMessage=$_POST['message']; // Используется при отправке сообщений постоянно. Страница переходит сама на себя.
$strUserName=$_POST['username']; // Используется при отправке сообщений постоянно. Страница переходит сама на себя.
$strUserColor=$_POST['usercolor']; // Используется при отправке сообщений постоянно. Страница переходит сама на себя.

if ($strMessage!='') {

$f=fopen('chat_logs.txt','a');
fwrite($f, '<span style="color:'.$strUserColor.'";>'.'<b>'.'&nbsp;'.$strUserName.'</b>'.' подумал и сказал: '.'<i>'.strip_tags($strMessage).'</i>'.'</span>'.' '.'&nbsp; &nbsp;'.date('H').':'.date('i').' '.date('d').'.'.date('m').'.'.date('y').'<br>');

fclose($f);

}

$f=fopen('chat_logs.txt','r');
while(!feof($f)) {
echo fgets($f);
}
fclose($f);

if ($strSubject=='' && $strUserName=='') {

header("Location: index.php"); //То самое перенаправление, по поводу которого предупреждение

}

?>

</div>

<div id="form1" style="margin: -17 3 0; background: black; color: white; width: 500; height: 97;">

<form method="post" action="chat.php">

<input type=hidden value="<?php

if ($strSubject!='') {
echo strip_tags($strSubject);

}else if ($strSubject==''){
echo $strUserName;
}

?>" name="username">

<input type=hidden value="<?php

if ($strMycolor!='') {
echo $strMycolor;
}else if ($strMycolor==''){
echo $strUserColor;
}

?>" name="usercolor">



<p>Message: <input name="message" type="text" maxlength="200" size="60">
________________________________

Ошибки всё те же. Выдаёт предупреждения по поводу тех $strVariable=$_POST['id'] , которые не получили значений. Как оставить их на странице корректно, чтобы не выводились предупреждения (не экранировать знаком @, а именно исправить) ? Заголовок не работает именно из-за этого. Вывод предупреждения в исходный код страницы и вызывает оповещение "заголовки уже отправлены". Вот в этом и есть суть проблем, но как исправить - не знаю. Нигде не нашёл качественной информации.

Некорректно работает чат на php

Добавлено: 2016-02-10, 17:28:46
lissyara

Код: Выделить всё

$strSubject = IsSet($_POST['subject'])?$_POST['subject']:'';
т.е. если задана - присваиваем её значение, если нет - пустое

Некорректно работает чат на php

Добавлено: 2016-02-10, 19:18:58
Леон
Спасибо за помощь. Теперь всё работает. У меня ещё пара вопросов осталась. Разрешено ли использовать скрипты обращения к серверу, чтобы страница или её часть обновлялась автоматически через определённый интервал времени? Знаю, что на некоторых ресурсах это запрещено и заканчивается блокировкой аккаунта.

И последний вопрос по коду:

Код: Выделить всё

<script src="http://yastatic.net/jquery/1.6.4/jquery.min.js"></script>




  <style>
   
   BODY {
 margin: 0;
 background-color: black;
 height: 900;
}
   

    </style>



        
       <script>

        function scrollMessages() {
                              
          id1.scrollTo(0,99999);             
          $("#id1").scrollBy(0,99999);

         


        }
        </script>  
Скроллинг работает в фаерфокс, но не работает в опере и в хроме. Пытался решить проблему кроссбраузерности через jquery (чем и вызвано дублирование кода), но ничего не вышло. Содержимое div по-прежнему прокручивается до конца при каких-либо действиях на страницы только в фаерфокс.

Некорректно работает чат на php

Добавлено: 2016-02-10, 19:24:44
lissyara
обновлять можно, но надо понимать что если у вас будет сотня народу с обновлением раз в хотя бы 5-10 секунд - сервер залочит ваш сайт.
слишом много однотипных запросов
подобное, лучше на VPS держать
--
по скроллингу не подскажу. со стилями/js у самого всегда проблемы =))

Некорректно работает чат на php

Добавлено: 2016-02-10, 23:56:08
Леон
Думаю, поставлю секунд 30, а то и ещё больше. Народу будет человек 10, если очень повезёт.

Спасибо Вам за помощь. Главная проблема решена + я узнал много нового.

Некорректно работает чат на php

Добавлено: 2016-02-12, 1:32:14
Леон
Со скроллингом разобрался. Оказалось, что строчка, работающая для фаерфокс, почему-то блокирует то, что работает в любом браузере.

В итоге всё оказалось просто:

Код: Выделить всё

 function scrollMessages() {
                              
                     
          $("#id1").scrollTop(10000);
А вот обновление div корректно сделать не смог. Вместо того, чтобы обновлять самого себя, див с текстом начинает загружать всю страницу сайта на месте текста.

Код: Выделить всё

setInterval(function() {
$("#id1").load("http://h93256.s05.test-hf.su/chat.php/#id1");
}, 3000);
Как исправить?

Некорректно работает чат на php

Добавлено: 2016-02-12, 9:09:41
lissyara
lissyara писал(а): по скроллингу не подскажу. со стилями/js у самого всегда проблемы =))
а вообще, у вас и стоит переагрузка всего URL, как я понимаю