Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы с чатом, на php 
:(
    Опции темы
ST_Falcon
Дата 3.3.2005, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 14.11.2003
Где: Львов

Репутация: нет
Всего: 1



вот он http://zmiy2.iswith.us/kiev.php
состоит весь чат с одной функции. при вызове функции на локации я передаю ей название локации и потом при выводе сообщений фильтрую сообщения по этому названию....
в форме есть скрытое поле newpost. если при обновлении страницы эта переменная истинна то текст мессаги добавляется в базу. проблема в том что когда я просто хочу обновить страницу, то все данные формы передаются по новой и сообщения дублируются... как этого можно избежать? может можно сразу после вывода сообщений очищать масив $_POST?

зы. и второй маленький вопрос. не совсем по пыхпыху... как при наведении курсора на ячейку "приподнимать" ее, тоесть менять цвет ячейки и двух границ (нижней и правой)?
PM MAIL ICQ   Вверх
korob2001
Дата 3.3.2005, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 1
Всего: 61



А я получаю такую ошибку при вооде сообщения:

INSERT INTO comment (section, usid, usname, message, postdate)
VALUES('village', ,' ', 'Ïðèâåò', now())
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '' ', 'Привет', now())' at line 2


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
IZ@TOP
Дата 3.3.2005, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



Ага, по моему usid должен быть чем то заполнен smile


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
ST_Falcon
Дата 3.3.2005, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 14.11.2003
Где: Львов

Репутация: нет
Всего: 1



korob2001
а. ну это... сначало зарегестрироваться нужно. потому что данные все с сесии берутся. это я пока что всех пускаю smile потом проверку поставлю.
PM MAIL ICQ   Вверх
IZ@TOP
Дата 3.3.2005, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



ST_Falcon, ну вот он ошибку и пишет. Сделай аккаунт гостя и пускай гостей по нему.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
ST_Falcon
Дата 3.3.2005, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 14.11.2003
Где: Львов

Репутация: нет
Всего: 1



IZ@TOPтоесть акаунт гостя? типа значения по дефлоту подставить?

Это сообщение отредактировал(а) ST_Falcon - 3.3.2005, 23:25
PM MAIL ICQ   Вверх
korob2001
Дата 4.3.2005, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 1
Всего: 61



Цитата

IZ@TOPтоесть акаунт гостя? типа значения по дефлоту подставить?

Да, если юзер не авторизован.
Цитата

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

Этот вопрос задай в разделе JavaScript или DHTML. А вообще не понятно что именно ты хочешь приподнять?
Вот по такому приципу можно менять цвет ячейки и отлавливать в какой из них произошло событие onClick:
Код

<html>
 <head>
   <title>Test</title>
     <script language="JavaScript" defer type="text/javascript">
      <!--//
        function chCol( check ) {
           var thisTg, parTg;
           thisTg  = window.event.srcElement.tagName
           if ( thisTg == "TD" ) {
                document.all( window.event.srcElement.sourceIndex).bgColor = "#999999";
           }
        }

        function chBack( check ) {
           var thisTg, parTg;
           thisTg  = window.event.srcElement.tagName
           if ( thisTg == "TD" ) {
                document.all( window.event.srcElement.sourceIndex).bgColor = "#555555";
           }
        }

        function showMess( check ) {
         window.alert("Вы нажали на ячейку с номером " + check );
        }

       //-->
     </script>
 </head>
 <body>
   <table width="50%" border="1" bgcolor='#555555' cellpadding='10'>
     <?php
       $td =  "";
       echo "<tr align='center'>\n";
       for ( $i = 1; $i <= 10; $i++ ) {
           if ( $i % 2 ) {
             echo "</tr><tr align='center'>\n";
           }
           $td .= "<td id='td" . $i . "' width='50%' onMouseOver='chCol(";
           $td .= $i . ")' onMouseOut='chBack(" . $i . ")' ";
           $td .= "onClick='showMess(" . $i . ")'>";
           $td .= "<div id='bl" . $i . "'>Ячейка</div> ";
           $td .= $i . "</td>\n";
           echo  $td;
           $td = '';
       }
     ?>
   </table>
 </body>
</html>

Повторяю это только принцип, я не особо силён в JavaScript и DHTML. Это всё на что меня хватило. Если хочешь чего-то более, то я уже сказал куда нужно писать.
Цитата

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

Вообще-то нужно делать перенаправление, можно ещё вводимую строку сравнивать с последней записью в базе или файле, если они совпали, значит юзер перезагрузил страницу и сообщение игнорируется, либо вывести сообщение о том, что не стоит повторяться так резко.
Хотя может это только я так думаю, просто я PHP изучаю меньше недели.

Удачи.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Opik
Дата 4.3.2005, 01:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 24
Всего: 55



по поводу дублирования... делай
Header("Location: url");
после добавления в базу, где url - url чата.
PM MAIL Skype   Вверх
ST_Falcon
Дата 4.3.2005, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 14.11.2003
Где: Львов

Репутация: нет
Всего: 1



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

PM MAIL ICQ   Вверх
ST_Falcon
Дата 5.3.2005, 01:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 14.11.2003
Где: Львов

Репутация: нет
Всего: 1



вот так сделал:

Код

// чат
function viewchat($section, $talkline="`6говорит")
{
 global $session, $HTTP_POST_VARS;
 $sql = "Select * from comment where section = '$section'";
 $result = db_query($sql) or (die($sql));
 $num_rows = db_num_rows($result);

 // выводим сообщения
 for ($i=0; $i < $num_rows; $i++)
   {
     $comment = db_fetch_assoc($result);
     output("`^ <img src='images/new_online.gif'> $comment[usname] <a href=info.php?usid=$comment[usid]><img src='images/info.gif' class=noborder></a> $talkline: `# ".$comment[message].'`n');
   }
 // строка "сказать"
 if (!$session[user][speakban])
 {
   output("`@<br>
   <form action='chat.php' method='POST'>
     cказать: <br>
     <input name='message' accesskey='m' size='50'>
     <input type='submit' class='button' value='сказать'>
     <input name='section' type='hidden'  value='$section'>
   </form>
   <script language='JavaScript'>
   <!--
   top.document.forms[0].message.focus()
   //-->
   </script>
   ");
 }
 output("<a href=$SCRIPT_NAME>обновить</a>");
}

это функция которую добавляем на локацию. вызываем вот так viewchat('village');

и листинг файла chat.php
Код

<?
// 04.03.2005

require_once("common.inc");

$smile = array(
        ':D'=>'sm_01.gif',
        ':)'=>'sm_02.gif',
        ':('=>'sm_03.gif',
        ':eek:'=>'sm_04.gif',
        ':shock:'=>'sm_05.gif',
        ':?'=>'sm_06.gif',
        '8-)'=>'sm_07.gif',
        ':lol:'=>'sm_08.gif',
        ':razz:'=>'sm_09.gif',
        ':oops:'=>'sm_10.gif',
        ':cry:'=>'sm_11.gif',
        ':evil:'=>'sm_12.gif',
        ';)'=>'sm_13.gif');

// создаем коротние имена переменных
$message = $HTTP_POST_VARS['message'];
$message = htmlspecialchars($message, ENT_QUOTES);
// добавляем смайлики
foreach($smile as $k=>$v)
{
 $message = str_replace($k, "<img src=images/smail/$v>", $message);
}

$location = $session[user][restorepage];
$usid = $session[user][usid];
$usname = $session[user][title].' '.$session[user][name];

// формируем запрос к БД
$sql = "INSERT INTO comment (section, usid, usname, message, postdate)
       VALUES('$section', $usid,' $usname', '$message', now())";
$result = db_query($sql) or (die($sql));
header("Location: $location");
exit();

?>

Добавлено @ 01:09
функция добавки смайликов меня смущает... во первых в базу добавляется жесткий путь к картинке, а это не хорошо по двум причинам:
1. под мессагу отводится только 255 символов. и теги имаджа их хавают.
2. путь к картинке получается жесткий. что неудобно.
во вторых сколько смайлов столько раз работает цыкл...

слушаю ваши ИМХИки smile
PM MAIL ICQ   Вверх
korob2001
Дата 5.3.2005, 03:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 1
Всего: 61



Цитата

1. под мессагу отводится только 255 символов. и теги имаджа их хавают.

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


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
IZ@TOP
Дата 5.3.2005, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



Во первых:
Код

// ...
foreach($smile as $k=>$v)
{
$message = str_replace($k, "<img src=images/smail/$v>", $message);
}

Заменяем на:

Код

$smile = array(
   ';)' => '<img src="%smilePath%/smile01.gif">',
   // ...
)

$message = str_replace(array_keys($smile), $smile, $message);

При генерации странички ессно надо будет заменить в документе %smilePath% на путь к смайлам. В этом случае у тебя не будет конкретной привязки к какому-то пути.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Opik
Дата 5.3.2005, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 24
Всего: 55



IZ@TOP
дык, ему надо через JavaScript менять смайлы... что бы не:
Цитата
1. под мессагу отводится только 255 символов. и теги имаджа их хавают.

PM MAIL Skype   Вверх
IZ@TOP
Дата 5.3.2005, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



Opr, можно и на выводе smile Но это загрузит сервак по полной если большая посещаемость smile


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
ST_Falcon
Дата 5.3.2005, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 14.11.2003
Где: Львов

Репутация: нет
Всего: 1



IZ@TOP
сенкс smile.
наверное лучше пожертвую местом под мессаги чем скоростью работы сервака... один раз текст обработал и порядок smile.

тут вопрос возник. как можно '/ ' экранировать? а то когда пощу два подряд '//' то получается некоретный запрос...
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1040 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.