Autor Zpráva
niceworld
Profil *
Ahoj mam dlouhodobý problém stáhl jsem ajax chat ale bohužel mi furt blbne čeština nepotřebné věci jsem odstranil. ale už si nevím rady děkuji za jakoukoliv pomoc.

chat form
<?include("config.php");?>
<script type="text/javascript" src="chatclient.js"></script>
<script language="JavaScript">
<!--
function setsmiley(what){
	tmp=document.getElementById("mytext");
    tmp.value = tmp.value+" "+what+" ";
    tmp.focus();
}
//-->
</script>
<table><tr><td><div id="chatpane"><div id="chatbuffer"></div></div></td></tr></table>
<table><tr><td><input style="width: 190px;" id="mytext" name="mytext" type="text" onFocus="textFocus=true" onBlur="textFocus=false"></td></tr></table> 
<script type="text/javascript">startChat();</script>

chatclient.js
<script>
  	var isFirefox;
		var isIE;
		var timeout;
		var pingtimeout;
		var textFocus   = true;
		var starsadded  = false;
		var timedout    = 0;
		var requestsent = 0;
		var chatsent	= 0;
		var pingRate	= 1000 * 30;
		var refreshRate = 1000 * 2;
		
		var t = 0;
		var update_period = 3;
		var throttle_back = 60;
		var lastpost = 0;
		
		function getAjax() {
          var xmlhttp;
          
          if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
            try {
              xmlhttp = new XMLHttpRequest();
            } catch (e) {
              xmlhttp = false;
            }
		  }
          return xmlhttp;
        }

		function sniff() {
		
			var ff = "Netscape";
			var ie = "Microsoft Internet Explorer";
			
			isFirefox = ( navigator.appName == ff );
			isIE = (navigator.appName == ie ); 
		}

		function captureReturn( event )
		{
			if( isIE ) {
			
				event = window.event;
			}
			if( event.keyCode == 13 ) {
				postText();
					
				if( isIE ) {
				
					event.returnValue = false;
					
				} else {
				
					event.preventDefault();
				
				}
			}
			
			charCount();
		}

		function scrollChatPane()
		{
			pane = document.getElementById( "chatpane" );
			
			while( pane.scrollTop < pane.scrollHeight - pane.offsetHeight )
			{
				pane.scrollTop = pane.scrollTop + 10;
			}
		}

		function showLoadScreen()
		{
			var loading = "<div style=\"text-align:center;\"><h4><img src=styles/loader.gif><br>Načítání chatu...</h4></div>";
			
			chat = document.getElementById( "chatbuffer" );
			
			chat.innerHTML = loading;
		}

		function setTimers()
		{
			timeout = window.setTimeout( "fetch()", refreshRate );
		}

		function fetch()
		{
			window.clearTimeout( timeout );
			fetchBufferText();
			if(t++ % update_period) { 
			  fetchUserList();
			}    
			
			if( t - lastpost > throttle_back ) {
			  refreshRate = 2000;
			  update_period = 2;
			} else {
			  refreshRate = 1000;
			  update_period = 3;
			}
			
			if( timedout != 1 ) { setTimers(); }
		}

		function fetchUserList()
		{		
	    fetchBufferText();				
		}
		
		function fetchBufferText()
		{

			url = 'buffertext.php';
			req = getAjax();
			
			req.onreadystatechange = function(){
			
				if( req.readyState == 4 && req.status == 200 ) {
				
					obj = document.getElementById( "chatbuffer" );
					obj.innerHTML = req.responseText;
					scrollChatPane();
				}
			}
			
			req.open( 'GET', url , true );
			req.send( null );
		}
		
		function postText()
		{
			chatbox = document.getElementById( "mytext" );
			chat = escape(chatbox.value);
			chatbox.value = '';
			if(chat.length == 0 ) {return; }

			url = 'posttext.php?t=' + chat ;
			
			req = getAjax();
			
			req.onreadystatechange = function(){
			
				if( req.readyState == 4 && req.status == 200 ) {
				
					fetch();
				}
			
			}
			
			req.open( 'GET', url, true );
			req.send( null );
			
			lastpost = t;
		}
		
		function startChat()
		{
			sniff();
			showLoadScreen();
			setTimers();

			
			if( isFirefox ) {
				mytext = document.getElementById( "mytext" );
			}
			mytext.focus();
			mytext.onkeypress = captureReturn;
		}
</script>

zápis
<?
include("config.php");
session_register("idowner");
$idonline2=$idowner;
$chattext=$_GET['t'];
$chat="chatperson";
$nametable="$chat$myid$idonline2";
$nametable2="$chat$idonline2$myid";
$sloupec1="owner";
$sloupec2="date";
$sloupec3="text";
$sloupec4="status";
$status="no";
$date=StrFTime("%d.%m.%Y %H:%M:%S", Time());
MySQL_Query("INSERT INTO $nametable($sloupec1,$sloupec2,$sloupec3,$sloupec4) VALUES('".$myid."','".$date."','".$chattext."','".$status."')");
MySQL_Query("INSERT INTO $nametable2($sloupec1,$sloupec2,$sloupec3,$sloupec4) VALUES('".$myid."','".$date."','".$chattext."','".$status."')");
$chatperson="chatperson_my";
$chatpersontable="$chatperson$idonline2";
$numzero="0";
$numtwo="2";
mysql_query("UPDATE $chatpersontable SET status = '$numtwo' WHERE status = '$numzero' and owner='$myid'");
?>
niceworld
Profil *
zápis potřebuji v utf-8
niceworld
Profil *
jo zápis je posttext.php
Witiko
Profil
niceworld:
Poslal jsi sem hodně nedůležitého balastu. :-) Potřeba je uvést v hlavičce HTML souboru:
<meta charset="utf-8">

A do php souboru přihodit před ostatní MySQL žádosti:
mysql_query("SET NAMES utf8");

Tak bude zajištěné, že prohlížeč bude text louskat pomocí algoritmu utf-8 a MySQL bude texty v daném kódování text předávat php scriptu.
niceworld
Profil *
mysql_query("SET NAMES utf8"); mam v configu
Darker
Profil
Witiko:
<meta charset="utf-8">
Záleží, zda je dokument v HTML5. Pokud není, patří tam klasicky
<meta http-equiv="content-type" content="text/html;charset=utf-8">


niceworld
A co soubor který posílá data z chatu?
header("Content-Type: text/plain; charset=utf-8");
niceworld
Profil *
mohlo zato chat = escape(chatbox.value);
niceworld
Profil *
na 135řádku v js
Witiko
Profil
Darker:
Záleží, zda je dokument v HTML5. Pokud není, patří tam klasicky
Ano i ne. Tady jde o to, že to tolik lidí psalo špatně, že prohlížeče začaly tento zkrácený zápis podporovat. Návrháři HTML5 zápis pouze vzali a standardizovali - snaží se totiž do HTML5 nacpat spoustu vizuálního cukříku (krátký !doctype, script tag nevyžadující type atribut atd.), nejspíš mimo jiné aby nalákali nováčky a zároveň odmazali část břímě na ramenou quirk módů. Pokud ti jde tedy o validátor, tak ten označí zkrácený zápis u HTML4 jako chybný. Nicméně co po stránce funkčnosti HTML5 jen standardizuje to, co prohlížeče již podporovaly, takže je to z dnešního hlediska jedno. Staré prohlížeče to podporují a nová specifikace to standardizuje.

niceworld:
mohlo zato chat = escape(chatbox.value);
Ano, taková funkce (alespoň v úseku, který jsi sem vložil) není definovaná. Nejspíš jsi chtěl použít globální funkci encodeURI? Pak mě ale udivuje, že vůbec něco fungovalo. Javascript měl po zavolání funkce postText() jako správný rebel vyhodit výjimku a odmítnout dále sloužit. Jen tak mimochodem máš v tom kódu řadu nedefinovaných proměnných.
_es
Profil
Witiko:
„mohlo zato chat = escape(chatbox.value);“
Ano, taková funkce (alespoň v úseku, který jsi sem vložil) není definovaná.
window.escape

niceworld:
Ak ide o obsah, ktorý sťahuješ cez XMLHttpRequest, teda súbory buffertext.php a posttext.php, tak pri takomto sťahovaní sú meta značky ignorované. Nastavenie kódovania musíš spraviť inak ako meta značkou.

V JS nemáš mnohé premenné definované - vytvárajú sa ti tak globálne vlastnosti - môže to robiť problémy.
Witiko
Profil
_es:
Zajímavé, nikdy jsem na ní nenarazil. Nejspíš to bude tím, že jde o deprecated verzi encodeURIComponent(), která nezvládá ne-ASCII znaky z dom ECMAScriptu1, takže pro to nebyl důvod.
peta
Profil
Witiko:
"nikdy jsem na ní nenarazil"
Zkus si nekdy precist jakpsatweb.cz
http://www.jakpsatweb.cz/javascript/zabudovane-funkce.html
http://www.jakpsatweb.cz/javascript/priklady/escape.html
http://www.jakpsatweb.cz/cestina.html

PS. Moderatori, muzete na tu stranku cestina, uplne dole, jak je nadpis Překódování pridat odkaz na
http://konieczny.be/unicode.html
Docela sikovna utilitka, obcas to pouzivam.
Witiko
Profil
peta:
Zkus si nekdy precist jakpsatweb.cz
Opět opakuji, že užitečné DOM metody znám. Problém je v tom, že encodeURIComponent() dělá to samé a lépe. :-)

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0