Na dzisiejszych zajęciach utworzymy w PHP proste narzędzie do
zbierania opinii od użytkowników. Wykorzystamy formularz oraz proste skrypty
PHP, które będą zbierały głosy od użytkowników i prezentowały wyniki w
sposób graficzny. Wyniki głosowania będą przechowywane w pliku na serwerze.
Zanim rozpoczniemy, wyczyść katalog C:\wamp\www. Następnie skopiuj do niego
poniższy obrazek:
Nazwę obrazka ustaw na pool.gif.
Uruchom notatnik i utwórz w nim 5 wierszy z cyfrą 0:
Plik zapisz w katalogu C:\wamp\www pod nazwą cnt.txt.
Będziemy w nim zliczać oddane głosy w ankiecie.
|
Uruchom MS Expression Web 4 i pod kierunkiem
nauczyciela utwórz formularz z 5 opcjami:
Nasi kandydaci
Zobacz wyniki |
We własnościach formularza ustaw:
<body>
<div align="center">
<table cellpadding="4" cellspacing="0" style="background-color: #CCCCCC">
<tr>
<td>
<h3 style="text-align: center">Nasi kandydaci</h3>
<form method="post" action="pool.php">
<p style="text-align: left">
<input type="checkbox" name="C0" value="ON"/>Kowalski Jan<br/>
<input type="checkbox" name="C1" value="ON"/>Barański Tomasz<br/>
<input type="checkbox" name="C2" value="ON"/>Fido Mariusz<br/>
<input type="checkbox" name="C3" value="ON"/>Żonkil Magdalena<br/>
<input type="checkbox" name="C4" value="ON"/>Kawa Justyna
</p>
<p style="text-align: center">
<input type="submit" value="Głosuj" name="B1" />
<input type="reset" value="Resetuj" name="B2" />
</p>
</form>
<p style="text-align: center"><a href="show.php">Zobacz wyniki</a></p>
</td>
</tr>
</table>
</div>
</body>
|
Plik zapisz w katalogu C:\wamp\www
jako index.html.
|
Otwórz w MS Expression Web 4 nowy plik PHP. W
sekcji <body> utwórz skrypt PHP:
<div align="center">
<?php
$votes = file("cnt.txt",FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach($votes as $i => $v) if(isset($_REQUEST["C$i"])) $votes[$i]++;
$h = fopen("cnt.txt","w");
foreach($votes as $v) fwrite($h,$v."\n");
fclose($h);
echo "<p>Dziękujemy za oddanie głosu</p>";
echo "<p><a href='index.html'>Powrót do strony głównej</a></p>";
?>
</div>
|
Plik zapisz w katalogu C:\wamp\www pod nazwą pool.php |
Otwórz w MS Expression Web 4 nowy plik PHP. W
sekcji <body> utwórz skrypt PHP:
<div align="center">
<h2>Wyniki głosowania</h2>
<?php
$votes = file("cnt.txt",FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$sum = 0;
foreach($votes as $v) $sum += $v;
if(!$sum) echo "<p>Nie oddano jeszcze żadnego głosu</p>\n";
else
{
$c = array("Kowalski Jan","Barański Tomasz","Fido Mariusz","Żonkil Magdalena","Kawa Justyna");
echo "<table>\n";
foreach($votes as $i => $v)
{
$w = $v * 256 / $sum;
echo "<tr><td>".$c[$i]."</td><td>Liczba głosów = $v</td><td><img src='pool.gif' height='10' width='$w'/></td></tr>\n";
}
echo "</table>\n";
}
echo "<p><a href='index.html'>Powrót do strony głównej</a></p>\n";
?>
</div>
|
Plik zapisz w katalogu C:\wamp\www pod nazwą show.php |
Podsumowanie
$t = file(plik,opcje) |
– |
wczytuje podany plik z dysku serwera do
zmiennej $t jako tablicę
FILE_IGNORE_NEW_LINES : do końców elementów nie będą
dołączane znaki \n
FILE_SKIP_EMPTY_LINES : w tablicy nie znajdą się puste
wiersze |
foreach($t as $v) |
– |
tworzy pętlę, która wykona się tyle razy,
ile elementów posiada tablica $t. W każdym obiegu pętli w
zmiennej $v znajdzie się kolejny element tablicy. |
foreach($t as $i => $v) |
– |
jak wyżej, w zmiennej $i znajdzie się
indeks elementu, w zmiennej $v element tablicy |
isset($v) |
– |
zwraca true, jeśli zmienna $v została
ustawiona w programie. Tutaj sprawdzamy tą funkcją, czy do
skryptu php przekazano stan opcji z formularza. Jeśli tak,
to tablica $_REQUEST zawiera element o indeksie będący nazwą
opcji w formularzu. |
$h = fopen(plik,tryb) |
– |
otwiera plik na dysku serwera. Tryb "r"
oznacza otwarcie do odczytu, tryb "w" oznacza otwarcie do
zapisu. Gdy plik zostanie otwarty, w zmiennej $h otrzymujemy
tzw. uchwyt lub dojście do pliku. Wartość ta jest
wykorzystywana w operacjach plikowych. |
fwrite($h,dane) |
– |
zapisuje w otwartym pliku dane. |
fclose($h) |
– |
zamyka plik |
Uwaga: podane tutaj rozwiązanie nie jest bezpieczne. W
rzeczywistych warunkach należałoby dodatkowo zablokować dostęp do
pliku na czas jego przetwarzania w skrypcie. Inaczej głosy mogą być
źle zliczane (gdy np. zagłosuje jednocześnie kilku
użytkowników). Zagadnienie jest nieco skomplikowane, dlatego
zostało tutaj pominięte. Jeśli interesuje cię to, poszukaj
informacji o funkcji flock(). |
Ćwiczenia w programowaniu w PHP
Instrukcja
Wszystkie pliki tworzysz w katalogu c:\wamp\www. Gdy
ćwiczenie będzie gotowe, prześlij wszystkie pliki na serwer FTP na
podane przez nauczyciela konto: serwer 192.168.28.2, konta
s01...s18. W pliku index.html umieść swoje imię i nazwisko.
- W pliku index.html utwórz formularz, który będzie
zawierał dwa pola tekstowe Input (Text), w których
użytkownik formularza wprowadza stawkę godzinową oraz liczbę
przepracowanych godzin przez pracownika Jana Kowalskiego.
Formularz powinien zawierać dwa przyciski Input
(Submit)
oraz Input (Reset). Po kliknięciu przycisku
Submit (nazwanego np. Wyślij) formularz
przesyła dane metodą post do pliku count.php. W pliku tym
powinien być skrypt php, który zlicza liczbę przepracowanych
godzin oraz zarobione pieniądze przez Kowalskiego. Dane te
powinny być przechowywane w pliku data.txt
(dwie liczby w dwóch wierszach). W
pliku index.html powinno być również hiperłącze do pliku
pay.php, który wyświetla liczbę godzin przepracowanych
przez Kowalskiego oraz zarobione przez niego pieniądze. Po
wyświetleniu zawartość pliku data.txt powinna być
zerowana (potraktuj to jako wypłatę pensji).
W obu plikach pay.php i count.php powinny się znaleźć hiperłącza
do pliku index.html.
- W pliku index.html utwórz formularz konta Jana
Kowalskiego. W formularzu powinny się znaleźć dwa pola tekstowe
Input (Text) dla wpłaty i wypłaty oraz dwa przyciski
Input (Submit) i Input (Reset).
W polach tekstowych użytkownik wprowadza odpowiednio wpłatę
i wypłatę z konta. Po kliknięciu w przycisk Submit
formularz powinien wysyłać metodą post dane do pliku bank.php.
Skrypt php w tym pliku odpowiednio dodaje wpłatę do stanu konta
Kowalskiego lub odejmuje od niego wypłatę, jeśli stan konta na
to pozwala. Jeśli nie, powinien być wypisany odpowiedni
komunikat i wypłata nie powinna być wykonana. Stan konta
powinien być wyświetlany po każdej przeprowadzonej transakcji.
Stan ten jest przechowywany w pliku account.txt
(jedna liczba w jednym wierszu). W
pliku index.html powinno być jeszcze hiperłącze do pliku
check.php, który wyświetla bieżący stan konta Jana
Kowalskiego. W obu plikach bank.php i check.php mają być
hiperłącza do pliku index.html.
- W pliku index.html utwórz formularz ocen Jana
Kowalskiego. W formularzu powinny się znaleźć pole tekstowe
Input (Text) dla oceny dwa przyciski Input (Submit)
i Input (Reset). W polu tekstowym użytkownik
wprowadza ocenę od 1 do 6 ucznia. Po kliknięciu w przycisk
Submit formularz powinien wysyłać metodą post dane do pliku
note.php. Skrypt php w tym pliku dopisuje otrzymaną ocenę
do pliku notes.txt jako nowy wiersz. Ocena ma być
dopisywana tylko wtedy, jeśli jest równa 1, 2, 3, 4, 5 lub 6. W
pliku index.html powinno być jeszcze hiperłącze do pliku
show.php, który wyświetla wszystkie otrzymane oceny przez
ucznia Jana Kowalskiego oraz średnią arytmetyczną tych ocen. W
obu plikach note.php i show.php mają być hiperłącza do pliku
index.html.
|