Autor Zpráva
Neas
Profil
Ahoj.
Udělal jsem si tenhle jednoduchý script, který má fungovat jako chat, jen se mi v něm vyskytlo několik 'menších' problémů..
<html>
    <head>
<meta http-equiv="refresh" content="1">
<style>
.cas{
  color:red;
  }
.prispivatel{
  color:blue;
  }
.prispevek{
  color:black;
  }
</style>
    </head>
    <body>
<?php
  include("mysq.dbse.conf.inc.php");
  $prispivatel = $_COOKIE['user_nick'];                          // chat funguje jen po přihlášení
  $prispevek = $_POST['prispevek'];
  if($prispevek != ""){
    mysql_query("INSERT INTO chat (prispivatel,cas,text) VALUES ('$prispivatel','time()','$prispevek')");
    }
  $sql_chat = mysql_query("SELECT prispivatel,cas,text FROM chat ORDER BY cas ASC");
    while($vypis = mysql_fetch_array($sql_chat)){
      echo "<span class='cas'>".$vypis[1]."</span>"." <span class='prispivatel'>".$vypis[0]."</span>"." <span class='prispevek'>".$vypis[2]."</span><br />";
      }  
?>
<form method="post">
<input type="text" name="prispevek" size="100">
<input type="submit" value="Odeslat">
</form>
    </body>
</html>

1) Přidal jsem <meta http-equiv="refresh" content="1">, aby se script pravidelně každou sekundu aktualizoval.Tím jsem ale docílil toho, že uživatel nemůže psát déle, než jednu sekundu, protože pak je stránka aktualizována a textové pole přestane být aktivní (původně jsem si to neuvědomil). Mohl bych se toho zbavit tím, že bych v tom meta tagu přepsal 1 třeba na 10, ale chtěl bych, aby se nové zprávy v chatu zobrazili co nejdřív po tom, co jsou odeslány. Nevíte prosím někdo, jak toho docílit? (asi to jde přes php či javascript, ale v php jsem nepřišel na to jak a v js jsem to sice zkoušel taky, leč js není zrovna mou silnou stránkou...)
2) Když použiji funkti time(), zapíše se mi do databáze vždy jen čas 358:59:59 nebo 00:00:00. Čas se ukládá do sloupce "cas", kterému jsem v phpMyAdmin nastavil typ na "time" a dál jsem tento sloupec neupravoval.
3) Poslední problém je spíš prosba, nejde totiž o to, že by něco nefungovalo, spíš by mě zajímalo, jestli by šel script upravit tak, aby se po aktualizaci ozval nějaký zvuk, pokud byl script upraven (v praxi: pokud přibyla nová zpráva), případně jak.
Mockrát Děkuji :)
Joker
Profil
Neas:
1) Přidal jsem <meta http-equiv="refresh" content="1"> (...) Omylem jsem tím ale docílil toho, že uživatel nemůže psát déle, než jednu sekundu
Tohle bude asi problém, šlo by stránku obnovovat Javascriptem a obnovení vypnout v případě, že je rozepsaný příspěvek.
Šlo by načítat příspěvky přes AJAX.

2) Když použiji funkti time()...
Použijte MySQL funkci NOW().

3) (...) jestli by šel script upravit tak, aby se po aktualizaci ozval nějaký zvuk, pokud byl script upraven (v praxi: pokud přibyla nová zpráva), případně jak.
Kdyby se příspěvky načítaly přes AJAX, asi to nebude problém.
I přes meta refresh by to asi šlo, třeba by šlo Javascriptu předat do proměnné nějaké ID nejnovějšího příspěvku, JS by si ho držel v cookie a vždy při aktualizaci stránky porovnal, jestli se změnil poslední příspěvek.
Keeehi
Profil
1)
a) Buď dáš samotný výpis zpráv do samostatné stránky, kerou do této vložíš pomocí firame (pak se bude aktualizovat poze ten iframe)
b) použiješ ajax (třeba tento)

2) mysql_query("INSERT INTO chat (prispivatel,cas,text) VALUES ('$prispivatel',date('H:m:s'),'$prispevek')"); nebo můžeš zkusit mysql_query("INSERT INTO chat (prispivatel,cas,text) VALUES ('$prispivatel','NOW()','$prispevek')");
vynalezce
Profil
Je to zranitelné pomocí MySQL injekce.
použij funkci
mysql_real_escape_string()


1) Jsou 2 možnosti:
a)AJAX
b)Vypisovat zprávy jiným scriptem ten vkládat přes rámec, který pak můžeš normálně refreshovat. Myslím to takto:

<formulář pro přídávání zpráv>
</formulář>
<rámec adresa="VypišZprávy.php">
v tom rámci se zobrazíš zprávy i ten <meta> tag
</rámec>


EDIT: pozdě
Nox
Profil
Podle náročnosti možná zužitkuješ techniku "long polling", případně technologii APE
Neas
Profil
1) v AJAXu jsem bohužel nikdy nedělal, mohl by mi s tím prsím někdo pomoct?
2) date('H:m:s') nefunguje a 'NOW()' se chová úplně stejně, jako time()
3) viz 1)
vynalezce:
a kam by ta funkce měla přijít?

Děkuji
Joker
Profil
Neas:
2) date('H:m:s') nefunguje a 'NOW()' se chová úplně stejně, jako time()
Zvláštní, to by mělo fungovat.
Má ten sloupec správný datový typ?
Neas
Profil

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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