Wydział Informatyki Politechnika Białostocka Zaawansowane bazy danych i hurtownie danych MySQL studia zaoczne II stopnia, sem. I Plan wykładu 1. PHP: Przekierowanie u ytkownika 2. Pliki cookie 3. Sesje 4. PHP i MySQL WYKŁAD 5: Agnieszka Oni ko, Małgorzata Kr towska Przekierowanie u ytkownika na inn stron header() - funkcja, która pozwala na modyfikacj nagłówka odpowiedzi PHP wysyłanego przez serwer. Location: nowy adres zmiana nagłówka location na nowy adres header ( Location: http://www.witryna.pl/nowa_strona.html ); Uwagi: Funkcja header() musi by wywołana jako pierwsza, gdy informacje nagłówka musz by wysłane do przegl darki internetowej przed wysłaniem jakichkolwiek polece HTML lub tekstu. Przekierowanie u ytkownika na inn stron - przykłady Nieprawidłowe wywołanie funkcji header : echo Zostaniesz przekierowany na inn stron!!! <br /> //Bł d header ( Location: http://www.witryna.pl/nowa_strona.html ); Przekierowanie u ytkownika do innego pliku w tej samej lokalizacji: Header( Location: http://.$_server[ HTTP_HOST ]. dirname($_server[ PH_SELF ]. nowa_strona.php );
Przekazywanie plików Dost p do pliku ze skryptu PHP Formularz do przekazywanie plików: <form enctype="multipart/form-data action="skryptphp.php method="post"> Wybierz plik, który chcesz przekaza : <br /> <input name="moj_plik" type="file" /><br /> <input type="submit" value="przeka plik" /> </form> enctype="multipart/form-data - sposób kodowania danych gdy przesyłamy plik action="skryptphp.php nazwa skryptu przetwarzaj cego plik method="post" - zawsze metoda POST Wykorzystanie tablicy superglobalnej: $_FILES Zawarto tablicy $_FILES: $_FILES[ plik_uzytkownika ][ name ] nazwa pliku na komputerze u ytkownika $_FILES[ plik_uzytkownika ][ type ] typ pliku np. gif $_FILES[ plik_uzytkownika ][ size ] wielko pliku w bajtach $_FILES[ plik_uzytkownika ][ tmp_name ] tymczasowa nazwa pliku przekazanego do serwera i przechowywanego na nim $_FILES[ plik_uzytkownika ][ error ] kod bł du przypisany do przekazanego pliku Przykład Dokument HTML:. <input name="moj_plik" type="file" /><br />. Skrypt PHP $handle = fopen($_files[ moj_plik']['tmp_name'], 'r'); while(!feof($handle)){ $text = fgets($handle); echo $text,'<br />'; Wybrane funkcje dotycz ce plików fopen(nazwa pliku, tryb) otwiera plik lub adres URL; Tryb np..: r (odczyt), w(zapis), a(doł czanie), b(plik binarny) fclose() zamykanie pliku feof() sprawdza czy został osi gni ty koniec pliku fgetc() pobiera znak z pliku fgets() pobiera wiersz z pliku file_exists() sprawdza, czy dany plik lub katalog istnieje file() wczytuje cały plik do tablicy fread() odczytuje z pliku wskazan liczb znaków (bajtów)
Pliki $nazwa_pliku = "test.txt"; echo "<p>zapis do ".$nazwa_pliku."... </p>"; $fp = fopen($nazwa_pliku, "w"); if (!file_exists($fp){ print Nie znaleziono pliku lub katalogu ; exit(); fwrite($fp, Hi!\n"); fclose($fp); echo "<p>dopisywanie do ".$nazwa_pliku."...</p>"; $fp = fopen($nazwa_pliku, "a"); if (!file_exists($fp){ print Nie znaleziono pliku lub katalogu ; exit(); fputs($fp, Wpisywanie lancucha do pliku\n"); fclose($fp); Pliki: include Include plik.php wł cza wyszczególniony plik do skryptu Przykład: test.php echo Napis: $color $fruit"; // Napis include zmienne.php'; echo Napis $color $fruit"; // Napis: zielone jabłko zmienne.php $color = zielone'; $fruit = jabłko'; Pliki: Funkcje function outputfiletestinfo($f) { if (!file_exists($f)) { echo "<p>$f nie istnieje</p>"; return; echo "<p>$f " (is_file($f)? "" : nie jest"). jest plikiem</p>"; echo "<p>$f ".(is_dir($f)? "" : nie jest"). jest katalogiem</p>"; echo "<p>$f ".(is_readable($f)? "": nie jest "). jest do odczytu</p>"; echo "<p>$f ".(is_writable($f)? "": nie jest "). jest do zapisu</p>"; echo "<p>$f ".(is_executable($f)? "": nie jest "). jest wykonywalny</p>"; echo "<p>$f ma ".(filesize($f)). bajtów</p>"; echo "<p>$f był otwierany ".date( "D d M Y g:i A",fileatime($f))."</p>"; echo "<p>$f był modyfikowany ".date( "D d M Y g:i A",filemtime($f))."</p>"; $file = "test.txt"; outputfiletestinfo($file); Mechanizm cookies i sesje S wykorzystywane w celu umo liwienia programom zapami tanie poprzednich da Pliki cookie s wykorzystywane do przechowywania małych informacji w przegl darce internetowej u ytkownika Sesje mog zarz dza wi ksz liczb danych i przechowywa je po stronie serwera
Przykład Pliki cookie Ci gi tekstowe przechowywane na dysku twardym u ytkownika w postaci małych plików tekstowych Pliki te s wysyłane z programu po stronie serwera do przegl darki internetowej u ytkownika za pomoc dania HTTP oraz nagłówków odpowiedzi Plik cookie składa si z tekstu w formie klucz=warto ;, wewn trz ci gu tekstowego nie mo na stosowa redników, przecinków oraz znaków odst pu Dost p do danych zawartych w pliku cookie z poziomu PHP: tablica globalna $_COOKIE setcookie('uzytkownik','jan Kowalski'); //utworzenie cookie setcookie('kolor','niebieski'); <html><head><title>tablica Cookie</title></head> <body bgcolor="lavender"> <font face="verdana" size='+1'> <h2>$_cookie[]</h2> if(! empty($_cookie[kolor])){ echo '<pre>'; print_r($_cookie); echo '</pre>'; </font> </body> </html> Przykład cd: Współdziałanie serwera, przegl darki oraz PHP Pierwsze wczytanie strony: Klient (przegl darka) W przypadku ka dego dania klienta do serwera zostanie wysłany plik cookie. Program PHP przypisze to cookie do superglobalnej tablicy $_COOKIE[] Kolejne wczytanie strony: Plik cookie Uzytownik =Jan+Kowalski; kolor=niebeski danie HTTP Serwer Przestrze globalna Odpowied HTTP $_COOKIE[ kolor ] w tym miejscu s zapisywane ustawienia u ytkownika ---------------------------------------------------------------- PHP Setcookie( kolor = niebeski ); Setcookie ( uzytkownik = Jan Kowalski
Serializacja $info = array('alicja', 'czerwony', 22); setcookie('u ytkownik', serialize($info)); <html><head><title>przechowywanie wielu warto ci w cookie</title></head> <body bgcolor="lavender"> <font face="verdana" size='+1'> <h2>$_cookie[]</h2> <pre> <b> if(! empty($_cookie['u ytkownik'])){ $cookie_data = $_COOKIE['u ytkownik']; $cookie_data = stripslashes($cookie_data); //usuni cie uko ników z ci gu tekstowego $cookie_data = unserialize($cookie_data); //z uko nikami unserialize() zako czy si //niepowodzeniem echo 'Dane znajduj ce si w tablicy umieszczonej w cookie<br />'; print_r($_cookie); echo '<pre>dane po procesie deserializacji<br />'; print_r($cookie_data); </b> </pre> </font> </body> </html> Serializacja cd. Sesja Pliki cookie oraz sesje wspólny identyfikator Sesja czas, który u ytkownik sp dza na witrynie internetowej. J zyk PHP zawiera mechanizm słu cy do zarz dzania sesjami, pozwalaj cy na ledzenie działa u ytkownika, jego upodoba itp. Cel sesji: zachowanie stanu Klient (przegl darka) W przypadku ka dego dania klienta do serwera zostanie wysłany plik cookie. Serwer u yje ID umieszczone w pliku cookie do odnalezienia wła ciwego pliku sesji. Plik cookie PHPSESSID =daf356hdj282h00du2291 Serwer Plik sesji Sess_ daf356hdj282h00du2291 Kolory:4: niebieski Ustawienia u ytkownika s zapisane w pliku sesji PHP Session_start(); Miejsce na ustawienie zmiennych sesji
Rozpocz cie sesji session_start() - tworzy now lub przywraca uruchomion wcze niej sesj session_id() zwraca identyfikator sesji echo "<p>id Twojej sesji: ".session_id().".</p>"; Rejestrowanie sesji Aby mie mo liwo dost pu do pewnych zmiennych nale y je zarejestrowa Metody rejestracji: U ywaj c tablicy $_SESSION (zalecane) np. $_SESSION[ uzytkownik ]= Ela ; U ywaj c funkcji session_register() np. session_register( uzytkownik ); Rozpocz cie sesji if(!isset($_session['licznik'])) { $_SESSION['licznik'] = 0; $_SESSION['licznik']++; echo T stron odwiedziłe ju '.$_SESSION['licznik']. razy!'; Zmienne sesji $_SESSION[ produkt1"] = Pierwszy"; $_SESSION[ produkt2"] = Drugi"; echo Produkty zostaly zarejestrowane."; echo Twoje produkty:"; echo "<ul>"; echo "<li>".$_session["produkt1"]."</li>"; echo "<li>".$_session["produkt2"]."</li>"; echo "</ul>";
Zmienne sesji: Przykład (sesja_z_tablica.php) <html> <head> <title>przechowywanie tablicy w zmiennej sesji</title> </head> <body> <h1>wybor produktow</h1> if (isset($_post["form_products"])) { if (!empty($_session["products"])) { $products = array_unique( array_merge(unserialize($_session["products"]), $_POST["form_products"])); $_SESSION["products"] = serialize($products); else { $_SESSION["products"] = serialize($_post["form_products"]); echo "<p>produkty zostaly wybrane!</p>";...... Zmienne sesji: Przykład (sesja_z_tablica.php) <form method="post" action=" echo $_SERVER["PHP_SELF"]; "> <P><strong>Wybierz produdkty:</strong><br> <select name="form_products[]" multiple="multiple" size="5"> <option value="produkt1">produkt1</option> <option value="produkt2">produkt2</option> <option value="produkt3">produkt3</option> <option value="produkt4">produkt4</option> <option value="produkt5">produkt5</option> </select> <P><input type="submit" value="wybierz"/></p> </form> <p><a href="sesja1.php">zobacz koszyk</a></p> </body> </html> Zmienne sesji: Przykład (sesja1.php) <html> <head> <title>pobieranie wartosci zmiennych sesji</title> </head> <body> <h1>zawartosc</h1> if (isset($_session["products"])) { echo "<strong>twoj koszyk:</strong><ol>"; foreach (unserialize($_session["products"]) as $p) { echo "<li>".$p."</li>"; echo "</ol>"; <p><a href="sesja_z_tablica.php">wroc do strony z wyborem produktow</a></p> </body> </html> Funkcje serialize() zwraca ci g tekstowy zawieraj cy strumie bajtów przedstawiaj cych warto. Pozwala to na przechowywanie warto ci gdziekolwiek unserialize() przywraca ci g tekstowy do jego pierwotnej postaci isset() sprawdzenie, czy zmienna ma warto array_unique usuwanie powtarzaj cych si warto ci tablicy array_merge ł czenie tablic $_SERVER["PHP_SELF"] odwołanie do nazwy aktualnie wywoływanego skryptu PHP
Zamykanie sesji $_SESSION[ test ] = 5; session_destroy(); //usuni cie sesji nie usuwa zmiennych sesji echo $_SESSION[ test ]; unset($_session[ test ]); //usuni cie zmiennej test echo $_SESSION[ test ]; Lista wyboru w HTML <html> <head> <title>formularz HTML z list wyboru</title> </head> <body> <form action= lista_wyboru.php" method="post"> <p><strong>nazwa:</strong><br/> <input type="text" name="user"/> <p><strong>wybierz produkt:</strong><br/> <select name="products[]" multiple="multiple"> <option value= element1">element 1</option> <option value="element2"> Element 2</option> <option value="element3"> Element 3</option> <option value="element4"> Element 4</option> </select> <p><input type="submit" value= Wyslij"/></p> </form> </body> </html> Analiza listy wyboru w PHP echo "<p>witaj <b>".$_post["user"]."</b>!</p>"; echo "<p>wybrane przez Ciebie produkty:<br/>"; if (!empty($_post["products"])) { echo "<ul>"; foreach ($_POST["products"] as $value) { echo "<li>$value</li>"; echo "</ul>"; Tworzenie listy wyboru //polaczenie z serwerem: $polaczenie = mysql_connect("dbserver.wi.pb.edu.pl", "konto", "hasło"); if (mysql_errno()) { printf("brak poł czenia z baz : %s\n", mysql_error()); exit(); //wybor bazy $baza = mysql_select_db( nazwa_bazy", $polaczenie); //przekazywanie zapytania do bazy $select_kolor = "SELECT kolor FROM kolor ORDER BY kolor"; $wynik = mysql_query($select_kolor, $polaczenie) ; if (mysql_errno()) { printf("%s\n", mysql_error()); exit();
Tworzenie listy wyboru if (mysql_num_rows($wynik) > 0) { $wyswietl_blok.= "<p><strong>kolor:</strong><br/> <select name=\"wybor_koloru\">"; while ($wiersze = mysql_fetch_array($wynik)) { $kolor = $wiersze['kolor']; $wyswietl_blok.= "<option value=\"".$kolor."\">".$kolor."</option>"; $wyswietl_blok.= "</select>"; echo $wyswietl_blok; //tworzenie listy wyboru mysql_close($polaczenie);