Chatterbox v1.1

sushi 06.09.04 13:40

Yksinkertanen minichat jonnekkin sivun alakulmaan.

 Tekstiversio  Arvo: 9 (25 ääntä)  Äänestä: +  -
==== 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");

?>
 

makeuu 16:34 6.9.04 
Aika yksinkertainen :P
Entropia 01:07 7.9.04 
Yksinkertainen ja kätevä. Hyvä kommentointi. Plussaa.
NiLon 04:27 7.9.04 
<u> varmaa olisi hyvä myös sallia.
d0ggie 14:41 7.9.04 
Loistavista virheilmoista plussaa :P
makeuu 07:24 8.9.04 
muuten hyvä tuo cookie, paitsi cookiet voi poistaa :), mutten tässä nyt keksi parempaakaan vaihtoehtoa näin pienelle scriptille :P
sushi 12:02 8.9.04 
hehe, sillä välin ku etiti sitä keksiä niin se keksi on jo poistunu :)
neon 17:53 9.9.04 
Hiukan turhaa erillisten muuttujien käyttöä
        $kill  = count($msg);
        $one   = $kill - 1;
        $two   = $one - 1;
        $three = $two - 1;
        $four  = $three - 1;
           
        echo ("$msg[$one]\n");
        echo ("$msg[$two]\n");
        echo ("$msg[$three]\n");
        echo ("$msg[$four]\n");


Kun voisi yksinkertaistaa esimerkiksi tähän:
        $kill  = count($msg);
        echo  $msg[$kill-1]."\n".
                  $msg[$kill-2]."\n".
                  $msg[$kill-3]."\n" .
                  $msg[$kill-4]."\n";

editoitu: 14:01 10.9.04
Extreme 20:05 9.9.04 
Miten tuon sais näyttämään vielä päivämäärän koska viesti lähetetty?
djJuuso 13:27 12.9.04 
Tälläistä tarvitsinkin! Helppo ja kätevä! Minulla on pelisivu, niin laitoin silleen että kaikki voi kommentoida peliarvosteluja ja ennakoita. Jos haluatte testata/nähdä kuinka tämä toimii niin menkää www.minuutti.net ja sieltä arvosteluihin kommentoimaan. (Tuli jonkinverran mainostustakin, mut ainakin te saatte tietää miten se toimii ketkä halutte)
editoitu: 19:03 14.9.04
T.M. 19:03 14.9.04 
2 erillistä tiedostoa, vaikka yhdelläkin pärjää.
Keksiä käytetään suoraan muuttujanimellä. Eikä esim: $_COOKIE['m00']. Kesti hieman aikaa tajuta mikä kyseinen muuttuja oli.
Onko tämä koodi kopioitu osittain jostain suuremmasta scriptistä? Vai miksi tuossa alussa on kauheat sisennyshirvitykset, vaikkei niille todellakaan ole tarvetta.
For silmukoita SAA käyttää. (viestien tulostuksessa)
Tiedostoon ei kannata koskaan tallentaa HTML-muotoiluja.

Kauheeta koodia, ei voi muuta sanoa. Hyi.
excalibur 00:00 18.9.04 
T.M. löytää valittamista vaikka mistä :D
space 11:48 25.11.04 
Hmm... olen vielä aika aloittelija PHP:ssä, että ehkä sen takia seuraavanlainen kysymys!

Sain äskeisen koodin toimimaan muuten ihan hyvin mutta ensaa sitä tallentamaan/kirjoittamaan uutta viestiä tekstitiedostoon eli koodi kyllä hakee tekstitiedostosta tekstin (kirjoitin sinne valmiiksi tekstiä että pystyn testaamaan sitä) käsittääkseni se ei mulla avaa sitä tekstitiedostoa niin että sinne voisi kirjoittaa?

Mikäs mulle olisi avuksi? Kiitos jo valmiiksi jos joku osaa auttaa!
sushi 03:50 28.11.04 
space, koita laittaa jollain FTP ohjelmalla sille tekstitiedostolle CHMOD 666 eli antaa sille oikeudet kirjoitukseen..
sllz 13:01 17.4.05 
Ihan hyvä..
Antarktis 19:14 29.5.05 
osaisko joku neuvoa tähän sellaisen yksinkertaisen ominaisuuden, että ei tarvis toi nimi laittaa kun kerran vaan..
eis 20:50 29.5.05 
T.M. kirjoitti:
...
Tiedostoon ei kannata koskaan tallentaa HTML-muotoiluja.

Kauheeta koodia, ei voi muuta sanoa. Hyi.


Miksei kannattaisi? Tuossa tapauksessa minusta ainakin kannattaa, joskaan ei ehkä isommissa. Onhan tuossa viilattavaa muttei se todellakaan mitään kauheaa ole..
editoitu: 17:07 19.7.05
sllz 17:04 19.7.05 
Jos haluu emailinki siihen ni täs on. Otin muuten ton floodauseston pois ku rupes v*tuttaan.
oon kokeillu mut tuli vaa mielee..
Ja toimii..
Luulenpa että se oli siinä..


rukataa tää filu iha p:ks.
***chat.php
<?php

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

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

# katotaan onko nick tyhjä
if(empty($nick)){ echo "Sumimasen!! Nimi taitaa puuttua O_o"; exit(); }

# katotaan onko email tyhjä
if(empty($email)){ echo "Sumimasen!! Email taitaa puuttua O_o"; exit(); }

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


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

$logit = "<strong>$nick</strong><br>$email<br>$msg<br><br>\n";
$logit = str_replace("\\\"","\"",$logit);
$logit = str_replace("\\'","'",$logit);
 
$fp = fopen ("chat.txt", "a+");

fwrite ($fp, $logit);

fclose ($fp);

header("location: box.php");

?>




Ja aletaan väsäämään boksia..
***box.php

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

            <input name="submit" type="submit" value="Lähetä">

          <hr align="center" width="100%" size="1" color="#CCCCCC" noshade>
      <?php
            $msg   = file("chat.txt");
            $kill  = count($msg);
            $one   = $kill - 1;
            $two   = $one - 1;
            $three = $two - 1;
            $four  = $three - 1;
                       
            echo ("$msg[$one]\n");
            echo ("$msg[$two]\n");
            echo ("$msg[$three]\n");
            echo ("$msg[$four]\n");
          ?>
</form>


Kaikki hyvä loppuu aikanaa, nii php koodin aloitustagiki.

ja chat.txt näyttää tältä ku kattoo jollai muistiolla:

<strong>Admin</strong><br>sllz@mbnet.fi<br>Chatti on valmis..<br><br>




ja selaimessa:

Admin
sllz@mbnet.fi
Chatti on valmis..
DeTropen 16:17 6.9.05 
Miten ton sais silleen toimimaan, että se tallentaa viestin kirjoittajan ip-osoitteen sinne chat.txt
Ja sen ip:n näkis vain, kun menee katsomaan sitä chat.txt :tä, eli ei näy esim. nimen perässä.
rusinax 10:37 1.10.05 
DeTropen kirjoitti:
Miten ton sais silleen toimimaan, että se tallentaa viestin kirjoittajan ip-osoitteen sinne chat.txt
Ja sen ip:n näkis vain, kun menee katsomaan sitä chat.txt :tä, eli ei näy esim. nimen perässä.


En muista mutta kun teet silleen että tossa kun on toi:
Esimerkki:

$logit = "<strong>$nick</strong><br>$IP<br>$msg<br><br>\n";

Niin heivaat ton $IP Jutun tosta lauseesta pois..

Sori kaikille.
Akmu 18:22 26.11.05 
öö...mietinpä vaan että kuinka tuon floodauseston aikaa saa lyhennettyä? vaikka kuinka etin niin en löytäny...
zember 17:37 31.1.06 
Akmu kirjoitti:
öö...mietinpä vaan että kuinka tuon floodauseston aikaa saa lyhennettyä? vaikka kuinka etin niin en löytäny...


" # läjäytetään keksi floodin estämiseksi (rimmaa)
setcookie("m00", m00, time()+120); "

120 = 2min.
60 = 1min
30 = ½min.

eli muutat vaan sen '120' kuinka haluat. eli se on tossa chat.php osios.

Paste 20:23 4.3.06 
Muuten hyvä mutta se ei päivity automaattisesti :(
editoitu: 11:42 31.3.06
Murqq 09:59 30.3.06 
Kiitos tästä, tällasta mä etinkin.
Omat taidot on vähän niin ja näin :)
Kulkunen 22:50 16.7.06 
Hyvä chatti kyllä. :)
Muokkasin tuohon E-mailin ja Www-sivun.
Vielä kun saisi sen IP:n tallennettua...
muhis 23:01 17.9.06 
Mainio minäkin käytän tuota omilla sivuillani Eikä vie paljoa tilaa
cMaster 12:42 8.2.07 
Mun mielestä tohon kannatais lisätä ns. BBcode tagit ja stripslashes.
Esim tai ...

Ja koodina...


# uus muoto

$msg = htmlspecialchars($msg);
$email = strip_tags($email,"@");
$nick = strip_tags($nick,"");

$logit = "<strong>$nick</strong><br>$email<br>$msg<br><br>\n";

$tag = array(
"/\[u\](.*?)\[\/u]/is", "/\[b\](.*?)\[\/b]/is",
"/\[i\](.*?)\[\/i]/is");

$replace = array(
"<u>$1</u>", <b>$1</b>",
"<i>$1</i>");

$msg = preg_replace($tag, $replace, $msg);
 
$fp = fopen ("chat.txt", "a+");
Apache 05:01 27.1.08 
==== chat.php ====
Warning: Cannot modify header information - headers already sent by (output started at /home/ddd/public_html/chat.php:13) in /home/ddd/public_html/chat.php on line 49

Warning: fopen(chat.txt) [function.fopen]: failed to open stream: Permission denied in /home/ddd/public_html/chat.php on line 62

Warning: fwrite(): supplied argument is not a valid stream resource in /home/ddd/public_html/chat.php on line 64

Warning: fclose(): supplied argument is not a valid stream resource in /home/ddd/public_html/chat.php on line 66

Warning: Cannot modify header information - headers already sent by (output started at /home/ddd/public_html/chat.php:13) in /home/ddd/public_html/chat.php on line 69

Kaikki muut näkyy onnistuneen ja minä sain heti vain listan virheitä
editoitu: 21:32 2.8.09
gangsteri 21:25 2.8.09 
Moi!

En saa flood-filteröintiä, enkä käyttäjän ohjaamista enää takaisin box-sivulle takaisin. Tulee virheilmoituksia:

Warning: Cannot modify header information - headers already sent by (output started at /var/www/virtual/viihdeteollisuus.fi/goon/htdocs/chat.php:3) in /var/www/virtual/viihdeteollisuus.fi/goon/htdocs/chat.php on line 19

Warning: Cannot modify header information - headers already sent by (output started at /var/www/virtual/viihdeteollisuus.fi/goon/htdocs/chat.php:3) in /var/www/virtual/viihdeteollisuus.fi/goon/htdocs/chat.php on line 39

Toimi aluksi ihan oikein, mutta kävi sitten tiltittämään, enkä keksi mitä tehdä. En ole mikään mestari näissä jutuissa...

Edit: vika löytyi. Ennen header komentoa ei saa tulostaa mitään muuta... nyt toimii jes.
clacier 14:08 4.3.10 
Jatkoin skriptiä aika reilusti, ja tein sitä käyttäen mm. yksityisviesti-järjestelmän ja foorumin. Molemmat on .txt- pohjaisia ja löytyy osoitteesta http://jorma.info