Aplikacje internetowe

Podobne dokumenty
Aplikacje WWW - laboratorium

Aplikacje internetowe - laboratorium

Baza danych do przechowywania użytkowników

Zajęcia 11 wykorzystanie MySQL w PHP

ZAAWANSOWANE BAZY DANYCH I HURTOWNIE DANYCH MySQL, PHP

Zajęcia 13 wykorzystanie MySQL w PHP cz. 2

PHP + MySQL w laboratorium (1)

Internetowe bazy danych

Wprowadzenie do Internetu Zajęcia 5

Internetowe bazy danych

Aplikacje WWW - laboratorium

Komunikacja między klientem, a skryptem PHP, oraz operacje na plikach

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:

SIECI KOMPUTEROWE I BAZY DANYCH

Rejestracja i Logowania - PHP/MySQL

Systemy internetowe. Wykład 3 PHP. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

Autor: Joanna Karwowska

Języki skryptowe - PHP. PHP i bazy danych. Paweł Kasprowski. pawel@kasprowski.pl. vl07

Wysyłanie pliku na serwer. Plik na serwerze.

Współpraca PHP z MySql cz.2

Aplikacje WWW - laboratorium

E.14 Bazy Danych cz. 19 SQL i PHP współpraca przez stronę internetową

Współpraca PHP z MySql

Internetowe bazy danych

Dokumentacja smsapi wersja 1.4

Bazy danych. dr Radosław Matusik. radmat

Laboratorium 1 Wprowadzenie do PHP

Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Informatyki i Elektroniki

Systemy internetowe Wykład 3 PHP

Wykład 6: PHP: praca z bazą danych MySQL, cz.2

Bazy danych i usługi sieciowe

Bazy Danych i Usługi Sieciowe

Projekt strony internetowej firmy organizującej przyjęcia

Aplikacje WWW - laboratorium PHP + bazy danych

Technologie Internetowe Raport z wykonanego projektu Temat: Internetowy sklep elektroniczny

Wykład 5: PHP: praca z bazą danych MySQL

Obiektowe bazy danych

0.1 Logowanie do serwisu

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Dostęp do baz danych z serwisu www - PHP. Wydział Fizyki i Informatyki Stosowanej Joanna Paszkowska, 4 rok FK

Tworzenie witryn internetowych PHP/Java. (mgr inż. Marek Downar)

Dokumentacja interfejsu HTTPD. Platforma BSMS.PL Instrukcja podłączenia po przez http

Projektowanie aplikacji w modelu MVC opartej o framework CodeIgniter

Formularze HTML. dr Radosław Matusik. radmat

Bazy Danych i Usługi Sieciowe

Zajęcia 10 obsługa formularzy w PHP

Specyfikacja instalacji usługi SMS Premium w Przelewy24.pl

Zaawansowane bazy danych i hurtownie danych

Umieszczanie kodu. kod skryptu

Politechnika Częstochowska. Projektowanie systemów użytkowych II

Zagrożenia trywialne. Zagrożenia bezpieczeństwa aplikacji internetowych. Parametry ukryte. Modyfikowanie parametrów wywołania

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

Aplikacje WWW - laboratorium

SIECI KOMPUTEROWE I BAZY DANYCH

Język SQL, zajęcia nr 1

Dynamiczne generowanie pliku PDF

Sprzeg podstawowy do baz danych w PHP Mateusz Sowa, 2007

Bazy danych. Polecenia SQL

MVC w praktyce tworzymy system artykułów. cz. 2

Podstawowe wykorzystanie Hibernate

Przykład programu w PHP. Wykład10.PHP ciągdalszy,str.1

Zagadnienia. Konstrukcja bibliotek mysql i mysqli w PHP. Dynamiczne generowanie stron. Połączenie, zapytanie i sesja

I.Wojnicki, PHP. PHP PHP Hypertext Preprocessor. Igor Wojnicki. Katedra Informatyki Stosowanej Akademia Górniczo-Hutnicza w Krakowie

Internetowe bazy danych

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Wdrożenie modułu płatności eservice. dla systemu Zen Cart

Wykład 03 JavaScript. Michał Drabik

BAZY DANYCH. Obsługa bazy z poziomu języka PHP. opracowanie: Michał Lech

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Rysunek 1 Strona główna systemu Wibo

Podstawy programowania (PHP/Java)

Grafika PHP dla początkujących

Dokumentacja serwisu internetowego Zespołu Szkół Technicznych w Radomiu.

Sieci Komputerowe. Laboratorium 5 - usługi sieciowe cz. 1 Maciej Szymański 28 kwietnia 2014

Dokumentacja systemu NTP rekrut. Autor: Sławomir Miller

Zaawansowane bazy danych i hurtownie danych studia zaoczne II stopnia, sem. I

I.Wojnicki, JiTW. PHP PHP Hypertext Preprocessor. Igor Wojnicki. Katedra Informatyki Stosowanej Akademia Górniczo-Hutnicza w Krakowie.

Przykładowa integracja systemu tpay.com KIP S.A. ul. Św. Marcin 73/ Poznań.

Michał Bielecki, KNI 'BIOS'

Języki programowania wysokiego poziomu. PHP cz.3. Formularze

Systemy internetowe. Wykład 4 mysql. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

Instrukcja obsługi. Panel Klienta na stronie

Udostępnianie klientom zasobów serwera

SYSTEM ZARZĄDZANIA DANYMI OSOBOWYMI - INSTRUKCJA UŻYTKOWNIKA

INSTALACJA I KONFIGURACJA SERWERA PHP.

Dane - pobieranie, przekazywanie i przechowywanie. dr Beata Kuźmińska-Sołśnia

INTERNETOWE BAZY DANYCH materiały pomocnicze - wykład VII

Referat z przedmiotu Technologie Internetowe SPIS TREŚCI

Lekcja 10. Uprawnienia. Dołączanie plików przy pomocy funkcji include() Sprawdzanie, czy plik istnieje przy pmocy funkcji file_exists()

Udostępnianie klientom zasobów serwera

KatMPBSoft - 1 -

Przykładowa integracja systemu Transferuj.pl

Dlaczego PHP? - zalety

SYSTEMY TELEINFORMATYCZNE

Grafika PHP dla początkujących

Zadanie 4. Zadanie 5. Zadanie 6. Który z wymienionych znaczników należy do części <head> dokumentu HTML? A. <img> B. < tle> C. <span> D.

Instrukcja składania wniosku o dofinansowanie w systemie informatycznym IP na potrzeby konkursu nr 1/1.1.1/2015

SSK - Techniki Internetowe

Transkrypt:

Laboratorium 6 ZAKŁAD SYSTEMÓW ROZPROSZONYCH LABORATORIUM Aplikacje internetowe PHP + MySQL + biblioteka GD 1. Sprawdź czy istnieją pliki z poprzedniego laboratorium: cw_2.php, cw_3.php i cw_4.php. Przypomnij sobie stworzoną ostatnio strukturę bazy danych MySQL i dane użytkowników w PhpMyAdmin. Plik cw_3.php powinien wyglądać następująco: <?php session_start(); $connection = @mysql_connect("localhost", "user", "pass") or die("brak polaczenia"); $db = @mysql_select_db('moja_baza', $connection) or die("wybor nieudany"); $sql = "SELECT id,nazwa,haslo FROM uzytkownik"; $id = ""; while ($row = mysql_fetch_array($result)) { if ($_POST["nazwa"] == $row['nazwa'] && $_POST["haslo"] == $row['haslo']) { $id = $row['id']; $nazwa = $row['nazwa']; $haslo = $row['haslo']; php?> <title>php - cwiczenie 3</title> Witaj<p> Otrzymano nastepujace dane:<br> Zakład Systemów Rozproszonych - 1 / 10

<?php echo "Nazwa: <b>". $nazwa."</b> <br>"; echo "Haslo: <b>". $haslo."</b> <br>"; if ($id<>'') { echo 'Logowanie poprawne <br> echo '<a href="cw_4.php">dalej</a> <br> $_SESSION['zalogowany'] = "tak"; $_SESSION['zalogowany_uzytkownik'] = $nazwa; else { echo 'Logowanie <b>nie</b> poprawne<br> echo '<a href="cw_2.php">sprobuj jeszcze raz</a> <br> unset($_session['zalogowany']); unset($_session['zalogowany_uzytkownik']); php?> 2. Zaimportuj do bazy danych w phpmyadmin plik baza_lab6.sql, w którym zawarty jest skrypt: ALTER TABLE uzytkownik ADD( email varchar(30) default NULL, login datetime default NULL, zdjecie varchar(50) default NULL ); UPDATE uzytkownik SET email = 'test@wp.pl', login = '2008-04-08 11:19:35' WHERE id=1; UPDATE uzytkownik SET email = 'czesiek@o2.pl', login = '2008-03-12 14:10:15' WHERE id=2; VALUES ('Wazniak', 'tajne', 'wazniak@smerfy.pl', '2007-12-17 11:29:47'); VALUES ('Smerfetka', 'osilek', 'smerfetka@smerfy.pl', '2007-12-18 16:09:12'); VALUES ('Lalus', 'lustereczko', 'lalus@smerfy.pl', '2007-12-18 16:43:31'); VALUES ('Maruda', 'niecierpiehasel', 'maruda@smerfy.pl', '2007-12-18 18:41:33'); VALUES ('Papa Smerf', 'J3,16', 'papa@smerfy.pl', '2007-12-19 14:24:00'); VALUES ('Osilek', 'smerfetka', 'lov_smerfetka@smerfy.pl', '2007-12-17 09:43:56'); Zakład Systemów Rozproszonych - 2 / 10

3. Zmień plik cw_4.php, tak aby zalogowany użytkownik przeglądał listę wszystkich rekordów z tabeli uzytkownik. <?php session_start(); if ($_SESSION['zalogowany'] == "tak") { $connection = @mysql_connect("localhost", "user", "pass") or die("brak polaczenia"); $db = @mysql_select_db('moja_baza', $connection) or die("wybor nieudany"); $sql = "SELECT id,nazwa,haslo,email,login FROM uzytkownik"; <title>php - cwiczenie 4</title> <h1>witaj <b>'. $_SESSION['zalogowany_uzytkownik'].' </b></h1> while ($row = mysql_fetch_array($result)) { $html.= '<p>'.$row['id'].' <b>'.$row['nazwa'].'</b> '.$row['haslo'].' '.$row['email'].' '.$row['login'].'</p> $html.= ' else { <title>php - cwiczenie 4</title> <meta http-equiv="refresh" content="1; url=cw_2.php"> Nie jesteś zalogowany. Zakład Systemów Rozproszonych - 3 / 10

echo $html; php?> 4. Zmień plik cw_4.php, tak, aby nazwa każdego użytkownika była linkiem do strony cw_5.php z id przesyłanym metodą get (dane w linku). $html.= '<p>'.$row['id'].' <a href= cw_5.php?id='. $row['id'].' >'.$row['nazwa'].'</a> '.$row['haslo'].' '. $row['email'].' '.$row['login'].'</p> 5. Utwórz nowy plik: cw_5.php, który dla zalogowanego użytkownika wyświetla formularz do zmiany danych o użytkowniku (haslo, email, zdjecie). Dane z formularza mają być przesyłane metodą post do pliku cw_6.php. <?php session_start(); if ($_SESSION['zalogowany'] == "tak") { $connection = @mysql_connect("localhost", "user", "pass") or die("brak polaczenia"); $db = @mysql_select_db('moja_baza', $connection) or die("wybor nieudany"); $id = ($_GET['id']!=''?$_GET['id']:0); $sql = "SELECT nazwa,email,zdjecie FROM uzytkownik where id=".$id; if ($id!=0 && mysql_num_rows($result)!=0) { $row = mysql_fetch_array($result); <title>php - cwiczenie 5</title> <p>uzytkownik o id '.$id.': <b>'. $row['nazwa'].'</b></p> <form name="change_form" action="cw_6.php" method="post"> <p> hasło: <input type="password" name="haslo" maxlength="20" size="20"/> </p> <p> Zakład Systemów Rozproszonych - 4 / 10

email:<input type="text" name="nazwa" maxlength="20" size="20" value="'.$row['email'].'"/> </p> <p> if ($row['zdjecie']!="") { $html.='<img src="img/'.$row['zdjecie'].'"> $html.=' zdjecie:<input type="file" name="zdjecie" maxlength="20" size="20"/> </p> <p> <input type="hidden" name="id" value="'. $id.'"/><input type="submit" name="zapisz" value="zapisz"/> </p> </form> else { <title>php - cwiczenie 5</title> <meta http-equiv="refresh" content="1; url=cw_4.php"> Nie istnieje taki użytkownik. else { <title>php - cwiczenie 5</title> <meta http-equiv="refresh" content="1; url=cw_2.php"> Nie jesteś zalogowany. echo $html; php?> Zakład Systemów Rozproszonych - 5 / 10

6. Utwórz plik cw_6.php, w którym będą zapisywane do bazy danych zmiany wysłane z pliku cw_5.php. Sprawdzaj, czy użytkownik jest zalogowany. W katalogu www utwórz podkatalog img, w którym będą zapisywane przesłane zdjęcia (nadaj uprawnienia do zapisywania plików!). Nazwa zdjęcia powinna zostać poprzedzona id użytkownika. Po zapisaniu danych, wyświetl komunikat i link do strony z użytkownikami. <?php session_start(); if ($_SESSION['zalogowany'] == "tak") { $connection = @mysql_connect("localhost", "user", "pass") or die("brak polaczenia"); $db = @mysql_select_db('moja_baza', $connection) or die("wybor nieudany"); $id = $_POST['id']!=''?$_POST['id']:0; $sql = "SELECT * FROM uzytkownik where id=".$id; if ($id!=0 && mysql_num_rows($result)!=0) { <title>php - cwiczenie 6</title> if ($_POST['haslo']!= "") { $sql = "UPDATE uzytkownik SET haslo = '". $_POST['haslo']."' WHERE id=".$id; $html.= '<p>haslo zmienione</p> if ($_POST['email']!= "") { $sql = "UPDATE uzytkownik SET email = '". $_POST['email']."' WHERE id=".$id; $html.= '<p>email zmieniony</p> if (is_uploaded_file($_files['zdjecie'])) { if($_files['zdjecie']['error']!= 0){ $html.= "<p>wystąpił błąd podczas przesyłania pliku!</p>"; if($_files['zdjecie']['type'] == "image/jpeg" $_FILES['zdjecie']['type'] == "image/png" $_FILES['zdjecie'] ['type'] == "image/gif"){ Zakład Systemów Rozproszonych - 6 / 10

if(move_uploaded_file($_files['zdjecie'] ['tmp_name'], "img\".$id.'_'.$_files['zdjecie']['name'])){ $sql = "UPDATE uzytkownik SET zdjecie = '".$id."_".$_files['zdjecie']['name']."' WHERE id=".$id; $result = @mysql_query($sql, $connection) $html.= "<p>zdjecie zapisane</p>"; else { $html.= "<p>wystąpił nieoczekiwany błąd podczas kopiowania!</p>"; else { $html.= "Możesz uploadować tylko obrazki!"; <p><a href="cw_4.php">wroc do uzytkownikow</a></p> else { <title>php - cwiczenie 6</title> <meta http-equiv="refresh" content="1; url=cw_4.php"> Nie istnieje taki użytkownik. else { <title>php - cwiczenie 6</title> <meta http-equiv="refresh" content="1; url=cw_2.php"> Nie jesteś zalogowany. echo $html; php?> Zakład Systemów Rozproszonych - 7 / 10

Uwagi: $_FILES tablica, która przechowuje dane o uploadowanych plikach $_FILES['plik'] informacje o pliku załadowanym w polu formularza o nazwie plik. $_FILES['plik']['name'] oryginalna nazwa pliku po stronie klienta $_FILES['plik']['type'] typ mime pliku np. image/gif $_FILES['plik']['tmp_name'] tymczasowa nazwa pliku na serwerze $_FILES['plik']['error'] ewentualne błędy, 0 brak błędów is_uploaded_file funkcja, która sprawdza, czy plik został rzeczywiście uploadowany move_uploaded_file(tmp,docel) funkcja, która przenosi plik z tymczasowej lokalizacji tmp do podanej docel Sprawdź działanie skryptu, załaduj obrazek dla jednego smerfa. Sprawdź czy obrazek istnieje w katalogu C:\www\img 7. Zmień plik cw_6.php, tak, żeby zapisywał hasło w formie zaszyfrowanej algorytmem md5. $id; $haslo = md5($_post['haslo']); $sql = "UPDATE uzytkownik SET haslo = '".$haslo."' WHERE id=". Uwagi: md5() funkcja szyfrująca md5, która zwraca łańcuch 32 znaków Teraz na hasło w bazie danych potrzeba 32 bajty, wobec tego zmień tablicę uzytkownik, aby mogła przechowywać 32 znaki: ALTER TABLE uzytkownik CHANGE haslo haslo VARCHAR( 32 ) NULL DEFAULT NULL Sprawdź działanie skryptu: zmień hasło jednemu z użytkowników (podglądnij w bazie danych), a następnie sprawdź jak wygląda teraz hasło w bazie danych. 8. Zmień hasła wszystkim użytkownikom, tak, żeby zostały zapisane w formie zaszyfrowanej, a następnie zmień plik logowania cw_3.php, żeby użytkownik mógł się teraz zalogować. if ($_POST["nazwa"] == $row['nazwa'] && md5($_post["haslo"]) == $row['haslo']) 9. Do skryptu z pliku cw_6.php dodaj funkcję, która przy użyciu biblioteki GD będzie tworzyła miniatury przesyłanych obrazków. Sprawdź wcześniej czy biblioteka GD jest włączona w PHP (cw_1.php lub php.ini). function miniatura($zdjecie,$mini,$roz_x,$roz_y){ $system=explode('.',$zdjecie); if (preg_match('/jpg jpeg/',$system[1])){ $src_img=imagecreatefromjpeg($zdjecie); Zakład Systemów Rozproszonych - 8 / 10

if (preg_match('/png/',$system[1])){ $src_img=imagecreatefrompng($zdjecie); $old_x=imagesx($src_img); $old_y=imagesy($src_img); if ($old_x > $old_y) { $thumb_w=$roz_x; $thumb_h=$old_y*($roz_y/$old_x); if ($old_x < $old_y) { $thumb_w=$old_x*($roz_x/$old_y); $thumb_h=$roz_y; if ($old_x == $old_y) { $thumb_w=$roz_x; $thumb_h=$roz_y; $dst_img=imagecreatetruecolor($thumb_w,$thumb_h); imagecopyresampled($dst_img,$src_img,0,0,0,0,$thumb_w,$thumb_h, $old_x,$old_y); if (preg_match("/png/",$system[1])){ imagepng($dst_img,$mini); else { imagejpeg($dst_img,$mini); imagedestroy($dst_img); imagedestroy($src_img); Uwagi: imagecreatefromjpeg() - tworzy kopie do pracy na pliku jpg imagecreatefrompng() - tworzy kopie do pracy na pliku png imagesx() - pobiera szerokość obrazka imagesy() - pobiera wysokość obrazka ImageCreateTrueColor() - tworzy nowy obiekt truecolour imagecopyresampled() - skaluje obraz imagejpeg() - tworzy nowy obrazek JPEG imagepng() - tworzy nowy obrazek PNG imagedestroy() - niszczy stare obiekty w pamięci Przed zapisaniem nazwy zdjęcia w bazie danych dodaj w pliku cw_6.php użycie funkcji miniatura. Miniatury twórz w katalogu www\img\mini (trzeba go wcześniej utworzyć) o maksymalnym rozmiarze 80px z przesyłanych obrazków. miniatura("img\".$id.'_'.$_files['zdjecie'] ['name'],"img\mini\".$id.'_'.$_files['zdjecie']['name'],80,80); 10.Dodaj w pliku cw_4.php wyświetlanie miniatur zdjęć użytkownika. Po kliknięciu na miniaturę powinno otworzyć się duże zdjęcie. Zakład Systemów Rozproszonych - 9 / 10

11.Zaproponuj poprawę skryptu cw_6.php, aby przed zapisaniem obrazka sprawdzał, czy istnieje już na serwerze obrazek danego użytkownika. Jeśli istnieje należy go wykasować, nie zapominając o miniaturze. Zakład Systemów Rozproszonych - 10 / 10