Autor Zpráva
Neas
Profil
Ahoj.
EDIT: Všechny problémy vyřešeny, kromě toho, jak docílit, aby se smailíci nezobrazovali v url odkazech. Pokud někdo ví, co s tím, prosím, ať napíše, děkuji mnohokrát :-)
Mám vytvořený chat v php a ajaxu, ale jedna věc mi dělá problém. Chtěl bych, aby posílání příspěvků bylo bezpečné, tj. použil jsem funkci htmlspecialchars(). Chtěl bych ale také, aby se mi správně zobrazovali smailíci (ještě jsem je tam nepřidal, ale mám to v plánu), návod na ně jsem našel na intervalu (http://interval.cz/clanky/nahradte-textove-smajliky-obrazkovymi/). Nevíte někdo, jak by to šlo udělat?
a zdrojové kódy:
index.php
<html>
    <head>
  <title>AJAX chat</title>
<script type="text/javascript" language="javascript" src="jquery-1.4.js"></script>
<script type="text/javascript" language="javascript">
  function odeslat()
      {
      $.get('chat.vyhodnoceni.php', { text: document.sendmessager.prispevek.value } );
      $.get('chat.vyhodnoceni.php', function(vystup){$('#chatarea').html(vystup);} );
      }
  $.get('chat.vyhodnoceni.php', function(vystup){$('#chatarea').html(vystup);} );
  $.get('chat.writing.users.php', function(pisi){$('#writingusers').html(pisi);} );
  setInterval("$.get('chat.vyhodnoceni.php', function(vystup){$('#chatarea').html(vystup);} );", 2000);
  setInterval("$.get('chat.writing.users.php', { pise: document.sendmessager.prispevek.value } );", 2000);
  setInterval("$.get('chat.writing.users.php', function(pisi){$('#writingusers').html(pisi);} );", 2000);
</script>
<style>
#chatarea
  {
   background-color:#4B4032;
   border:5px inset forestgreen;
   overflow:scroll;
   width:784px;
   height:500px;
   padding-left:4px;
  }
#prispevek
  {
   width:800px;
   height:50px;
  }
.cas
  {
   color:red;
  }
.prispivatel
  {
   color:DeepSkyBlue;
  }
.prispevek
  {
   color:black;
   margin-left:25px;
  }
</style>
    </head>
    <body>
<div id="chatarea">                        <!-- chatarea -->
</div>
<div id="writingusers"></div>              <!-- uživatelé, co píší -->
<form name="sendmessager" method="post">
<textarea id="prispevek" name="prispevek" ></textarea><br />
<input type="button" value="Odeslat" onClick="odeslat(); reset();" /><br />
</form>
    </body>
</html>

chat.vyhodnoceni.php
<?php
include("config.php");
  $den = date('d.m');
  $prispivatel = $_COOKIE['nick'];
  mysql_query("DELETE FROM chat WHERE den != $den");
  if(isset($_GET['text']) AND $_GET['text'] != "")
    {
    $prispevek = htmlspecialchars($_GET['text']);
    mysql_query("INSERT INTO chat (prispivatel,cas,text,den) VALUES ('$prispivatel',now(),'$prispevek','$den')");
    }
  $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>"."<div class='prispevek'>".$vypis[2]."</div>"; 
        }
?>

A když už sem píšu, nevíte také prosím někdo, jak se dá ta funkce na smailíky z intervalu upravit, aby se smailící nezobrazovali v url odkazech?
Děkuju moc za pomoc! :-)
Spacebar
Profil
Pokud ti htmlspecialchars nehází chybu, tak pracuje. Uživatel to neuvidí, protože se mu nezobrazí html kód. Jde o to, že tag < se nahradí za &lt;, což není počáteční značka HTML tagu, ale entita znaku <. Proto se kód "nezpracuje".
Alphard
Profil
Neas:
html kódy se sice nezpracují (což také nechápu), ale žádné znaky nejsou nahrazeny
Vše je v pořádku, kdybyste se podíval do přímo do databáze, jsou tam entity.

Vše co vkládáte do databáze by se mělo ošetřít, hlavně $prispivatel, cookies lze podvrhnout.

A smajlíci. Nejdříve ošetřete vstup (možná bych zvážil přímo strip_tags()) a pak je nahraďte.
Neas
Profil
aha, když jsem se podíval do databáze, pochopil jsem to, děkuju :-)
a nevíte někdo, co s ostatními problémy, které jsem zmiňoval? tj. aby se smailíci zobrazili správně a naopak, aby se nezobrazovali v odkazech.
Děkuji

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:

0