« 1 2 3 4 5 6 7 8 »
Autor Zpráva
LosFilipos
Profil
perwin:
To je právě další level, přidat ajax tak, aby se chat obnovoval bez reloadu stránky. To můžeš použít příklad, který jsem psal úplně na začátku.
perwin
Profil
LosFilipos:
AJAX: Tohle?:
<form method="POST" name="forml" action="javascript:request('jmeno'); javascript:erase()"> ... </form>

Tak místo toho 'jmeno' dam '$_SESSION[login]', ne?

Jak mám udělat, když já kliknu na toho, s kým si chci popovídat, aby se mu taky otevřelo to chatové okno?
LosFilipos
Profil
perwin:
Jj, ale nezapomeň na ten javascript, ten taky musí být někam vložen...
LosFilipos
Profil
perwin:
Jak mám udělat, když já kliknu na toho, s kým si chci popovídat, aby se mu taky otevřelo to chatové okno?
Přemýšlej, nebudu přece dělat všechno za tebe... Existuje spousta tutoriálů na ajax.

Musíš prostě zkontrolovat, zda je v tabulce aktivni_chaty jeho id, a zobrazit mu ten samy div s formulářem a výpisem zpráv... Zatím to funguje tak, že když klikneš na kamaráda, okno se zobrazí jen tobě, ale jemu by se zobrazilo až po reloadu stránky (F5). Ajax musí zařídít, to, aby se stránka nemusela reloadvat...
perwin
Profil
LosFilipos:
Nedodělaný soubor k diskuzi:
<!-- FORMULÁŘ -->
<form action="javascript:request('jmeno'); javascript:erase()" method='post'>
  <input type='hidden' name='sent' value=''/> 
    <!-- Jméno se vkládá automaticky, není ho tudíž potřeba psát -->
    <textarea name='zprava' wrap=physical cols=50 rows=7></textarea><br/>
    <input type='submit' name='send' value='Poslat zprávu'/>
</form>

<!-- ZPRACOVÁNÍ -->
<?php
ob_start(); 
session_start();              
  if(isset($_POST['sent'])){     
    $vlozil=trim($_POST['vlozil']);
    $datum=$_POST['datum'];
    $zprava=$_POST['zprava'];
    if($zprava=="" ){ 
      $backlink="web.php?page=chat&Alert=1";
    }else{             
      require "db.php";     
     $PocetStejnych=mysql_result(mysql_query("SELECT COUNT(*) FROM `uzivatele` WHERE `zprava`='$zprava' OR `vlozil`='$vlozil'"), 0);
      if($PocetStejnych!=0){   
        $backlink="web.php?page=chat&Alert=2";
      
      }else
      
        $VlozData=mysql_query("INSERT INTO zpravy (id_zpravy,id_autora,cas_zpravy,text_zpravy) VALUES (null,'$_SESSION[login]', NOW(), '$zprava')") or die (mysql_error());
       
		
        $backlink="web.php?page=chat";
      }

    }
  else{
    $backlink="web.php?page=chat";
  }

 header ("Location: $backlink");
ob_end_flush();

?>

<!-- ZOBRAZENÍ -->
Přes AJAX


Prosím poraď jak to mám upravit. Děkuji
Kcko
Profil
perwin:
Nezdá se Ti, že jsi dostal už těch informací a pomoci až moc? Pokud to sestrojit ani tak neumíš, tak si to nech udělat, je tu vlákno Práce a zakázky.
LosFilipos
Profil
Souhlasím s uživatelem Kcko.

perwin
Prostě zkoušej. Já jsem se taky všechno naučil metodou pokus / omyl a nikdy jsem nepotřeboval diskusi... To, co jsem ti napsal, je pro začátek více než dobré. Teď už je to na tobě...
perwin
Profil
Ahoj,
pořád jsem nepřišel na to jak to upravit, aby to fungovalo. Zde je script... nevím už, jak dál.
<script type="text/javascript" src="./engine.js"></script> <!-- tento soubor mám vlastně totožný s tvým -->
<!-- run.php mám také hodně podobný -->
<?php // script na posílání zpráv
if(isset($_SESSION["chaty"])) {
require('db.php'); // obsahuje připjení k databázi...

echo '<form method="POST" name="forml" action="javascript:request(\''.$_SESSION["login"].'\'); javascript:erase()">
<table>

Text příspěvku: <textarea name="text" cols="50" rows="3" /></textarea><br /><br />

<input type="submit" value="Odeslat příspěvek" onclick="if(document.forms.forml.text.value==\'\'){return false;}" />

</table>
<div onload="request();">

</div>
';
}
?>  

Děkuji
LosFilipos
Profil
perwin:
Za prvé, na tag div, se událost onload nevstahuje (viz www.jakpsatweb.cz/javascript/udalosti.html#prehled) a za druhé ti tam chybí div, do kterého se mají ty zprávy vypisovat:
<body onload="request();">    

<div id="m">
</div>

</body>
perwin
Profil
LosFilipos:
na tag div se událost onload nevstahuje
A kam mám to onload dát, do body sice můžu - nevadí, když to onload nebude přímo u toho scriptu?
Jinak v souboru run.php - jak je to SELECT * FROM 'chat' - tu tabulku chat mas jako mam ja tu zpravy? Díky
perwin
Profil
Zapsání id_chatu do tabulky zpravy z tabulky activechats jsem vyresil takto:
$data = mysql_query("SELECT id_chatu FROM `activechats` ");
$Vysledek = mysql_fetch_array($data);
mysql_query("INSERT INTO zpravy (id_autora,id_chatu,text_zpravy,cas_zpravy) VALUES ('$nick', '$Vysledek[id_chatu]', '$text', NOW())") or die (mysql_error());
perwin
Profil
1) Nefunguje mi, aby byl chat realtime - když vložím zprávu, musím zaktualizovat stranku.
2) Když s někým někým navážu chat, nezobrazí se mu to, jenom mě.
Prosím poraď. Dík
LosFilipos
Profil
perwin:
1) Nefunguje mi, aby byl chat realtime - když vložím zprávu, musím zaktualizovat stranku.
Proto se musí funkce reload volat ve skriptu js. Já to mám v té ukázce každou sekundu. Viz ř. 102 souboru engine.js

2) Když s někým někým navážu chat, nezobrazí se mu to, jenom mě.
Proto musíš vymyslet nějakou funkci, která bude v určitém časovém intervalu ajaxem procházet tabulku activechats a když najde tvoje ID, tak ti zobrazí okno s chatem. Žádné konkrétní řešení nemám, zkus něco napsat...

A kam mám to onload dát, do body sice můžu - nevadí, když to onload nebude přímo u toho scriptu?
Když bude skript v hlavičce stránky, tak může být bez problémů onload u body... (nebo spíš musí, protže onload může být jen u body, nebo img)

Jinak v souboru run.php - jak je to SELECT * FROM 'chat' - tu tabulku chat mas jako mam ja tu zpravy? Díky
Přesně tak...
perwin
Profil
LosFilipos:
..musíš vymyslet nějakou funkci, která bude v určitém časovém intervalu ajaxem procházet tabulku activechats a když najde tvoje ID, tak ti zobrazí okno s chatem...
Např.
<div> 
<?php
$query = mysql_query("SELECT * FROM `activechats`");
while($result = mysql_fetch_array($query)) {
if($result["id_uzivatele"] = $_SESSION["login"]) { /* otevřít okno s chatem */ }
elseif($result["id_kamarada"] = $_SESSION["login"]) { /* otevřít okno s chatem */ }  
}
?>
</div>

- udělat, aby se <div> aktualizoval každou vteřinu
-> tím se každou vteřinu provede selectování aktivních chatů a vyhledá to jméno uživatele - buď bude v id_kamarada nebo v id_uzivatele
-> pokud tam bude jméno uživatele otevře se okno s chatem
Souhlas? Nebo to takhle nemůže být?

Nebo napsat:
$query = mysql_query("SELECT * FROM `activechats` WHERE id_kamarada = '$_SESSION[login]' or id_uzivatele = '$_SESSION[login]'");

?
Dík
LosFilipos
Profil
perwin:
Mno, jako php klidně, ale musíš to nějak propojit s ajaxem, aby ti to fungovalo bez reloadu stránky... Nebo by to šlo teoreticky řešit skrytým iframem, který se bude sám po určitém čase obnovovat...

tím se každou vteřinu provede selectování aktivních chatů a vyhledá to jméno uživatele - buď bude v id_kamarada nebo v id_uzivatele
-> pokud tam bude jméno uživatele otevře se okno s chatem
Souhlas... Ovšem to vyhledávání v tabulce aktivních chatů bych udělal v delším časovém intervalu, třeba po 5 sekundách. Tu 1 sekundu bych nechal jen když už bude oteřené chatové okno, aby se vypsaly příchozí zprávy co nejdřív...
perwin
Profil
LosFilipos:
Nojo ale nevím jak udělat, aby se ten <div> aktualizoval po treba 5ti sekundach... Asi jednodušší by to bylo přes ten iframe, protože když se aktualizuje stránka v iframu, neovlivní to celou stránku kde je <iframe>.
<iframe src="stranka-v-iframu" style="display: none;">

Stránka v iframu:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<meta http-equiv="refresh" content="5; url=stranka-v-iframu">
<?php
$query = mysql_query("SELECT * FROM `activechats`");
while($result = mysql_fetch_array($query)) {
if($result["id_uzivatele"] = $_SESSION["login"]) { /* otevřít okno s chatem */ }
elseif($result["id_kamarada"] = $_SESSION["login"]) { /* otevřít okno s chatem */ }  
}
?>
</html>

- takhle je to najisto.
LosFilipos
Profil
perwin:
Nojo ale nevím jak udělat, aby se ten <div> aktualizoval po treba 5ti sekundach
Prostě a jednoduše se bude volat funkce, která vypisuje zprávy do divu každých 5 sekund.
window.setInterval(function() {reload();},5000);


Ale přes ten iframe je to asi jednodušší...
perwin
Profil
LosFilipos:
Vlastně s tím iframe je problém, protože jak otevřít okno s chatem do nadřazené stránky a né do stránky v iframu? Nebo dát přesměrování do toho iframu do té podmínky, aby když je uživatel v tabulce activechats ho to přesměrovalo na nějakou stránku s tím chatovým oknem - nejspíš do té nadřazené s nějakým ...stranka.php?chatoveokno=otevreno - ne?

A refresh by šlo udělat i přes PHP:
<?php
$page = $_SERVER['PHP_SELF'];
$sec = "5";
header("Refresh: $sec; url=$page");
?
LosFilipos
Profil
perwin:
Může být...
LosFilipos
Profil
perwin:
Ovšem měnit javascriptem původní stránku lze taky, viz příklad:
Kód ve sránce v iframu
window.parent.document.getElementById('cokoliv').innerHTML = 'BAF';
perwin
Profil
LosFilipos:
Takže by stránka v iframu vypadala takto:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<meta http-equiv="refresh" content="5; url=stranka-v-iframu">
<?php
$query = mysql_query("SELECT * FROM `activechats`");
while($result = mysql_fetch_array($query)) {
if($result["id_uzivatele"] = $_SESSION["login"]) { echo "<script language='JavaScript'>window.parent.document.getElementById('cokoliv').innerHTML = 'BAF';</script>"; }
elseif($result["id_kamarada"] = $_SESSION["login"]) { echo "<script
language='JavaScript'>window.parent.document.getElementById('cokoliv').innerHTML = 'BAF';</script>"; }  
}
?>
</html>
?
- co to je to BAF a co to je to cokoliv? Díky
LosFilipos
Profil
Cokoliv je id divu, který se ti zobrazí jako okno chatu. Baf je potom text uvnitř toho divu. Bylo to myšleno jako schématický příklad. není tam důležité to cokoliv ani BAF, ale window.parent - chtěl jsem ukázat, jak se volají funkce ze stránky, která je v iframu... Samozřejmě to budeš muset upravit do nějaké složitější formy, aby se okno chatu zobrazilo správně. Bude tam pravděpodobně něco s document.createElement a podobně. To si někde najdi a nastuduj...
perwin
Profil
LosFilipos:
window.parent.document.getElementById('id_divu').createElement('element_k_vytvoreni')
? Dík
LosFilipos
Profil
perwin:
Nope...
www.zaachi.com/cs/items/dynamicke-pridavani-elementu-formulare.html#
Ten příklad je sice o formulářích, ale dá se to použít na všechno...
perwin
Profil
LosFilipos:
Na začátku měl ten script v iframe sloužit k tomu, aby to uživatelům, kteří jsou v tabulce activechats otevřelo okno s chatem. A to okno s chatem obsahuje <form>...</form> a vypsání zpráv z tabulky. Tudíž to okno s chatem může být jistý skritý div na stránce a ve stránce v iframu může být jenom přesměrování na nadřazenou stránku s něčim jako ?chatoveokno=otevreno, což odkryje to chatove okno - ten skrytý div, ne?
A potom napsat:
 <?php
if($_SERVER['REQUEST_URI'] = /stranka.php?chatoveokno=otevreno) { echo '<div>...</div>'; }
else { echo '<div style="display: none;">..</div>'; }  // nebo ještě lépe - ať to nevypíše nic, pokud ta adresa nesouhlasí
?>
LosFilipos
Profil
perwin:
Tudíž to okno s chatem může být jistý skritý div na stránce a ve stránce
Teoreticky ano, ale potom nastane problém, když budeš chtít chatovat s více uživateli. Nebudeš mit dost oken...

v iframu může být jenom přesměrování na nadřazenou stránku s něčim jako ?chatoveokno=otevreno, což odkryje to chatove okno - ten skrytý div
Není nutné přesměrování. stačí tohle:
window.parent.document.getElementById('okno_chatu').style.display = 'block';
perwin
Profil
LosFilipos:
..stačí tohle:
Ano, to je asi lepší.. protože by se to s tou adresou dalo lehce obejít
perwin
Profil
perwin:
potom nastane problém, když budeš chtít chatovat s více uživateli
Ano,... leda že by se s vypsáním každého online uživatele k němu i vypsal ten skrytý div a byl by připravený pro použití.
LosFilipos
Profil
perwin:
leda že by se s vypsáním každého online uživatele k němu i vypsal ten skrytý div a byl by připravený pro použití.
Což je ovšem naprosto zbytečné, když můžeš pomocí createElement pro každého vytvořit vlastní okno, jen když bude potřeba...
perwin
Profil
LosFilipos:
Ano, to jest pravdou býti.... ale jak bude teda vypadat ten script s tím createElement?
<script language="javascript">
var form1 = document.createElement('FORM');  
form1.setAttribute('action', 'javascript:request(\''.$_SESSION["login"].'\'); javascript:erase()'); 
form1.setAttribute('method', 'post');
atd. 
</script>

?
« 1 2 3 4 5 6 7 8 »

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0