home_site

Lab04 - Język php [ lab: 3.03.2023, ver. SPN.2023.03.03.003 ]

Zawartość strony

Cel zajęć

Zapoznanie formularzami w języku HTML, podstawowymi poleceniami języka php oraz opracowaniem prostych aplikacji wykorzystujących język php.

Tematyka zajęć:

  1. Formularze HTML, ich obsługa na poziomie php
  2. Operacje arytmetyczne w php, prosty kalkulator
  3. Obsługa plików w języku php
  4. Szablony w serwisie WWW, realizacja w języku php
  5. Prosty system ankietowy
  6. Logowanie do serwisu WWW ( przykład dodatkowy )
  7. Prosty system do testów ( przykład dodatkowy )
  8. Dostęp do zmiennych globalnych w php

  1. Formularze HTML, ich obsługa na poziomie php
    1. Omówienie elementu HTML <form>, jego atrybutów i funkcjonalności obsługiwanych elementów składowych
      Lab04_form
      Rys.1 Formularz w dokumencie html.
    2. Prezentacja elementu <input> z różnymi wartościami jego atrybutu type - skrypt lab4_1.html

      Plik lab4_1.html - ( [listing dokumentu] [link do dokumentu] [widok dokumentu])

         <!doctype html>
      <html>
      <head>
        <title>Skrypt lab4_1</title>
      </head>
      <body>
      <form method="get" action="lab4_1.php">
          <p> Pole email  <input type="email" name="pole1e" value="" /></p><br/>
          <p> Pole color  <input type="color" name="pole1c" value="" /></p><br/>
          <p> Pole data  <input type="date" name="pole1x" value="" /></p><br/>
          <p> Pole tekstowe <input type="text" name="pole1" value="przykład 1" /></p><br/>
          <p> Pole hasla:   <input type="password" name="pole_hasla" value="przykład" /></p><br/>
          <p> Pole wyboru:  <input type="checkbox" value="yes" name="test" checked /></p><br/>
          <br/>
          <p> Przycisk opcji: </p>
          <input type="radio" value="a" name="przycisk_opcji"/> wartosc 1<br/>
          <input type="radio" value="b" name="przycisk_opcji"/> wartosc 2<br/>
          <br/>
          <p> Pole zalaczonego pliku </p> <input type="file" name="polepliku" /><br/>
          <p><input type="submit" value"Wyslij" ></p>
      </form>
      </body>
      </html>
        
    3. Obsługa metody "GET" protokołu http w ramach skryptu php –- tablica $_GET[ ], skrypt strong>lab4_1.php

      Plik lab4_1.php - ( [listing dokumentu] [link do dokumentu] )

      <!doctype html>
      <html>
        <head>
        <tile>Skrypt php </title>
        <meta charset="UTF-8"/>
        </head>
        <body>
      <?php
      
      // Odczytanie przeslanych danych na serwer
      $email  = $_GET['pole1e'] ;
      $color  = $_GET['pole1c'] ;
      $data   = $_GET['pole1x'] ;
      $pole   = $_GET['pole1'] ;
      $haslo  = $_GET['pole_hasla'] ;
      $test   = $_GET['test'] ;
      $opcja  = $_GET['przycisk_opcji'] ;
      $plik   = $_GET['polepliku'] ;
      
      // Wydrukowanie odebranych danych
      
      print "<p>E-mail - ".$email."</p>" ;
      print "<p>Kolor - ".$color."</p>" ;
      print "<p>Data - ".$data."</p>" ;
      print "<p>Pole tekstowe - ".$pole1."</p>" ;
      print "<p>Wprowadzone haslo - ".$haslo."</p>" ;
      print "<p>Wartosc pola wyboru - ".$test."</p>" ;
      print "<p>Wybrana wartość opcji - ".$opcja."</p>" ;
      print "<p>Wybrana nazwa pliku - ".$plik."</p>" ;
      
      ?>
         </body>
         </html>  
    4. Prezentacja elementów <select> i <textarea> w formularzu html - skrypt lab4_2.html.

      Plik lab4_2.html - ( [listing dokumentu] [link do dokumentu] [widok dokumentu])

      <!doctype html>
      <html>
      <head>
        <meta charset="utf-8">
        <title>Skrypt lab4_2</title>
      </head>
      <body>
      <form method="post" action="lab4_2.php" >
        <p>Wybierz jedno województwo</p>
      	<select name="lista wyboru_1" size="1">
      		<option value="1"> Malopolskie </option>
      		<option value="2"> Zachodniopomorskie</option>
          <option value="3"> Mazowieckie</option>
          <option value="4"> Podkarpackie</option>
      	</select> <br/> <br/>
        <p>Wybierz jedno województwo</p>
      	<select name="lista wyboru_2" size="3">
      		<option value="1"> Malopolskie </option>
      		<option value="2"> Zachodniopomorskie</option>
          <option value="3"> Mazowieckie</option>
          <option value="4"> Podkarpackie</option>
      	</select> <br/> <br/>
        <p>Wybierz województwa</p>  
        <select name="lista wyboru_3[]" size="3" multiple>
      		<option value="1"> Malopolskie </option>
      		<option value="2"> Zachodniopomorskie</option>
          <option value="3"> Mazowieckie</option>
          <option value="4"> Podkarpackie</option>
      	</select> <br/><br/> 
        <p>Proszę podać swoją opinię:</p>
      	<textarea name="poletekstu" rows="5" cols="60" wrap="virtual">
      	</textarea>
        <br/>
        <input type="submit" />
      </form>
      </body>
      </html>
      
        
    5. Obsługa metody "POST" protokołu http w ramach skryptu php –- tablica $_POST[ ], skryptlab4_2.php"

      Plik lab4_2.php" - ( [listing dokumentu] [link do dokumentu] )

      <!doctype html>
      <html>
        <head>
        <tile>Skrypt php </title>
        <meta charset="UTF-8"/>
        </head>
        <body>
      <?php
      
      // Odczytanie przeslanych danych na serwer
      $select1   = $_POST['lista_wyboru_1'] ;
      $select2  = $_POST['lista_wyboru_2'] ;
      $select3   = $_POST['lista_wyboru_3'] ;
      $text  = $_POST['poletekstu'] ;
      
      
      // Wydrukowanie odebranych danych
      
      print "<p>Selekt 1 - ".$select1."</p>" ;
      print "<p>Select 2 - ".$select2."</p>" ;
      print "<p>Select 3 - ".$select3."</p>" ;
      print "<p>Lista wyboru 3</p>";
      print_r($select3);
      print "<p>Wprowadzony tekst - ".$text."</p>" ;
      
      
      ?>
         </body>
         </html>  

  2. Realizacja obliczeń w php i wykorzystanie funkcji logicznych
    1. W ramach tego zadania zostanie zaprezentowana możliwości realizacji prostych obliczeń po stronie serwera, wyniki obliczeń zostaną zwrócone w ramach tego samego formularza.
      Lab04_calc
      Rys.2 Przykładowe obliczenia z wykorzystaniem skryptu php.

      Skrypt lab4_5.php ( [listing dokumentu] [link do dokumentu] [widok dokumentu])

      <?php
      if ( isset ( $_POST['data1'] )) { $data1 = $_POST['data1'] ; }  else { $data1 = 0 ;}
      if ( isset ( $_POST['data2'] )) { $data2 = $_POST['data2'] ; }  else { $data2 = 0 ;}
      if ( isset ( $_POST['op']    )) { $op    = $_POST['op'] ; }     else { $op    = 0 ;}
      $error = "" ;
      switch  ( $op )
        {
            case 1:
              $res = $data1 + $data2 ;
              break ;
            case 2:
              $res = $data1 - $data2 ;
              break ;
            case 3:
              $res = $data1 * $data2 ;
              break ;
            case 4:
              if ( $data2 == 0 )
                { $error = "Zmienna nie moze byc rowna 0" ; $res = 0 ; }
              else  
                { $res = $data1 / $data2 ;  }
              break ;        
            case 0:
              $res = 0 ;
              break ;                
        }
      
      ?>
      
      <form action="lab4_5.php" method="post" >
         <table>
           <tr><td>Wartosc 1 </td><td><input type="text" name="data1"  value="<?php print $data1 ?>" /></td><td></td></tr>
           <tr><td>Wartosc 2 </td><td><input type="text" name="data2"  value="<?php print $data2 ?>" /></td><td><?php print $error ?></tr>
           <tr><td>Operacja  </td><td>( [+] <input type="radio" name="op"  value="1" />,
                                        [-] <input type="radio" name="op"  value="2" />,
                                        [*] <input type="radio" name="op"  value="3" />,
                                        [/] <input type="radio" name="op"  value="4" /> )</td><td></td></tr>
           <tr><td>Wynik </td><td><?php print $res ?></td><td></td></tr>
           <tr><td></td><td><input type="submit" /></td><td></td></tr>
         </table> 
       </form>            
        

  3. Obsługa plików w języku php
    1. W ramach tego zadania przedstawiona zostanie możliwość obsługi plików z poziomu skryptów php. DO odczytu plik może mieć ustwioną tylko flagę odczytu, jednak zapis jest możliwy dopiero po uzyskaniu odpowiedniej flagi umożliwiającej jego utworzenie czy zaspis ( względnie nadpisanie ). W ramach zadania poznamy następujące funkcje:
      • file_exist(fname) - sprawdzenie czy plik "fname" istnieje
      • fopen(fname,parametr) - otwarcie pliku "fname" oraz atrybut "parametr" ustawiający mod pracy
      • fclose() - zamknięcie pliku
      • fwrite() - zapis danych do pliku
      • fgets() - odczyt danych z pliku
    2. Zapis przykładowych danych do pliku –- skrypt lab4_3.php

      Skrypt lab4_3.php ( [listing dokumentu] [link do dokumentu] [widok dokumentu])

      <?php
      $nazwa = "test.txt"  ;
       if (file_exists($nazwa)) 
         { echo "Plik $nazwa istnieje <br/>"; $uchwyt = fopen($nazwa,"a");  } 
       else 
         { echo "Plik $nazwa nie istnieje <br />"; $uchwyt = fopen($nazwa,"w"); }  
      /*
       *  Zapis danych do pliku
       *  $tekst - zmienna zawiera dane do zapisu
       *  - funkcja fwrite() zapisuje dane do pliku
       */
       $tekst = "Przykladowy tekst do zapisu w pliku \n" ;
       fwrite($uchwyt,$tekst) ; 
       print  "Dane zostaly zapisane do pliku."
      ?>
        
    3. Odczyt zapisanych w poprzednim punkcie danych z pliku -– skrypt lab4_4.php

      Skrypt lab4_4.php ( [listing dokumentu] [link do dokumentu] [widok dokumentu])

      <?php
      $nazwa = "test.txt" ;
      $uchwyt = fopen($nazwa,"r") ;
      while ( false !== ($linia = fgets($uchwyt)) )
         {  
            print $linia."<br/>" ;                           
         } 
      ?>
        

  4. Mini portal WWW, szablony w serwisie WWW, realizacja w języku php
      • W ramach zadania opracujemy serwis WWW oparty jest o pewien szablon, który składa się z elementów stałych (powtarzalnych) na kolejnych stronach i elementu zmiennego, w którym umieszczamy treść kolejnych stron serwisu. Przykładowy szablon serwisu WWW przedstawiono na rysunku rys.4).
      • Szablon składa się z pól: nagłówek (element <header>), stopka (element <footer>) oraz menu (element <nav>), które są powtarzane na kolejnych stronach. Elementem centralnym szablonu jest pole "zawartość" (element <section>), w którym umieszczamy odpowiednią treść. Wykorzystanie szablonu ułatwia modyfikację stron, jak również jego rozbudowę.
      • W przypadku serwisu opartego o strony statyczne napisane w języku HTML, należy w przypadku modyfikacji zawartości pól stałych (nagłówek, stopka czy menu) uaktualnić wszystkie strony zawierające modyfikowaną informację. Dodanie nowej strony, wymaga też modyfikacji pola "menu", które znajduję się na każdej stronie.
      • W przypadku serwisu dynamicznego opartego o szablon i język php, będzie wymagana tylko jednokrotna modyfikacja, tylko w dokumencie, który zawiera modyfikowaną zawartość. Również dodanie nowych stron do serwisu, który wymaga modyfikacji "menu" jest wykonywane jednokrotnie dla pliku z zawartością "menu".
      • Wykorzystanie w serwisie języka php umożliwia dynamiczne tworzenie kolejnych stron WWW, jako kompilacji kilku plików, w których zawarta jest treść odpowiednich pól. W ramach naszej prostej aplikacji wykorzystamy polecenie "include", które daje możliwość wprowadzenia do pliku zawartości innego pliku. Nasza aplikacja będzie składała się z kilku plików.
      • Najważniejszym plikiem jest "lab4_index.php". Podstawowym zadaniem realizowanym w ramach tego pliku jest wygenerowanie odpowiedzi na żądanie klienta z odpowiednich plików składowych. Odpowiedź serwisu jest tworzona na podstawie informacji przesłanej przez klienta w nagłówku żądania "lab4_index.php?page=main" (informacja o stronie zawarta jest po znaku ?). W tym przypadku klient prosi o przesłanie strony głównej serwisu, wartość zmiennej "page" wynosi "main". Wartość zmiennej odczytamy z tablicy $_GET[] poleceniem "$page = $_GET['page']".
      Lab04_portal
      Rys.3 Miniportal, struktura plików w szablonie.
    1. Opracowujemy podstawowy plik obsługujący serwis – lab4_index.php

      Skrypt lab4_index.php ( [listing dokumentu] [link do dokumentu] [widok dokumentu])

      <?php
      header ( "content-type: text/html; charset=ISO-8859-2" ) ;
      // wczytanie zmiennej informujacej, do której strony odwołuje się nasze żądanie
      // format żadania http - index.php?page='main' (odwołanie do strony głównej)
      if ( isset($_GET['page']) ) { $page =  $_GET['page'] ; } else { $page = 'main' ; }
      // zmienna umożliwiająca wczytannie elementów strony
      $add_file = 'true' ;
      // wczytanie nagłówka strony
      include "lab4_header.php" ;
      // wczytanie menu naszego serwisu
      include "lab4_menu.php" ;
      // wczytanie zawartości określonych stron
      switch ($page)
      {
          case 'main':    
            //  wczytanie zawartości strony głównej
            include "lab4_main.php" ;      
            break ;      
          case 'page1':        
            // wczytanaie zawartości kolejnej strony
            include "lab4_page1.php" ;      
            break ;      
          case 'page2':        
            // wczytanaie zawartości kolejnej strony
            include "lab4_page2.php" ;      
            break ;      
          case 'page3':        
            // wczytanaie zawartości kolejnej strony
            include "lab4_page3.php" ;      
            break ;
      }
      // wczytanie stopki naszej strony
      include "lab4_footer.php" ;
      ?>
        
    2. Opracowanie plików opisujących zawartość nagłówka, menu i stopki naszego serwisu

      Skrypt lab4_header.php ( [listing dokumentu] [link do dokumentu] )

      <?php
      // sprawdzenie czy plik jest częścią wywołania przez plik zawierający zmienną $add_file
      if ( ! $add_file ) exit ;
      ?>
      <!-- naglowek serwisu WWW, wygenerowane w dniu - <?php  echo date("F j, Y, g:i a");  ?>  -->
      <html>
        <head>  
          <title>Przykładowa strona</title>    
          <link rel="stylesheet" href="lab4_main.css" type="text/css" media="screen" > 
        </head>  
        <body>  
        <div id="body">  
           <div id="header">       
              <p style="font-size:15px; padding-top:10px" >Podyplomowy kurs dla nauczycieli</p>
           </div>
      
      
        

      Skrypt lab4_footer.php ( [listing dokumentu] [link do dokumentu] )

      <?php
      // sprawdzenie czy plik jest częścią wywołania przez plik zawierający zmienną $add_page
      if ( ! $add_file ) exit ;
      
      ?>
            <!-- stopka serwisu WWW, wygenerowane w dniu - <?php  echo date("F j, Y, g:i a");  ?>  -->
            <div id="footer"> 
      	      SPN &copy; 2023 Kraków 
            </div>  
          </div>
        </body> 
      </html>  

      Skrypt lab4_menu.php ( [listing dokumentu] [link do dokumentu] )

      <?php
      // sprawdzenie czy plik jest częścią wywołania przez plik zawierający zmienną $add_page
      if ( ! $add_file ) exit ;
      ?>
      <!--     Menu serwisu www, wygenerowane w dniu - <?php  echo date("F j, Y, g:i a");  ?> -->
      <div id="menu">
      <a href="lab4_index.php?page=main" >Strona główna</a><br/>
      <a href="lab4_index.php?page=page1" >Strona 1</a><br />
      <a href="lab4_index.php?page=page2" >Strona 2</a><br />
      <a href="lab4_index.php?page=page3" >Strona 3</a><br />
      </div>
        
    3. Opracowanie pliku zawierającego zawartość strony powitalnej naszego serwisu

      Skrypt lab4_main.php ( [listing dokumentu] [link do dokumentu] )

      <?php
      // sprawdzenie czy plik jest częścią wywołania przez plik zawierajcący zmienną $add_page
      if ( ! $add_file ) exit ;
      ?>
      <!--  Zawartosc strony glownej, wygenerowane w dniu - <?php  echo date("F j, Y, g:i a");  ?>  -->
      <div id="content" >
        <h1>Strona główna projektu</h1>
        <p>To jest przykładowy serwis z wykorzystaniem języka php.</p>
      </div>
        
    4. Dodajemy plik styli formatujący nasz serwis

      Skrypt lab4_main.css ( [listing dokumentu] [link do dokumentu] )

      #body  { width:800px; border:solid 2px #0033FF; }
      #header { width:798px; height: 50px; border:solid 1px red; text-align:center }
      #menu { height : 250px; width:150px; border:solid 1px red; float:left;  }
      #menu p { padding:5px; margin:0px }
      #content { border:solid 1px red; float:left; height : 250px; width:646px;  }
      #content img { float:right }
      #content h1 { color:navy; font-size:12pt; text-align:center }
      #content h2 { color:green; font-size:12pt; text-align:center}
      #content p.italic { font-style:italic }
      #footer { border:solid 1px red; clear:both; text-align:center; color:blue }
        
    5. Na koniec tworzymy kolejne strony naszego serwisu.

      Skrypt lab4_page1.php ( [listing dokumentu] [link do dokumentu] )

      <?php
      // sprawdzenie czy plik jest częścią wywołania przez plik zawierający zmienną $add_page
      if ( ! $add_file ) exit ;
      ?>
      <div id="content" >
        <p>Strona 1</p>  
      </div>
        

      Skrypt lab4_page2.php ( [listing dokumentu] [link do dokumentu] )

      <?php
      // sprawdzenie czy plik jest częścią wywołania przez plik zawierający zmienną $add_page
      if ( ! $add_file ) exit ;
      ?>
      <div id="content" >
        <p>Strona 2</p>  
      </div>
        

      Skrypt lab4_page3.php ( [listing dokumentu] [link do dokumentu] )

      <?php
      // sprawdzenie czy plik jest częścią wywołania przez plik zawierający zmienną $add_page
      if ( ! $add_file ) exit ;
      ?>
      <div id="content" >
        <p>Strona 2</p>  
      </div>
        
    Zadanie 1.

    Zmodyfikować mini portal wypełniając nową treścią.

  5. Prosty system ankietowy
    1. W ramach tego zadania opracujemy prosty system do przeprowadzenia ankiety. Pierwszy skrypt zawiera pytanie ankietowe (rys.4), natomiast drugi przetwarza wysłane dane i wyświetla wyniki ankiety uzyskane w ramach ankiety (rys.5).
      Lab04_ankieta1
      Rys.4 Formularz ankiety.
      Lab04_ankieta2
      Rys.5 Wyniki ankiety.
    2. W ramach systemu należy opracować dwa pliki – jeden umożliwiający przeprowadzenie ankiety, oraz drugi odczytujący z pliku odpowiedzi ankietowanych osób.

      Skrypt lab4_6.html ( [listing dokumentu] [link do dokumentu] [widok dokumentu])

      <!doctype html>
      <html>
       <head>
       <title>Lab2 - ankieta</title>
       <meta charset="UTF-8">
       </head>
       <body>
       <form action="lab4_6.php" method="post" >
         <input type="hidden" value="ok" name="send" />
         <table>
      
           <tr><td>Gdzie lubisz spędzać najchętniej wakacje?</td></tr>
           <tr><td><input type="radio" name="pp"  value="1" />nad morzam</td></tr>
           <tr><td><input type="radio" name="pp"  value="2" />w górach</td></tr>
           <tr><td><input type="radio" name="pp"  value="3" />w mieście</td></tr>
           <tr><td><input type="radio" name="pp"  value="4" />na wsi</td></tr>
           <tr><td><input type="radio" name="pp"  value="5" />w domu</td></tr>
           <tr><td><input type="radio" name="pp"  value="6" />nad jeziorami</td></tr>
           <tr><td><input type="radio" name="pp"  value="7" />w lesie</td></tr>                                                                 
           <tr><td><input type="submit" /></td></tr>
         </table>    
       </form>   
      </body>
      </html>
        

      Skrypt lab4_6.php ( [listing dokumentu] [link do dokumentu] )

      <?php
      
      if ( isset ($_POST['send']) and $_POST['send'] == 'ok' )
      {
        if ( isset ( $_POST['pp'] )) { $pp = $_POST['pp'] ; }  else { $pp = 0 ; }
        $nazwa = "ankieta.txt"  ;
        if (file_exists($nazwa)) {  
            //echo "Plik $nazwa istnieje";
            $uchwyt = fopen($nazwa,"r");
            //  
            $linia = fgets($uchwyt) ; 
            fclose($uchwyt) ;   
            $w = explode(":", $linia) ;                                  
        } else {  
            $w = array ( 0, 0, 0, 0, 0, 0, 0) ;
        } 
      
        if ( $pp <> 0 ) {
            $w[$pp-1] ++  ;
          } 
      
       //echo "Plik $nazwa istnieje";
        $uchwyt = fopen($nazwa,"w");
        $record = "" ;
        $mrec   = 0 ;
            
        for ( $ii=0; $ii<7; $ii++ )
         { $record .= $w[$ii].":" ;
           $mrec += $w[$ii] ;  
            }       
             
        /*
         *  Zapis danych do pliku
         *  $tekst - zmienna zawiera dane dotyczace jednej odpowiedzi testu 
         *  - funkcja fwrite() zapisuje dane do pliku
         */
       
        fwrite($uchwyt,$record) ;         
      }
      ?>
      
      <html>
       <head>
         <title>Lab2 - wyniki ankiety<</title>
         <meta charset="UTF-8">
       </head>
       <body>  
       <p style="font-weight:bold">Wyniki sondy w procentach:</p>         
       <table>
         <tr><td>nad morzam</td><td style="text-align:right"><?php print number_format($w[0]*100/$mrec, 2, ',', ''); ?> %</td></tr>
         <tr><td>w górach</td><td style="text-align:right"><?php print number_format($w[1]*100/$mrec, 2, ',', ''); ?> %</td></tr>
         <tr><td>w mieście</td><td style="text-align:right"><?php print number_format($w[2]*100/$mrec, 2, ',', ''); ?> %</td></tr>
         <tr><td>na wsi</</td><td style="text-align:right"><?php print number_format($w[3]*100/$mrec, 2, ',', ''); ?> %</td></tr>
         <tr><td>w domu</</td><td style="text-align:right"><?php print number_format($w[4]*100/$mrec, 2, ',', ''); ?> %</td></tr>
         <tr><td>nad jeziorami</td><td style="text-align:right"><?php print number_format($w[5]*100/$mrec, 2, ',', ''); ?> %</td></tr>
         <tr><td>w lesie</td></td><td style="text-align:right"><?php print number_format($w[6]*100/$mrec, 2, ',', ''); ?> %</td></tr>
        </table>                         
        </body>
       </html> 
        
    Zadanie 2.

    Zmodyfikować system ankietowy wypełniając nową treścią ( co najmniej 9 możliwości do wyboru ).

  6. Prosty system logowania do serwisu
    1. W ramach serwisu opracowana zostanie strona powitalna, plik z kontami i hasłami użytkowników dopuszczonych do serwisu oraz plik dla użytkownika serwisu i plik informujący o braku dostępu do serwisu.
    2. Strona logowania do serwisu – skrypt lab4_7.html

      Skrypt lab4_7.html ( [listing dokumentu] [link do dokumentu] [widok dokumentu])

      <!doctype html>
      <html>
      <head>
      <title>Projekt - lab4 f</title>
      </head>
      <body>
        <div>
           <form action="lab4_7.php" method="post" >
              <table>
               <tr><td>Uzytkownik: </td><td><input type="text" name="user" /></td></tr>
               <tr><td>Haslo:      </td><td><input type="password" name="pass" /></td></tr>
               <tr><td>            </td><td><input type="submit" /></td></tr>
              </table> 
           </form> 
        </div>
      </body>
      </html>
          
    3. Opracowanie pliku odczytującego przesłane dane użytkownika i sprawdzającego jego uwierzytelnienie w serwisie – skrypt lab4_7.php

      Skrypt lab4_7.php ( [listing dokumentu] link do dokumentu )

      <?php
      if ( isset($_POST['user']) ) { $user=trim($_POST['user']) ; } else { $user='' ;}
      if ( isset($_POST['pass']) ) { $pass=trim($_POST['pass']) ; } else { $pass='' ;}
      
      $nazwa = "users.txt" ;
      // $home  = "http://orion.fis.agh.edu.pl/~antek/spn/proj/" ;
      
      if (file_exists($nazwa)) 
       {       
          //echo "Plik $nazwa istnieje"
          $uchwyt = fopen($nazwa,"r");
          $ok = 0 ;
          while ( false !== ($linia = fgets($uchwyt)) )
           {
             list($usr,$pas) = explode(":",$linia) ;
             if ( $user == $usr and $pass == $pas )  { $ok = 1 ; }
           }
       }     
      else
       {  
          header ( "Location: lab4_7e.html") ;
       }   
       
      if ( $ok != 1 )
        { header ( "Location: lab4_7e.html") ; }        
      ?>
      <html>
        <head>
          <title>Projekt 2 - strona zastrzeżona</title>
        </head>
        <body>
          <h1>Strona zastrzezona</h1>
          <p>Strona zostala wyswietlona po poprawnym wpisaniu hasla.</p>
        </body>
      </html>
          
    4. Strona wyświetlana w przypadku braku pliku z użytkownikami lub niepoprawnym logowaniu – skrypt lab4_7e.html

      Skrypt lab4_7e.html ( [listing dokumentu] link do dokumentu )

      <!doctype html>
      <html>
        <head>
           <title>Projekt 7 - blad logowania</title>
        </head>
        <body>
           <p>Blad logowania - <a href="lab4_7.html">przejdz do strony logowania.</a></p>
        </body>  
      </html>
          
    5. Plik z użytkownikami i ich hasłami users.txt
      user:password:
      tester:pass:       
      

  7. Prosty system testu w języku php
    1. W ramach zadania zostanie opracowany prosty system do realizacji testu wyboru z wykorzystaniem technologii WWW. System składa się z skryptu napisanego w języku php który generuje stronę html z pytaniami testu. Strona jest generowana na podstawie danych zawartych w pliku tekstowym. Do poprawnej pracy systemu opracowano też skrypty zapisujące wyniki pojedynczego testu do pliku odpowiedzi i skrypt odczytujący wyniki przeprowadzonego testu.
    2. Skrypt w php, który na podstawie danych zawartych w pliku "lab4_8p.txt" generuje formularz testowy. Skrypt składa się z dwóch logicznych części. W pierwszej części odczytuje dane z pliku, natomiast w drugiej tworzy dynamicznie formularz html.

      Skrypt lab4_8a.php ( [listing dokumentu] [link do dokumentu] [widok dokumentu])

      <html>
        <head>
          <title>Sprawdzian</title>
        </head>
        <body>
          <h2>Sprawdzian</h2>
          <div>Podaj nazwisko, imie oraz wybierz odpowiednie odpowiedzi:
            <form action="lab4_8w.php" method="post">
            <table>
              <tr>
                 <td>Nazwisko</td>
                 <td><input type="text" name="nazwisko" /></td>
              </tr>  
              <tr>
                 <td>Imie</td>
                 <td><input type="text" name="imie" /></td>
              </tr>          
      <?php  
         /*
          *  Kod php czytajacy plik z pytaniami i tworzacy pozostala czesc strony
          *      
          */           
         $nazwa  = "lab4_8p.txt" ;    
         if (file_exists($nazwa)) { 
            $uchwyt = fopen($nazwa,"r") ;
            $dane = fgets($uchwyt) ;
            list ($n_pyt,$n_odp) = explode (":",$dane) ;
              for ( $i1=0; $i1<$n_pyt; $i1++ ) {
                $dane = fgets($uchwyt) ;
                list ($nr, $pytanie) = explode (":", $dane) ;   
                $text  = "<tr>" ;   
                $ii = $i1+1 ;
                $text .= "<td>Pytanie ".$ii."</td><td>" ;
                $text .= "<span style=\" font-weight: bold \">".$pytanie."</span>" ;         
                for ( $i2=0; $i2<$n_odp; $i2++ )
                  {
                     $dane = fgets ($uchwyt) ;
                     list ( $odp, $txt ) = explode (":", $dane) ;
                     $text .= "<br><input type=\"radio\" name=\"pyt".$i1."\" value=\"".$i2."\"/>".$txt ;
                  } 
                $text .= "</td></tr>" ;
                print $text ;
              }
              echo "  <tr>
                        <td><input type=\"reset\" /></td>
                        <td><input type=\"submit\" name=\"wyslij\" value=\"Wyslij\" /></td>
                      </tr>" ;        
            }
         else
            {
               print "<tr><td colspan=\"2\"><span style=\" font-weight: bold \"> Brak pliku '".$nazwa."' z pytaniami </span></td></tr>" ;
            }         
      ?>                                                 
            </table>
            </form>
          </div>  
        </body>
      </html>    
         
    3. Plik zawiera skrypt, który weryfikuje przesłane odpowiedzi z formularza testu a następnie zapisuje je do pliku odpowiedzi. Skrypt składa się z trzech części. Na początku czytany jest plik zawierający pytania testowe i tworzona jest tablica odpowiedzi ($odp), która zostanie wykorzystana do weryfikacji odpowiedzi. Tablica jest dwuwymiarowa i w kolejnych wierszach zawiera informację o poprawności odpowiedzi - kolumny tablicy. W następnej części skryptu odczytywane są przesłane dane z formularza (zmienne $_POST). Na podstawie przesłanego numeru pytania i numeru odpowiedzi wybieramy pozycję z tabeli odpowiedzi ($odp). Jeżeli odpowiedź jest prawidłowa to zostanie wybrana wartość 1 i w przypadku wyboru błędnej odpowiedzi zostanie wybrana wartość 0. Wyniki weryfikacji odpowiedzi na pytania testowe umieszczamy w rekordzie danych zawierającym dane w następującej kolejności: nazwisko uczestnika, imię, data testu, kolejne odpowiedzi na pytania testowe i na koniec suma poprawnych odpowiedzi. Kolejne pola rekordu rozdzielane są znakiem #. Rekord ten jest dopisywany do pliku zawierającego odpowiedzi uczestników testu. Przykładowy rekord w pliku odpowiedzi: Abacki#Adam#8/12/2013#1#1#1#0#3#.

      Skrypt lab4_8w.php ( [listing dokumentu] [link do dokumentu] [widok dokumentu])

      <?php
      
      /*   
       *   Aplikacja czyjaca dane z testu
       *   SPN laboratorium 5
       *   wersja 0.92 - bez uzycia tablic
       *   07.01.2021
       *     
       *  $nazwa - zmienna zawiera nazwe pliku z wynikami testu
       *  - funkcja file_exists() - sprawdza czy plik istnieje
       *  - w przypadku prawdy (plik istnieje) otwieramy w modzie dodawania danych
       *  - w przypadku falszu (plik nie istnieje) otwieramy do zapisu (tworzymy)
       *  
       */
      
      date_default_timezone_set('Europe/Berlin');
      if ( isset ($_SERVER['HTTP_REFERER']) ) { $referer = $_SERVER['HTTP_REFERER'] ; } else { $referer = "" ; }
      // print "---- ".$referer." ------ <br>" ;
      if( preg_match('#lab2_8a.php#is', $referer) )
      {  
        // Wczytanie danych z pliku pytania.txt - ilosc pytani i tablicy odpowiedzi
        $pytania = "lab4_8p.txt" ;
        if (file_exists($pytania)) { 
           $uchwyt1 = fopen ($pytania,"r") ;
           $dane = fgets ($uchwyt1) ;
           list( $n_pyt, $n_odp ) = explode(":", $dane) ;    
           for ( $i1=0; $i1<$n_pyt; $i1++ ) {
             $dane = fgets($uchwyt1) ;       
             for ( $i2=0; $i2<$n_odp; $i2++ )
               {
                  $dane = fgets ($uchwyt1) ;
                  list ( $data, $txt ) = explode (":", $dane) ; 
                  $odp[$i1][$i2] = $data ;
               } 
             }     
           // print_r ( $odp ) ;  
           fclose ($uchwyt1) ;  
          }
        else {  
           print "<p style=\" font-weight: bold \"> Brak pliku '".$nazwa."' z pytaniami </p>" ;
           exit ;
          }
            
        /*
         *  Czytamy przeslane dane z testu i umieszczamy w odpowiednich zmiennych
         *    
         */
       
        // Wczytanie danych z pliku wyniki.txt i wydruk na strone WWW
        $nazwa = "wyniki.txt"  ;
      
        if (file_exists($nazwa)) {  
            //echo "Plik $nazwa istnieje";
            $uchwyt2 = fopen($nazwa,"a");  
        } else {  
            //echo "Plik $nazwa nie istnieje"; 
            $uchwyt2 = fopen($nazwa,"w"); 
        } 
      
        $nazwisko = $_POST['nazwisko'] ;
        $rekord   = $nazwisko."#" ;
        $imie     = $_POST['imie'] ;
        $rekord  .= $imie."#" ;
        $data     = date("Y.m.d H:m:s") ;
        $rekord  .= $data."#" ;
        
        $suma = 0 ;
        for ( $ii=0; $ii<$n_pyt; $ii++ ) {
           $pyt     = "pyt".$ii ;
           $id      = $_POST[$pyt] ;
           $suma   += $odp[$ii][$id] ;
           $rekord .= $id."#" ;
        }
        $rekord    .= "\n" ;
        
        /*
         *  Zapis danych do pliku
         *  $tekst - zmienna zawiera dane dotyczace jednej odpowiedzi testu 
         *  - funkcja fwrite() zapisuje dane do pliku
         */
       
         fwrite($uchwyt2,$rekord) ;  
       
         print "<p style=\" font-weight: bold \"> Odpowiedzi zostaly zapisane do pliku. </p>" ;
         print "<p style=\" font-weight: bold \"> Ilosc poprawnych odpowiedzi $suma na $n_pyt pytan. </p>" ;
      }
       
      
      ?>  
    4. Plik zawiera skrypt odczytujący wyniki przeprowadzonego testu i prezentuje je w odpowiedniej tabeli generowanej dynamicznie

      Skrypt lab4_8r.php ( [listing dokumentu] [link do dokumentu] [widok dokumentu])

      <?php
      
      /*
       * Lista osob plus wyniki odpowiedzi w tablicy
       *   SPN laboratorium 2  
       * Wersja 0.90 - 07.01.2021
       *   
       * Otwieramy plik wyniki.txt do odczytu i czytamy dane
       * - tablica $odpowiedz zawiera poprawne numery odpowiedzi
       * - zmienna $ocena zawiera ilosc poprawnych odpowiedzi
       * - tablica $stat zawiera ilosc poprawnych odpowiedzi na pytania 
       *     
       */      
      
      // Wczytanie danych z pliku pytania.txt - ilosc pytani i tablicy odpowiedzi
        $pytania = "lab4_8p.txt" ;
        if (file_exists($pytania)) { 
           $uchwyt1 = fopen ($pytania,"r") ;
           $dane = fgets ($uchwyt1) ;
           list( $n_pyt, $n_odp ) = explode(":", $dane) ;    
           for ( $i1=0; $i1<$n_pyt; $i1++ ) {
             $dane = fgets($uchwyt1) ;       
             for ( $i2=0; $i2<$n_odp; $i2++ )
               {
                  $dane = fgets ($uchwyt1) ;
                  list ( $data, $txt ) = explode (":", $dane) ; 
                  $odp[$i1][$i2] = $data ;
               } 
             }       
           fclose ($uchwyt1) ;  
          }
        else {  
           print "<p style=\" font-weight: bold \"> Brak pliku '".$nazwa."' z pytaniami </p>" ;
           exit ;
          }
      
      // Wczytanie danych z pliku wyniki.txt i wydruk na strone WWW
        $nazwa = "wyniki.txt" ;
        if ( file_exists($nazwa) ) { 
           $uchwyt2 = fopen($nazwa,"r") ;
           $ocena = 0 ; 
           print "<table border='1'>" ;
           print "<tr><th>Nazwisko</th><th>Imie</th><th>Data</th>" ;
           for ( $ii=1; $ii<$n_pyt+1; $ii++ )
             {  print "<th>Pyt_".$ii."</th>" ; }
           print "<th>Punkty</th></tr>" ;
           $stat = array() ;
           for ( $ii=0; $ii<$n_pyt; $ii++ )
             {  $stat[$ii] = 0 ; }
           while ( false !== ($rekord = fgets($uchwyt2)) )
            {
              $ocena = 0;
              $tablica = explode("#",$rekord) ;
              $tekst  = "<tr>" ;
              $tekst .= "<td>".$tablica[0]."</td>" ;
              $tekst .= "<td>".$tablica[1]."</td>" ; 
              $tekst .= "<td>".$tablica[2]."</td>" ;        
              for ( $ii=0; $ii<$n_pyt; $ii++ ) {
                if ( $tablica[$ii+3] !== "" ) {
                  $num_odp = $tablica[$ii+3] ;
                  if ( $odp[$ii][$num_odp] == 1 ) { $ocena += 1; $stat[$ii] += 1 ; }
                  $odpowiedz = $tablica[$ii+3]+1 ;
                  $tekst .= "<td>".$odpowiedz."</td>" ;  
                  }
                else {
                  $tekst .= "<td>&nbsp;</td>" ; 
                  }
                }                             
              $tekst .= "<td><span style=\" font-weight: bold \">".$ocena."</span></td>" ;          
              $tekst .= "</tr>" ;   
              print $tekst ;                                 
            }
           $tekst = "<tr><td colspan=\"3\">Statystyka</td>" ;
           for ( $ii=0; $ii<$n_pyt; $ii++ ) {
              $tekst .= "<td><span style=\" font-weight: bold \">".$stat[$ii]."</span></td>" ;
             }  
           $tekst .= "<td>&nbsp;</td></tr>" ;
           print $tekst ;  
           print "</table>" ;  
         }
      ?>  
    5. plik zawiera pytania i odpowiedzi testowe. W pierwszej linii pliku podana jest liczba pytań i odpowiedzi rozdzielona znakiem dwukropka. W kolejnych liniach pliku umieszczamy cyklicznie pytania i odpowiedzi według następującego schematu - rekord z pytaniem i odpowiednia ilość odpowiedzi zgodna z deklaracją z rekordu pierwszego. Rekord odpowiedzi składa się z dwóch części rozdzielonych znakiem dwukropka. W pierwszej umieszczamy informację o poprawności odpowiedzi (0 - odpowiedź niepoprawna, 1 - odpowiedź poprawna). W drugiej części umieszczamy tekst odpowiedzi. Sekcje z pytaniami i odpowiedziami powtarzamy zgodnie z liczba pytań podaną w rekordzie pierwszym.

      Skrypt lab4_8p.txt ( [listing dokumentu] [link do dokumentu] [widok dokumentu])

      6:4
      1:Pytanie 1
      0:Odp 1
      1:Odp 2
      0:Odp 3
      0:Odp 4
      2:Pytanie 2
      0:Odp 1
      1:Odp 2
      0:Odp 3
      0:Odp 4
      3:Pytanie 3
      0:Odp 1
      1:Odp 2
      0:Odp 3
      0:Odp 4
      4:Pytanie 4
      0:Odp 1
      1:Odp 2
      0:Odp 3
      0:Odp 4
      5:Pytanie 5
      0:Odp 1
      1:Odp 2
      0:Odp 3
      0:Odp 4
      6:Pytanie 6
      0:Odp 1
      1:Odp 2
      0:Odp 3
      0:Odp 4  
    Zadanie 3.

    Zmodyfikować system testów wypełniając nową treścią.

  8. Tablice globalne w php
    1. Skrypt lab4_9.php ( [listing dokumentu] [link do dokumentu] [widok dokumentu])

      <?php
      
        function prn_server () {
           echo 'Tablica $_SERVER <br/>';
           echo "=================<br/>";
           foreach ( $_SERVER as $key => $value )
              print '$_SERVER['.$key.'] = '.$value.'<br/>' ;
        }
       
        function prn_post () {
           echo 'Tablica $_POST <br/>';
           echo "===============<br/>";
           foreach ( $_POST as $key => $value )
              print '$_POST['.$key.'] = '.$value.'<br/>' ;
        } 
       
        function prn_get () {
           echo 'Tablica $_GET <br/>';
           echo "==============<br/>";
           foreach ( $_GET as $key => $value )
              print '$_GET['.$key.'] = '.$value.'<br/>' ;
        }
       
        function prn_cookie () {
           echo 'Tablica $_COOKIE <br/>';
           echo "=================<br/>";
           foreach ( $_COOKIE as $key => $value )
              print '$_COOKIE['.$key.'] = '.$value.'<br/>' ;
        }
       
        function prn_session () {
           echo 'Tablica $_SESSION <br/>';
           echo "==================<br>";
           foreach ( $_SESSION as $key => $value )
              print '$_SESSION['.$key.'] = '.$value.'<br/>' ;
        }
      
      prn_server();
      prn_post();
      prn_get();
      prn_cookie();
      prn_session();
      
      ?>