W tym rozdziale napiszemy aplikację "notatnik". Przy okazji otrzemy się o podstawy takich tematów jak:
- Tworzenie formularzy HTML
- Obsługa formularza w PHP
- Zapis i odczyt pliku tekstowego w PHP
Do dzieła. Zaczniemy od formularza HTML.
Otwórz w swoim edytorze kodu plik
c:\xampp\htdocs\pierwszy\index.php
Jeśli przerobiłeś poprzednią lekcję to jest tam kod PHP wyświętlający słowo "Witaj".
Już nie będzie potrzebny. Zaznacz wszystko (Ctrl+A) i usuń (Delete).
W miejscu starego kodu umiescimy formularz HTML.
<form method="post" >
<textarea name="notatka" >
</textarea >
<br />
<button>Wyślij</button>
</form>
W tym kodzie znajduje się jedno polskie słowo "notatka".
Będę celowo używał polskich słów, dzięki temu będziesz w stanie od razu wychwycić, że jest to moja nazwa własna.
Być może spotkasz się kiedyś z opinią, że używanie polskich nazw jest nieprofesjonale - ja się nie do końca z tym zgadzam.
Dobrze. Teraz sprawdzimy czy nasz kawałek kodu już działa.
W przeglądarce w pasku adresu - na samej górze wpisujemy.
localhost/pierwszy
Pojawi się pole tekstowe oraz przycisk "Wyślij".
Wpisz cokolwiek i wciśnij przycisk.
Strona powinna się przeładować, a teskt, który wpisałeś w okienku powinien zniknąc.
Punkt pierwszy mamy już za sobą. Teraz zajmiemy się obsługą formularza w PHP.
Zrobimy tak, że po wysłaniu formularza tekst, zostanie zapiany do pliku o nazwie "notatnik.txt".
Pod formularzem HTML dodajemy kod PHP.
<form method="post" >
<textarea name="notatka" >
</textarea >
<br />
<button>Wyślij</button>
</form>
<?php
if (isset($_POST['notatka'])) {
file_put_contents('notatnik.txt',$_POST['notatka']);
}
?>
Powyższy kod sprawdza czy została została przesłana wartość pola "notatka".
Jeśli tak to zapisuje wartość pola "notatka" do pliku o nazwie "notatnik.txt".
Zauważ, że po przeładowaniu formularza okienko z tekstem zostaje wyczyszczone.
Dlatego kolejny krok, jaki teraz zrobimy to będzie wczytanie zawartości pliku "notatnik.txt" do tego okienka edycyjnego.
Zrobimy to na samym początku skryptu.
<?php
$tekst = @file_get_contents("notatnik.txt");
?>
<form method="post" >
<textarea name="notatka" ><?=$tekst?></textarea >
<br />
<button>Wyślij</button>
</form>
<?php
if (isset($_POST['notatka'])) {
file_put_contents('notatnik.txt',$_POST['notatka']);
}
?>
Pierwsza wstawka kodu PHP powoduje wczytanie zawartości pliku "notatnik.txt" i zapamiętanie jej w zmiennej o nazwie
$tekst - tak w php kazda zmienna musi zaczynać się dolarem. Następnie ta zmienna zostaje wyświetlona wewnątrz znacznika textarea.
Przed funkcją file_get_contents dodałem znak @ - dzięki temu, jeśli program nie znajdzie pliku o nazwie "notatnik.txt",
bo na przykład ktoś go skasuje, to nie będzie pokazywał niepokojących komunikatów, ale jak chcesz to usuń znak małpki
i skasuj plik o nazwie "notatnik.txt" i zobacz co się stanie.
Dobra sprawdźmy czy skrypt działa...
Wygląda na to, że coś nie do końca poszło tak jak trzeba.
Jak wysyłam formularz to jego zawartość zapisuje się do pliku "notatnik.txt",
ale w okienku pojawia się poprzednia wersja tego pliku. Jeśli tego nie zauważyłeś
to spróbuj wysłać kilkakrotnie formularz wpisując różne wartości.
Dlaczego tak się dzieje? Ponieważ polecenie zapisu do pliku znajduje się na samym końcu.
A powinno być na samym początku. Poprawmy to:
<?php
if (isset($_POST['notatka'])) {
file_put_contents('notatnik.txt',$_POST['notatka']);
}
$tekst = @file_get_contents("notatnik.txt");
?>
<form method="post" >
<textarea name="notatka" ><?=$tekst?></textarea >
<br />
<button>Wyślij</button>
</form>
To już wszystko w tej lekcji.
W kolejnej lekcji nauczymy się zapisywać bardziej złożone struktury.
Wykorzystamy do tego format JSON.
$file = @file_get_contents(FILE);
$aDyskusja = @explode(BR,$file);
$aDyskusja = array_reverse($aDyskusja);
foreach ($aDyskusja as $komentarz){
if (!trim($komentarz)) continue;
$aKomentarz = explode('|',$komentarz);
echo '
';
echo '';
echo Date("Y-m-d H:i",$aKomentarz[0]);
echo '';
echo ' '.$aKomentarz[1].'
';
$aKomentarz[2] = str_replace('
','[BR]',$aKomentarz[2]);
$aKomentarz[2] = htmlspecialchars( $aKomentarz[2], ENT_QUOTES, 'UTF-8');
$aKomentarz[2] = str_replace('[BR]','
',$aKomentarz[2]);
echo $aKomentarz[2];
echo '
';
}
?>