Autor | Zpráva | ||
---|---|---|---|
perwin Profil |
#1 · Zasláno: 12. 12. 2010, 19:12:28 · Upravil/a: perwin
LosFilipos:
Takto to nefunguje už vůbec a vypíše se jenom ten refresh. |
||
LosFilipos Profil |
#2 · Zasláno: 12. 12. 2010, 19:16:40
perwin:
„vypíše se ten refresh“ Jak se vypíše? To nechápu. Hoď sem odkaz na ukázku... |
||
perwin Profil |
#3 · Zasláno: 12. 12. 2010, 19:27:46 · Upravil/a: perwin
LosFilipos:
Vypíše se jenom ten JS s reloadem, ikdyž je moje id v tabulce activechats, nevypíše se formulář. Nefunguje to.... |
||
LosFilipos Profil |
#4 · Zasláno: 12. 12. 2010, 19:30:08
perwin:
„Vypíše se jenom ten JS s reloadem, ikdyž je moje id v tabulce activechats, nevypíše se formulář.“ To ovšem znamená, že to funguje, jelikož je jakoby tvoje okno chtau otevřené. Napiš do stránky session_destroy() reloadni to, a pak to odstraň... Uvidíš, že ti bude fungovat... |
||
perwin Profil |
#5 · Zasláno: 12. 12. 2010, 19:34:11
LosFilipos:
„Napiš do stránky session_destroy() reloadni to, a pak to odstraň...“ Co? Nestačí se jenom odhlásit? Protože se i při tom ničí session. |
||
LosFilipos Profil |
#6 · Zasláno: 12. 12. 2010, 19:38:36
Pokud se ti u odlhašování ničí session kompletně, tak ano... Co takhle to zkusit místo dotazů do diskuse?
|
||
perwin Profil |
#7 · Zasláno: 12. 12. 2010, 19:41:33
LosFilipos:
Ano, zkusil jsem to a funguje to... ale: 1) Nefunguje mi to v IE - tam se to nevím proč stejně klonuje, v Chrome ne 2) Když v Chrome reloadnu stránku ručně, tak se mi potom už znovu ten formulář nezobrazí - a vlastně i při přechodu mezi stránkami - v IE se to sice nestane, ale tam je zase problém č. 1 |
||
LosFilipos Profil |
#8 · Zasláno: 12. 12. 2010, 19:49:33
perwin:
„1) Nefunguje mi to v IE - tam se to nevím proč stejně klonuje, v Chrome ne“ Nástroje pro vývojáře v IE 8 -> ladění scriptů -> zjistit chybu „2) Když v Chrome reloadnu stránku ručně, tak se mi potom už znovu ten formulář nezobrazí - a vlastně i při přechodu mezi stránkami - v IE se to sice nestane, ale tam je zase problém č. 1“ Tak to budeš muset na stránky přidat podmínku if($_SESSION["chaty"]...) {vypiš okno chatu}, nebo je tu druhé řešení, který vlastně řeší i problém č. 1 - Vykašlat se na $_SESSION a při každém vypsání formuláře nejdříve odstranit vnitřek divu, do kterého se následně vypisuje formulář... (innerHTML = '') nebo tak něco... |
||
LosFilipos Profil |
#9 · Zasláno: 12. 12. 2010, 20:05:33 · Upravil/a: LosFilipos
perwin:
Na začátek toho javascriptu můžeš dát třeba toto: var div1 = window.parent.document.getElementById('hlavni'); if(div1) { div1.innerHTML = ''; } else { div1 = window.parent.document.createElement('DIV'); div1.id = 'hlavni' } |
||
perwin Profil |
#10 · Zasláno: 12. 12. 2010, 20:05:51
LosFilipos:
„Nástroje pro vývojáře v IE 8 -> ladění scriptů -> zjistit chybu“ Je jistá chyba v souboru engine.js řádek 85 znak 17 - Byl očekáván objekt „Vykašlat se na $_SESSION a při každém vypsání formuláře nejdříve odstranit vnitřek divu, do kterého se následně vypisuje formulář“ Nemáš něco přesnějšího? To mám překopat celý script? - že tam nebude $_SESSION a createElement? |
||
LosFilipos Profil |
#11 · Zasláno: 12. 12. 2010, 20:07:15
|
||
perwin Profil |
#12 · Zasláno: 12. 12. 2010, 20:13:03
LosFilipos:
var div1 = window.parent.document.getElementById('hlavni'); if(div1) { div1.innerHTML = 'co mám dát sem?'; } else { div1 = window.parent.document.createElement('DIV'); div1.id = 'hlavni' - tohle je id jako je <div id="hlavni"> ? } |
||
LosFilipos Profil |
#13 · Zasláno: 12. 12. 2010, 20:14:23 · Upravil/a: LosFilipos
perwin:
„co mám dát sem?“ Nic... Chceš přece smazat vnitřek toho divu, aby se ten formulář nekopíroval dál, ne? „tohle je id jako je <div id="hlavni"> ?“ Ano... |
||
perwin Profil |
#14 · Zasláno: 12. 12. 2010, 20:18:44
LosFilipos:
Takže mám script <script type='text/javascript'> var div1 = window.parent.document.createElement('DIV'); div1.setAttribute('style', 'position: absolute; top: 50px; left: 5px; background-color: red; width: 400px; height: 100px;'); var form1 = window.parent.document.createElement('FORM'); form1.setAttribute('action', 'javascript:request(\'".$_SESSION['login']."\'); javascript:erase()'); form1.setAttribute('method', 'post'); form1.setAttribute('name', 'forml'); var textarea1 = window.parent.document.createElement('TEXTAREA'); textarea1.setAttribute('name', 'text'); textarea1.setAttribute('cols', '40'); textarea1.setAttribute('rows', '3'); var input1 = window.parent.document.createElement('INPUT'); input1.setAttribute('type', 'submit'); input1.setAttribute('value', 'Odeslat příspěvek'); input1.onclick = function(){ if(document.forms.forml.text.value=='') return false; }; var div2 = window.parent.document.createElement('DIV'); div2.setAttribute('id', 'm'); form1.appendChild(textarea1); form1.appendChild(input1); div1.appendChild(form1); div1.appendChild(div2); window.parent.document.body.appendChild(div1); </script> upravit na: var div1 = window.parent.document.getElementById('hlavni'); if(div1) { div1.innerHTML = ''; } else { div1 = window.parent.document.createElement('DIV'); div1.id = 'hlavni'; div1.setAttribute('style', 'position: absolute; top: 50px; left: 5px; background-color: red; width: 400px; height: 100px;'); var form1 = window.parent.document.createElement('FORM'); form1.setAttribute('action', 'javascript:request(\'".$_SESSION['login']."\'); javascript:erase()'); form1.setAttribute('method', 'post'); form1.setAttribute('name', 'forml'); var textarea1 = window.parent.document.createElement('TEXTAREA'); textarea1.setAttribute('name', 'text'); textarea1.setAttribute('cols', '40'); textarea1.setAttribute('rows', '3'); var input1 = window.parent.document.createElement('INPUT'); input1.setAttribute('type', 'submit'); input1.setAttribute('value', 'Odeslat příspěvek'); input1.onclick = function(){ if(document.forms.forml.text.value=='') return false; }; var div2 = window.parent.document.createElement('DIV'); div2.setAttribute('id', 'm'); form1.appendChild(textarea1); form1.appendChild(input1); div1.appendChild(form1); div1.appendChild(div2); window.parent.document.body.appendChild(div1); } ? |
||
LosFilipos Profil |
#15 · Zasláno: 12. 12. 2010, 20:21:53
perwin:
Tak to může být i takto, v tom případě... var div1 = window.parent.document.getElementById('hlavni'); if(!div1) { div1 = window.parent.document.createElement('DIV'); div1.id = 'hlavni'; div1.setAttribute('style', 'position: absolute; top: 50px; left: 5px; background-color: red; width: 400px; height: 100px;'); var form1 = window.parent.document.createElement('FORM'); form1.setAttribute('action', 'javascript:request(\'".$_SESSION['login']."\'); javascript:erase()'); form1.setAttribute('method', 'post'); form1.setAttribute('name', 'forml'); var textarea1 = window.parent.document.createElement('TEXTAREA'); textarea1.setAttribute('name', 'text'); textarea1.setAttribute('cols', '40'); textarea1.setAttribute('rows', '3'); var input1 = window.parent.document.createElement('INPUT'); input1.setAttribute('type', 'submit'); input1.setAttribute('value', 'Odeslat příspěvek'); input1.onclick = function(){ if(document.forms.forml.text.value=='') return false; }; var div2 = window.parent.document.createElement('DIV'); div2.setAttribute('id', 'm'); form1.appendChild(textarea1); form1.appendChild(input1); div1.appendChild(form1); div1.appendChild(div2); window.parent.document.body.appendChild(div1); } |
||
perwin Profil |
#16 · Zasláno: 12. 12. 2010, 20:29:47 · Upravil/a: perwin
LosFilipos:
Když jsem upravil script takto: <?php session_start(); require "db.php"; $query = mysql_query("SELECT * FROM `activechats`"); while($result = mysql_fetch_array($query)) { if($result["id_uzivatele"] == $_SESSION["login"]) { if(!isset( $_SESSION[$result["chaty"]["id_chatu"]])) { echo " <script type='text/javascript'> var div1 = window.parent.document.getElementById('hlavni'); if(!div1) { div1 = window.parent.document.createElement('DIV'); div1.id = 'hlavni'; div1.setAttribute('style', 'position: absolute; top: 50px; left: 5px; background-color: red; width: 400px; height: 100px;'); var form1 = window.parent.document.createElement('FORM'); form1.setAttribute('action', 'javascript:request(\'".$_SESSION['login']."\'); javascript:erase()'); form1.setAttribute('method', 'post'); form1.setAttribute('name', 'forml'); var textarea1 = window.parent.document.createElement('TEXTAREA'); textarea1.setAttribute('name', 'text'); textarea1.setAttribute('cols', '40'); textarea1.setAttribute('rows', '3'); var input1 = window.parent.document.createElement('INPUT'); input1.setAttribute('type', 'submit'); input1.setAttribute('value', 'Odeslat příspěvek'); input1.onclick = function(){ if(document.forms.forml.text.value=='') return false; }; var div2 = window.parent.document.createElement('DIV'); div2.setAttribute('id', 'm'); form1.appendChild(textarea1); form1.appendChild(input1); div1.appendChild(form1); div1.appendChild(div2); window.parent.document.body.appendChild(div1); } </script> "; $_SESSION[$result["chaty"]["id_chatu"]] = 'true'; } } elseif($result["id_kamarada"] == $_SESSION["login"]) { if(!isset( $_SESSION[$result["chaty"]["id_chatu"]])) { echo " <script type='text/javascript'> var div1 = window.parent.document.getElementById('hlavni'); if(!div1) { div1 = window.parent.document.createElement('DIV'); div1.id = 'hlavni'; div1.setAttribute('style', 'position: absolute; top: 50px; left: 5px; background-color: red; width: 400px; height: 100px;'); var form1 = window.parent.document.createElement('FORM'); form1.setAttribute('action', 'javascript:request(\'".$_SESSION['login']."\'); javascript:erase()'); form1.setAttribute('method', 'post'); form1.setAttribute('name', 'forml'); var textarea1 = window.parent.document.createElement('TEXTAREA'); textarea1.setAttribute('name', 'text'); textarea1.setAttribute('cols', '40'); textarea1.setAttribute('rows', '3'); var input1 = window.parent.document.createElement('INPUT'); input1.setAttribute('type', 'submit'); input1.setAttribute('value', 'Odeslat příspěvek'); input1.onclick = function(){ if(document.forms.forml.text.value=='') return false; }; var div2 = window.parent.document.createElement('DIV'); div2.setAttribute('id', 'm'); form1.appendChild(textarea1); form1.appendChild(input1); div1.appendChild(form1); div1.appendChild(div2); window.parent.document.body.appendChild(div1); } </script> "; $_SESSION["chaty"][$result["id_chatu"]] = 'true'; } } } echo '<script type="text/javascript">window.setTimeout(function() {location.reload();},5000);</script>'; ?> Ale je tu problém, že v IE si můžu volně přepínat stránky a chat zůstane ve stejným stavu, ale v Chrome to nefunguje - chat se zobrazí jenom při jednom reloadu trychat.php, jakmile přepnu stránku tak chat zmizí a už se neobjeví. A taky je tam problém, který podle mě souvisí s tím předchozím... v Chrome nějak nefunguje ten relaod, protože když v IE začnu chat do Chromu, v Chromu se nic nezobrazí a stejně tak se to nezobrazí při přechodu ze stránky na jinou, v IE to ale funguje. |
||
LosFilipos Profil |
#17 · Zasláno: 12. 12. 2010, 20:41:29
perwin:
„ale přestal fungovat v Chrome“ Chrome -> nástroje -> nástroje pro vývojáře -> zjistit chybu... |
||
LosFilipos Profil |
#18 · Zasláno: 12. 12. 2010, 20:42:48
perwin:
Ale nevidím důvod, proč by to nemělo fungovat... |
||
LosFilipos Profil |
#19 · Zasláno: 12. 12. 2010, 20:44:31
perwin:
Vidím... Odstraň $_SESSION["chaty"]... všechny 4... |
||
perwin Profil |
#20 · Zasláno: 12. 12. 2010, 20:52:49
LosFilipos:
Super, tak toto by bylo vyřešeno a díky moc za rady. Poraď mi ještě prosím jak udělat ty zprávy realtime? |
||
perwin Profil |
#21 · Zasláno: 12. 12. 2010, 21:06:48 · Upravil/a: perwin
LosFilipos:
Soubor run.php: <?php session_start(); require('db.php'); $nick = $_SESSION["login"]; $text = htmlspecialchars($_POST["text"]); $data = mysql_query("SELECT id_chatu FROM `activechats`"); $Vysledek = mysql_fetch_array($data); if($text!="") { $prevodni_tabulka = Array( ':-D'=>'<img src="http://web.cz/smiles/1.gif">', ':-P'=>'<img src="http://web.cz/smiles/2.gif">', ':-S'=>'<img src="http://web.cz/smiles/3.gif">', ':-)'=>'<img src="http://web.cz/smiles/4.gif">', ':-C'=>'<img src="http://web.cz/smiles/5.gif">', ':-O'=>'<img src="http://web.cz/smiles/6.gif">', ':-U'=>'<img src="http://web.cz/smiles/7.gif">', ':-W'=>'<img src="http://web.cz/smiles/8.gif">', ':-('=>'<img src="http://web.cz/smiles/9.gif">', ':-A'=>'<img src="http://web.cz/smiles/10.gif">' ); $text = str_replace(array_keys($prevodni_tabulka), array_values($prevodni_tabulka), $text); mysql_query("INSERT INTO zpravy (id_autora,id_chatu,text_zpravy,cas_zpravy) VALUES ('$nick', '$Vysledek[id_chatu]', '$text', NOW())") or die (mysql_error()); } echo '<login style="display:none;">'.$nick.'</login>'; $query = mysql_query("SELECT * FROM `zpravy` WHERE id_chatu = '$Vysledek[id_chatu]' ORDER BY `id_zpravy` DESC"); echo '<h6>Diskuse...</h6>'; while($result = mysql_fetch_array($query)) { if($result["id_autora"]==$nick) { echo '<i><b>'.$result["id_autora"].'</b></i>: '.$result["text_zpravy"].'<br />'; } else { echo '<b>'.$result["id_autora"].'</b>: '.$result["text_zpravy"].'<br />'; } } ?> Tam se to vypisuje do realtime ne? Prosím poraď. Díky |
||
LosFilipos Profil |
#22 · Zasláno: 12. 12. 2010, 21:20:22
perwin:
Realtim se to vypisuje tak, že se ajaxem / javascriptem volá tento skript každou jednu sekundu. Jedná se o funkci reload() v původním engine.js. Pořádně si to prostuduj. Dneska už na to nemám čas, pokračování možná zítra... |
||
perwin Profil |
#23 · Zasláno: 13. 12. 2010, 14:25:50
LosFilipos:
A jak mám volat funkci reload()? Vím, že se dají funkce volat přímo z elementu jako onlick="funkce" nebo onload="funkce", ale ani jedno se nedá použít v tom divu se zprávami - dal bych tam onload, ale to funguje jenom u img a body. Poraď prosím. Díky |
||
LosFilipos Profil |
#24 · Zasláno: 13. 12. 2010, 14:29:12
perwin:
„A jak mám volat funkci reload()?“ window.setInterval(function() {reload();},1000); |
||
perwin Profil |
#25 · Zasláno: 13. 12. 2010, 14:31:13
LosFilipos:
Nojo ale co mám dát do toho divu aby se to týkalo jenom jeho a né celé stránky? Něco jako id="reload()"? |
||
perwin Profil |
#26 · Zasláno: 13. 12. 2010, 14:34:22
LosFilipos:
Nebo: document.getElementById('id_divu').setInterval(function() {reload();},1000); ? |
||
LosFilipos Profil |
#27 · Zasláno: 13. 12. 2010, 14:38:40
perwin:
Nic, ta funkce reload nezpůsobí refresh celé stránky (To není location.reload()) Moje funkce reload (ze souboru engine.js ř. 27) způsobí jen to, že se refreshne obsah divu s id="m"... Pořádně si prohlédni zdroják... |
||
Chamurappi Profil |
#28 · Zasláno: 13. 12. 2010, 14:41:49
Chtěl bych důrazně upozornit, že tady není chat. Pokud chcete svoje příspěvky krátce po odeslání doplnit, používejte funkci „Změnit“.
Jestli jsem správně pochopil tohle dlouhé vlákno, tak perwin pokaždé sesmolí nějakou evidentní pitomost (jako teď ve [#26]), kterou by nikdy nemohl napsat, kdyby si nastudoval základy, a LosFilipos mu v ní pak hledá chybu. Fascinující. Reaguji na perwina: „div1.setAttribute('style', 'position: absolute […]“ Možná, že když si to přečteš potřetí, tak to bude mít nějaký účinek… |
||
perwin Profil |
#29 · Zasláno: 13. 12. 2010, 14:42:31
LosFilipos:
Mám skoro stejný (okopírovaný) soubor engine.js, kde je ta funkce reload, a ikdyž mám div s id="m", tak se nereloaduje. Dík |
||
perwin Profil |
#30 · Zasláno: 13. 12. 2010, 14:56:02 · Upravil/a: perwin
Chamurappi:
Chtěl bych jenom podotknout, že „div1.setAttribute('style', 'position: absolute […]“ mi funguje jak v IE, tak v Netscape prohlížečích. „tak perwin pokaždé sesmolí nějakou evidentní pitomost“ Jak mám vědět, že je to 'evidentí pitomost'? Jsem si jistý, že když mě někdo opraví, tu samou chybu už neudělám a nebudu s ní nadále otravovat. |
||
Téma pokračuje na další straně.
|
0