Prosta (bardzo) księga gości w PHP

Przyszło mi dzisiaj napisać możliwie najprostszą możliwą księgę gości w PHP. Stwierdziłem, że się z wami podzielę :) Miała nie korzystać z bazy danych i nie mieć walidacji :) także jest naprawdę prosta. Na dodatek całość zawiera się aż w jednym pliku.

Najpierw zdefiniujemy sobie stałą, w której będziemy trzymać nazwę pliku przechowującego wpisy:

define("DB_FILE_NAME", 'baza.dat');

Następnie stworzymy metodę, która sprawdzi czy plik DB_FILE_NAME istnieje, a jeśli nie - to go utworzy:

function gb_init(){
  // sprawdzamy czy plik istnieje
  if (!file_exists(DB_FILE_NAME)){
    // jesli nie, to go tworzymy
    $f = fopen(DB_FILE_NAME, 'w');
    fclose($f);
  }
}

Następnie utworzymy metodę która będzie dodawać nam wpisy. Jeśli ktoś nie będzie miał nicka, to jako nick wpisze "Gość":

function add_entry($nick, $tresc){
  $nick = HTMLSpecialChars($nick);
  $tresc = HTMLSpecialChars($tresc);
  if($nick=="")  $nick =  "Gość";
  $date = date("j.m.Y G:i");
  $text = ereg_replace("\n", "<br />", $tresc);
  $wynik = '<b>'. $nick . '</b>'. "     " . $date . '|||' .$text.  "\n";

  $fp = fopen(DB_FILE_NAME, "a");
  
  fwrite ($fp, $wynik);
  fclose($fp);
}

Następnie całość inicjujemy (przed htmlem - ponieważ to jest obsługa dodawania wpisów, a nie ich wyświetlania):

  gb_init();
  if ($_POST['nick'] && $_POST['tresc']){
    add_entry($_POST['nick'], $_POST['tresc']);
  }

Teraz pozostaje nam wyświetlić pliki:

$myFile = fopen(DB_FILE_NAME, "r");
$i = -1;
while (!feof($myFile)) {
  $myLine = fgets($myFile, 2000);
  $i++;
}
fclose($myFile);

echo "Ilość wpisów w Księdze: $i<br /><br />";
// ładujemy pliki w odwrotnej kolejnosci
$file = array_reverse(file('baza.dat'));
// I wyświetlamy rozdzielajac dane - seperator to |||
foreach ($file as $key => $value) {
  list($imie, $tresc) = explode("|||", $value);
  echo $imie . '<br />';
  echo $tresc . '<br /><br />';
  echo '<hr>';
}

Pozostaje nam jeszcze tylko formularz dodawania wpisów:

<form method="post" action="ksiega.php?id=zapisz">
<div>
   Imię: <input type="text" name="nick" /><br />
   Treść:<br />
    <textarea cols="35" name="tresc" rows="12"></textarea>  <br />
   <input type="submit" value="Wyślij"/>
</div>
</form>

Categories: PHP

5 Comments

  1. A po co Ci ten ‘id=zapisz’ w action??

  2. Tak naprawdę to po nic. Używałem tego do testów jak to kodziłem i tak naprawdę to po prostu mi się nie usunęło :) Można to też ukryć w polu typu hidden i po tym rozdzielać akcje w kontrolerze (poj. pliku który ma kilka akcji).

  3. jestem z tych zielonych wiec zanim zaczne to zapytam co to znaczy to definiujemy na poczatku opisu i czy te wszystkie etapy maja byc zawarte w tej kolejnosci w jednym pliku x.php i jeszcze jedno czy mozna ten skrypt uzywac wielokrotnie na jednej stronie i roznych podstronach jako ksiege gosci i komentarze?

  4. Tak, całość powinna być w jednym pliku (w kolejnosci takiej jak w poście). Oczywiście można tego uzywać także do komentarzy, jednak warto pamiętać, że to bardzo prosty skrypt który nie ma zadnych zabezpieczeń przed spamerami.

  5. dlaczego po wciśnięciu wyślij wyskakuje mi strona nie została znaleziona???

Leave a Reply

Your email address will not be published. Required fields are marked *

*

Copyright © 2024 Closer to Code

Theme by Anders NorenUp ↑