W tym rozdziale napiszemy aplikację "wizytówka". Przy okazji otrzemy się o podstawy takich tematów jak:
- Różne pola w formularzu HTML
- Obsługa formularza w PHP
- Format zapisu danych JSON
Do dzieła. Zaczniemy od formularza HTML.
Utwórz w swoim edytorze kodu plik.
c:\xampp\htdocs\pierwszy\wizytowka.php
Utworzymy teraz formularz HTML zawierający kilka pól.
<form method="post" >
<br /><input type="text" name="imie" placeholder="Wpisz imie" required >
<br /><input type="text" name="nazwisko" placeholder="Wpisz nazwisko" >
<br /><input type="password" name="haslo" placeholder="Podaj hasło" required >
<br /><input type="number" name="waga" min="1" max="120" placeholder="Ile ważysz">
<br />Podaj datę narodzin
<br /><input type="date" name="urodzony" >
<br /><button>Wyślij</button>
</form>
Powyższy formularz zawiera podstawowe typy pól: text, password, number, date.
Ich przeznaczenie jest chyba oczywiste. Każde pole input ma argument o nazwie "name".
Wartości parametru "name" są dla nas kluczowe, są to: imie, nazwisko, haslo, waga, urodzony.
Teraz dodamy kod PHP, który spowoduje zapisanie danych z formularza do pliku tekstowego.
<?php
if (!empty($_POST)){
print_r($_POST); // wyświetlenie danych otrzymanych z formualrza, można pominąć
$json = json_encode($_POST); // zapisanie danych do formatu JSON
file_put_contents('wizytowka.txt',$json); // zapisanie JSONa do pliku
}
?>
<form method="post" >
<br /><input type="text" name="imie" placeholder="Wpisz imie" required >
<br /><input type="text" name="nazwisko" placeholder="Wpisz nazwisko" >
<br /><input type="password" name="haslo" placeholder="Podaj hasło" required >
<br /><input type="number" name="waga" min="1" max="120" placeholder="Ile ważysz">
<br />Podaj datę narodzin
<br /><input type="date" name="urodzony" >
<br /><button>Wyślij</button>
</form>
Wstawiony kod PHP jest dość oczysiwsty, ale dodatkowo do każdej linijki dodałem komentarz z krótkim wytłumaczeniem.
Spróbuj teraz wypełnić i przesłać formularz. Spowoduje to utworzenie pliku "wizytowka.txt", a w nim dane
zapisane w formacie JSON. Powinno to wyglądac mniej więcej tak.
{"imie":"slawek","nazwisko":"lis","haslo":"tajne","waga":"12","urodzony":"2021-04-08"}
Teraz zosta do zrobienia jedna rzecz - wczytanie danych z pliku do formularza.
<?php
if (!empty($_POST)){
print_r($_POST);
$json = json_encode($_POST);
file_put_contents('wizytowka.txt',$json);
}
$json = @file_get_contents('wizytowka.txt');
$dane = json_decode($json,true);
?>
<form method="post" >
<br /><input type="text" name="imie" placeholder="Imie" value="<?=@$dane['imie']?>" >
<br /><input type="text" name="nazwisko" placeholder="Nazwisko" value="<?=@$dane['nazwisko']?>">
<br /><input type="password" name="haslo" placeholder="Hasło" value="<?=@$dane['haslo']?>">
<br /><input type="number" name="waga" placeholder="Waga" value="<?=@$dane['waga']?>">
<br />Podaj datę narodzin
<br /><input type="date" name="urodzony" placeholder="" value="<?=@$dane['urodzony']?>">
<br /><button>Wyślij</button>
</form>
Dodałem dwie linijki kodu PHP.
Pierwsza "file_get_contents" wczytuje tekst z pliku "wizytowka.txt".
Dodałem przed nią znak małpki @ po to, aby w momencie gdy nie ma pliku, nie pokazywało błędu.
Takie uciszanie komunikatów nie jest raczej profesjonalne, ale staram się uprościć maksymalnie przekaz.
Profesjonalnym rozwiązaniem byłoby najpierw sprawdzenie czy plik istnieje za pomocą funkcji file_exists.
Potem za pomocą funkcji "json_decode" konwertujemy tekst w formacie JSON do zmiennej PHP $dane,
która będzie teraz zawierała wszystkie interesujące nas pola, czyli: imie, nazwisko, haslo, waga, urodzony.
Następnie w kodzie HTML w każdym tagu input dodajemy parametr value:
value="<?=@$dane['imie']?>"
I znowu małpka służy do tego, by w razie czego - jeśli nie mamy wartości danej zmiennej - nie wyświetlało komunikatu o błedzie.
$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 '
';
}
?>