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"); ?>
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.
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.
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
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 25Warning: 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?
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");
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.");
Lisää rivin loppuun, ennen puolipistettä kuitenkin, "}" merkki. Tarkista myös, että rivillä 17 on lopussa puolipiste.
Mulla toi ei näytä muita ku kaks ekaa viestii. Haluisin et näyttäs kaikki et mitä tehdä?
*What to do?*
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.
Kivaltaha toi näyttää khyl.
Mikään demo ei toimi -.-
Hyvä koodi.
Aihe on jo aika vanha, joten et voi enää vastata siihen.