Informatyka dla klas III

Ankieta PHP

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:

0
0
0
0
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

Kowalski Jan
Barański Tomasz
Fido Mariusz
Żonkil Magdalena
Kawa Justyna

 

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" />&nbsp;
                    <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.

  1. 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.
     
  2. 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.
     
  3. 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.


List do administratora Serwisu Edukacyjnego Nauczycieli I LO

Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz  ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048

 

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień szeroko opisywanych w podręcznikach.



   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2017 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.