Spis treści

Laboratorium, PHP # 2

Ćwiczenie 1: Pliki

  1. Umiesc wybranym, dostępnym dla serwera WWW, katalogu kilka (4-5) obrazków JPG w niewielkiej rozdzielczości.
  2. Napisz skrypt galeria.php, który będzie generował dokument (X)HTML z w/w obrazkami, tak aby tworzyły galerię. Obrazki mogą być umieszczane w dokumencie np. jeden za drugim, albo jeden pod drugim. Przydatne funkcje: glob() albo scandir().
  3. Dopisz do skrytpu galeria.php możliwość usuwanie obrazów z galerii:
    1. przy każdym obrazku dodaj hiperpołączenie do skryptu z parametrem identyfikującym obrazek do usunięcia np. przy obrazku będącyw w pliku mojobraz.jpg dodaj hiperpołączenie: galeria.php?usun=mojobraz.jpg
    2. zmodyfikuj skrypt tak aby po otrzymaniu metodą GET atrybutu usun usuwał plik o nazwie będącej jego wartością.
  4. Dopisz do skrytpu galeria.php możliwość dodawania obrazów z galerii (dodaj do skrytpu formularz HTML, za pomocą którego można przesłać plik).

Uwaga: Plik można usunąć korzystając z funkcji unlink()

Informacje dodatkowe: Przesyłanie plików

Poniżej znajduje się przykładowy formularz umożliwiający przesłanie pliku:

h1.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Przykładowa obsługa plików</title>
    <meta http-equiv="content-type" 
          content="text/html;charset=UTF-8" />
  </head>
  <body>
    <form action="file.php" method="post"  
          enctype="multipart/form-data">
      <p>
        <input type="file" name="plik_pierwszy" />
        <input type="file" name="plik_drugi" />
        <input type="submit" value="wyślij" />
      </p>
    </form>
  </body>
</html>

oraz aplikacja PHP (uwaga: należy zachować plik pod nazwą file.php, gdzyż taka nazwa jest skonfigurowana w formularzu powyżej):

file.php
<?php
  var_dump($_FILES);
  if (move_uploaded_file(
        $_FILES['plik_pierwszy']['tmp_name'], 
        'nazwa_pliku_po_przeslaniu'))
    echo 'ok';
  else
    echo 'err';
?>

Ćwiczenie 2: (nadobowiązkowe) Współpraca z Bazami Danych

  1. Dopisz mechanizm uwierzytelniania, tak aby galeria była dostępna tylko dla tych, którzy przy próbie dostępu do galeria.php podadzą właściwą nazwę użytkownika i hasło.
  2. Nazwy i hasła przechowuj w bazie danych. Konieczne będzie utworzenie przynajmniej jednej tabeli np. uzytkownik z kolumnami odpowiednio: nazwa, haslo.

Celem zwiększenia bezpieczeństwa hasło nie powinno być przechowywane jawnie, ale jako wartość funkcji skrótu np. korzystając z md5() albo sha().

Informacje dodatkowe: Baza danych MySQL

Bazę danych MySQL można założyć korzystając z https://panel.agh.edu.pl

MySQL można użyć w poniższy sposób. Uwaga: kod przeznaczony dla PHP7 (w PHP5 obowiązywały inne nazwy funkcji, zamiast mysqli powinno być mysql, uległa również zmianie kolejność argumentów - zobacz w dokumentacji PHP: http://php.net/manual/en/ref.mysql.php oraz http://php.net/manual/en/ref.mysqli.php)

db1.php
$con_id=mysqli_connect('adres_serwera','nazwa_uzytkownika','haslo_do_bazy');
mysqli_select_db($con_id,'nazwa_bazy');
$query ='SELECT * FROM test;';                  // zapytanie 
$result = mysqli_query($con_id,$query);         // przesłanie zapytania
while ($myrow = mysqli_fetch_row($result)){     // iteracja po rezultacie
    echo $myrow[1];
} 
mysqli_free_result($result);                    // zwolnienie zasobów związanych z zapytaniem
mysqli_close($con_id);                          // zamknięcie połączenia

Analogiczny kod dla PHP5:

db2.php
<?php
$con_id=mysql_connect('adres_serwera','nazwa_uzytkownika','haslo_do_bazy');
mysql_select_db('nazwa_bazy',$con_id);
$query ='SELECT * FROM test;'; 
$result = mysql_query($query,$con_id);
while ($myrow = mysql_fetch_row($result)){
    echo $myrow[1];
} 
mysql_free_result($result);
mysql_close($con_id);
?>
TOP TIP
Zauważ, że wyszukiwanie użytkowników po nazwie może być skutecznie zrealizowane przez bazę danych: SELECT haslo FROM uzytkownik WHERE nazwa='login';