Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: PHP: Chatterbox v1.1

Sivun loppuun

sushi [05.07.2006 16:26:30]

#

Yksinkertainen minichat sivuston kulmaan.

box.php

Voit halutessasi lisätä tämän mihin tahansa tiedostoon, kunhan muistat muuttaa chat.php:n lopussa olevan header valuen siksi missä tämä koodi sijaitsee.

<form method="post" action="chat.php" name="chat">
  <input name="nick" value="nimi" maxlength="15"><br>
  <input name="msg" type="text" value="viesti" maxlength="128">

  <input name="submit" type="submit" value="kerro">

  <hr align="center" width="100%" size="1" color="#CCCCCC" noshade>

  <?php

    $msg   = file("chat.txt");
    $kill  = count($msg);

    echo ($msg[$kill-1] . "\n" .
          $msg[$kill-2] . "\n" .
          $msg[$kill-3] . "\n" .
          $msg[$kill-4] . "\n");

  ?>

</form>

chat.php

<?php

  $nick = $_POST['nick'];
  $msg  = $_POST['msg'];

  # Jos nick ja msg on default valuet niin ei päästetä läpi
  if($nick == "nimi" || $msg == "viesti") { echo "Keksippäs vähä parempaa juttua.."; exit(); }

  # Katsotaan onko keksi vielä voimassa (floodprotect)
  if(isset($m00)) { echo "Kröhöm.. eipäs floodita.. odota vähintään 5sek."; exit(); }

  # Katsotaan onko nick tai viesti tyhjä
  if(empty($nick)) { echo "Sumimasen!! Nimi taitaa puuttua O_o"; exit(); }
  if(empty($msg))  { echo "Sumimasen!! Viesti taitaa puuttua O_o"; exit(); }

  # Läjäytetään keksi floodin estämiseksi (5 sek)
  setcookie("m00", m00, time()+5);

  # Poistetaan html roska, paitsi <b>, <i> ja <u> tageja viestistä
  $msg  = strip_tags($msg,"<b>,<i>,<u>");
  $nick = strip_tags($nick,"");

  # Lisätään tietoihin tyylitys
  $logit = "<strong>$nick</strong>:<br>$msg<br><br>\n";

  # Korjataan " ja ' merkit
  $logit = str_replace("\\\"","\"",$logit);
  $logit = str_replace("\\'","'",$logit);

  $fp = fopen("chat.txt", "a+");

  fwrite($fp, $logit);

  fclose($fp);

  # Lähetetään käyttäjä takaisin
  header("location: box.php");

?>

Draiz [12.07.2006 21:24:56]

#

Mitähän tähän nyt sanoisi, peruskamaa. Toteutus ei ainakaan ole paras mahdollinen.

Ainakin

if(isset($m00)) { ... }

pitäisi olla

if(isset($_COOKIE['m00'])) { ... }

Parantamisen varaa kyllä löytyy paljonkin.

kayttaja-2791 [13.07.2006 11:01:32]

#

Keksi sinänsä estää tyhmimpien käyttäjien floodaukset (jotka sitä yleensä harrastavat). Toisaalta varmempi tapa olisi esimerkiksi tallentaa viimeisin aikaleima ja IP vaikka erilliseen tekstifileen, ja katsoa sieltä lisäyksen yhteydessä ettei sama henkilö lähettele viestejä turhan nopeasti. Tietenkin tuokin on kierrettävissä, mutta se on jo huomattavasti vaikeampaa (useasta IP:stä).

Tyylittelystä sen verran että on mielestäni selkeämpää korvata

echo "Kröhöm.. eipäs floodita.. odota vähintään 5sek."; exit();

tällä:

exit("Kröhöm.. eipäs floodita.. odota vähintään 5sek.");

Muuten ihan ok vinkki, paitsi että kun viestejä alkaa olemaan erittäin paljon (esim. tiedosto kasvaa isommaksi kuin 1Mt), alkaa skripti hidastumaan huomattavasti, ja kuluttamaan sinänsä turhaan palvelimen resursseja. Eli ehkä tiedostopointtereiden käyttöä kannattaisi käyttää (fseek), tai jopa suoraan jotain fiksumpaa flatfilejä käyttävää PHP tietokantasovellusta.

jamppa110 [22.08.2006 01:41:19]

#

Mitä tää tarkottaa


Warning: Cannot modify header information - headers already sent by (output started at E:\Kotisivut\Uudetkotisivut2006\chat.php:9) in E:\Kotisivut\Uudetkotisivut2006\chat.php on line 25

Warning: Cannot modify header information - headers already sent by (output started at E:\Kotisivut\Uudetkotisivut2006\chat.php:9) in E:\Kotisivut\Uudetkotisivut2006\chat.php on line 45

sushi [22.08.2006 01:47:27]

#

lainaus:

Mitä tää tarkottaa


Warning: Cannot modify header information - headers already sent by (output started at E:\Kotisivut\Uudetkotisivut2006\chat.php:9) in E:\Kotisivut\Uudetkotisivut2006\chat.php on line 25

Warning: Cannot modify header information - headers already sent by (output started at E:\Kotisivut\Uudetkotisivut2006\chat.php:9) in E:\Kotisivut\Uudetkotisivut2006\chat.php on line 45

Aika vaikee sanoo..
kai tuo chat.php on erillinen tiedosto sulla?

jamppa110 [22.08.2006 08:55:52]

#

chat.php on samassa paikassa kuin index.php johon on sisällytetty tällä sivulla ylempi koodi box.php

viesti menee kyllä oikeaan paikkaan, mutta tuo herja avautuu isona ikkunana ja jää siihen, ilmeisesti sivun pitäisi avautua takaisin tuohon box.php tilaan.

# Lähetetään käyttäjä takaisin
  header("location: box.php");

boxia voi testata http://83.216.19.163/

pitäisikö tuo korvat

header("location: index.php");

jamppa110 [22.08.2006 21:08:34]

#

nyt pääsin tämmöseen herjaan

Parse error: parse error, unexpected '.' in chat.php on line 18

tää on riviltä 18

if(isset($_COOKIE['m00'])) { ... }  { exit("Kröhöm.. eipäs floodita.. odota vähintään 5sek.");

moptim [12.11.2006 09:43:29]

#

Lisää rivin loppuun, ennen puolipistettä kuitenkin, "}" merkki. Tarkista myös, että rivillä 17 on lopussa puolipiste.

Mee [03.12.2006 19:54:29]

#

Mulla toi ei näytä muita ku kaks ekaa viestii. Haluisin et näyttäs kaikki et mitä tehdä?
*What to do?*

zedo [25.01.2007 12:18:16]

#

Päivitä?

Tossa ei taida autom. olla päivitystä.

Ite oon väsänny saman tyyppistä ja laitoin chat.txt(vai mikä olikaan) näkymään html-tiedostossa, jossa oli frameset pelkästään chat.txt:hen. Sen frameset-tiedoston sitte iframessa siihen pääikkunaan, josta voi viestinki lähettää ja chatti näkyy.

On ehkä vähän vanhahtavaa käyttää noita, ja olis taktisemminki joku osannu kai tehä päivittämisen, mut toi nyt mulla tuli mieleen.

----------------

Miten muuten aattelit käyttää <strong>-tagia jne. tekstitiedostossa. En onnistunu.

Magicbullet [05.07.2008 21:56:47]

#

Kivaltaha toi näyttää khyl.

http://magicbullet.jouluserver.com/chatterbox_v1.1/box.php

ByMikkis [22.02.2009 23:49:28]

#

Mikään demo ei toimi -.-

Horny The Horrible [20.01.2010 08:10:44]

#

Hyvä koodi.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta