Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
1
Technologie Internetowe
Wykład 5 PHP cd.
2
Formularze, poczta, system plików,
3
Obsługa formularzy Należy najpierw odpowiednio przygotować formularz.
W znaczniku FORM w parametrze ACTION należy podać adres dokumentu PHP mającego obsłużyć ten formularz. Parametr METHOD może mieć wartość POST lub GET - obie metody są obsługiwane przez PHP. . Należy pamiętać o zdefiniowaniu nazw wszystkich pól formularza z których skrypt ma skorzystać. Przykład: <FORM ACTION="skrypt.php" METHOD="post"> <INPUT TYPE="text" NAME="tekst"> <INPUT type="submit" name="x" value="Wyślij"> </FORM>
4
W skrypcie będą dostępne zmienne o nazwach takich jak nazwy (name) pól formularza, zawierające ich wartości: <?php echo($_POST['tekst']); ?> W przypadku pola tekstowego wartością zmiennej będzie wpisany przez użytkownika tekst. Jeżeli pole jest typu CHECKBOX wartością będzie "on" jeżeli pole jest zaznaczone, lub zmienna będzie pusta jeżeli pole nie zostało zaznaczone. Jeżeli w polu typu CHECKBOX podamy parametr VALUE, będzie on użyty zamiast "on". Tak samo wygląda obsługa pola typu RADIO. Wartością pola SELECT będzie wartość parametru VALUE zdefiniowanego w znaczniku OPTION.
5
Formularze HTML najczęściej zawierają:
Metodę Akcję Pola wejściowe Pierwszy wiersz formularza w kodzie HTML może wyglądać następująco: <FORM ACTION=licz.php METHOD=POST> Post - zmienne przekazywane są z formularza z wykorzystaniem superglobalnej tablicy $_POST Get – tablica $_GET. Zapytanie jest dołączone do lokalizatora (adresu) URL Post vs. Get Metoda Post została opracowana do tworzenia nowych zasobów, np. przekazanie formularza zamówienia powoduje wstawienie nowego rekordu do tabeli bazy danych – pojawia się trwały efekt. Metoda Get jest używana gdy żądanie nie powoduje trwałych efektów ubocznych – np. operacje wyszukiwania. Należy jednak uważać: przy stosowaniu get mogą powstać długie adresy, często przekraczające limity przeglądarek czy serwerów.
6
Metodę POST stosuje się gdy:
(Wynikiem żądania są trwałe zmiany || Dane z formularza mogą powodować powstanie długiego adresu URL przy użyciu GET || Wysyłane dane nie są zapisane za pomocą siedmiobitowego ASCII.) Metodę GET stosuje się gdy: (Celem żądania jest odszukanie zasobów && W wyniku wykonania żądania nie wystąpią żadne trwałe efekty uboczne && Dane z pól <form> mają w sumie mniej niż 1024 znaki) Get – bezpieczna; Post – niebezpieczna, dokonuje trwałych modyfikacji w serwerze <FORM ACTION="licz.php" METHOD="POST"> Akcja określa skrypt do którego zostaną przesłane dane i który zostanie uruchomiony
7
Typy pól formularzy HTML: input – różne typy
<P>Liczba1: <INPUT TYPE="text" NAME="val2" SIZE=10></p> <INPUT TYPE="radio" NAME="calc" VALUE="add"> <INPUT TYPE="submit" NAME="Calculate" VALUE="Wykonaj"> </FORM> Typy pól formularzy HTML: input – różne typy text – jedna linia tekstu; hidden – pole ukryte (umożliwia przesłanie dodatkowych, niewidocznych dla użytkownika danych); password - dla haseł file – do przesyłania plików (upload) textarea – wiele wierszy tekstu submit – przycisk służący do wysyłania formularza lub do kasowania zawartości wypełnionych pól; checkbox – pole wyboru (jeden z dwu); radio – pole wyboru (jeden z wielu); select – menu rozwijane lub lista – elementy OPTION
8
Wysyłanie poczty e-mail
Dla systemu Windows w pliku php.ini należy skonfigurować: [mail function] SMTP = ewa.prz.rzeszow.pl //nazwa serwera poczty wychodz. sendmail_from = //własny adres Można zastosować funkcję w skrypcie: Do wysyłania listu elektronicznego za pośrednictwem protokołu SMTP (standardowy protokół wykorzystywany do przesyłania poczty elektronicznej) w najprostszym przypadku wystarczy funkcja mail() : mail (odbiorca, temat, treść); Można również uwzględnić adres nadawcy, wtedy funkcja mail() będzie miała postać: mail (odbiorca, temat, treść, od); mail "to jest temat wiadomości", "to jest treść bardzo krótkiej wiadomości",
9
Korzystanie z systemu plików (pliki na serwerze!)
Do otwierania plików służy funkcja fopen(nazwa_pliku,mode). Nazwa pliku to pełna ścieżka do pliku, który tworzymy lub otwieramy, mode określa tryb działania funkcji. Funkcja zwraca wskaźnik pliku (służy jako odnośnik i dostarcza informacji o pliku). Parametr mode przyjmuje jedną z następujących wartości: Mode Opis r Otwiera istniejący plik i odczytuje zawarte w nim dane. Ustawia wskaźnik na początku pliku r+ Otwiera istniejący plik do odczytu i zapisu i ustawia wskaźnik na początku pliku w Otwiera plik tylko do zapisu i jeżeli plik nie jest pusty, opróżnia go, a jeżeli taki plik nie istnieje zostanie utworzony w+ Otwiera plik do odczytu i zapisu. Jeżeli plik nie jest pusty, opróżnia go, a jeżeli taki plik nie istnieje zostanie utworzony a Otwiera istniejący plik do zapisu i ustawia wskaźnik na końcu pliku. Jeśli plik nie istnieje f. tworzy go. a+ Otwiera plik do odczytu i zapisu i ustawia wskaźnik na końcu pliku. Jeśli plik nie istnieje f. tworzy go.
10
1. Sprawdzanie czy plik istnieje file_exists("plik.php")
2. Tworzenie nowego pliku fopen("c:/moje dane/plik.txt","w+"); - jeśli nie podamy trybu plik będzie otwarty do odczytu 3. Zapis do pliku $file "w+") – tworzy wskaźnik pliku (zmienną plikową) fwrite($file, $tekst); //zapis lub fputs ($file, $tekst, $dlugosc); //zapis fclose($file); UWAGA: dla przeczytanych tekstów stosuje się funkcję trim obcinającą białe znaki (spacje, zmiany wiersza itp.)
11
4. Odczytywanie danych z pliku
$file = fopen($plik, "r"); $msg = fread($file, filesize($plik)); - czyta od początku do końca pliku lub $msg = fgets($file, filesize($plik)); //odczyt $msg = file('adres/nazwa_pliku'); fclose($file); echo $msg; Można podawać liczbę znaków do odczytania
12
Szczegółowo: $linia = fgets(zmienna_plikowa, [długość]) – odczyt linii z otwartego pliku (do znaku \n lub EOF) fputs(zmienna_plikowa, zawartość, [długość]) – zapis do otwartego pliku fseek(zmienna_plikowa, pozycja) – ustawia wskaźnik pliku w punkcie pozycja bajtów ftell(zmienna_plikowa) – informuje na jakiej pozycji (bajt) jest ustawiony wskaźnik rewind(zmienna_plikowa) – ustawia wskaźnik na początku pliku readfile(nazwa_pliku) – otwiera plik, wyświetla plik w oknie przeglądarki i zamyka plik $tabpliku =file(nazwa_pliku) – wpisuje zawartość całego pliku do tablicy, każda linia stanowi osobny element tablicy feof((zmienna_plikowa) - sprawdza osiągnięcie końca pliku, przyjmuje wartość true jeśli został osiągnięty koniec pliku
13
Dokładniej… $uchwyt= fopen("sciezka/nazwa" ,"r") string fgets ( resource $uchwyt [, int długość]) Zwraca łańcuch o (długości – 1) bajtów odczytany z pliku wskazanego przez uchwyt. Czytanie kończy się kiedy przeczytano (długość – 1) bajtów lub gdy wystąpi znak nowego wiersza (jest on dołączany do zwracanego wyniku) lub gdy wystąpi znak końca pliku EOF (którykolwiek przypadek zdarzy się pierwszy). Jeśli nie została określona długość, domyślnie przyjmuje 1k (1024 bajty).
14
6. Kopiowanie plików $stary = "c:/moje dane/plik.php"; $nowy = "nowyplik.php"; copy($stary, $nowy); 7. Zmiana nazwy pliku $stary = "stara nazwa.php"; $nowy = "nowa nazwa.php"; rename($stary, $nowy); 8. Usuwanie plików unlink("nowyplik.php");
15
$linia=fgets($plik, 4096);
Przykłady: $linia=fgets($plik, 4096); Pobiera do zmiennej $linia wiersz o długości nie większej niż 4096 znaków fputs ($plik, "tekst"); Spowoduje zapisanie tekstu „tekst" do otwartego pliku i odpowiednie przesunięcie się wskaźnika zapisu. <?php $plik=fopen (" dane.txt ", "r "); while ( !feof($plik) ) { $linia= fgets($plik, 255); echo $linia; } fclose($plik); ?>
16
mkdir("ścieżka/katalog"), rmdir("ścieżka/katalog")
flock(zmienna_plikowa, działanie) - blokowanie pliku wywoływana po otwarciu, ale przed odczytem czy zapisem (pozwala na przeciwdziałanie równoczesnemu dostępowi do plików przez wielu użytkowników) mkdir("ścieżka/katalog"), rmdir("ścieżka/katalog") $kat = opendir("ścieżka/katalog") – otwarcie katalogu do odczytu zawartości $nazwa = readdir($kat) – czytanie nazwy pliku z zawartości katalogu (1 wpis), f. przyjmuje wartośc false jeśli wszystkie wpisy zostaną odczytane. Wpisy nie są uporządkowane. closedir($kat) – zamknięcie katalogu po zakończeniu czytania Działanie Opis 1 Blokowanie odczytu; dopuszcza współdzielenie 2 Blokowanie zapisu. Plik nie może być dzielony 3 Zwolnienie istniejącej blokady
17
<?php echo $lista_plikow; ?>
Przykład: Wyświetlenie zawartości katalogu w postaci listy <?php $nazwa_kat = 'C:\usr\krasnal\www\htdocs'; $kat = opendir($nazwa_kat); //otwarcie do czytania $lista_plikow = "<ul>"; //pocz listy while ($naz_pliku = readdir($kat)) //war. zakończenia if (($naz_pliku !=".")&&($naz_pliku !="..")) //filtr $lista_plikow .= "<li>$naz_pliku"; //dopisanie $lista_plikow .= "</ul>"; //koniec listy closedir($kat); //zamkniecie ?> <P>Elementy w katalogu: <?php echo "$nazwa_kat"; ?></p> <?php echo $lista_plikow; ?>
18
Przykład: licznik odwiedzin na stronie
<?php if(!file_exists("licznik.txt")) { //jeśli nie istnieje $plicznik=fopen("licznik.txt","w+"); //to jest tworzony fputs($plicznik, "0"); // wpisujemy "0" fclose($plicznik); } $plicznik=fopen("licznik.txt","r+"); //otwarcie "RW" flock($plicznik,2); $liczba=fgets($plicznik,10); //pobranie ilości odwiedzin echo ("<strong>Liczba odwiedzin: $liczba </strong>"); $liczba++; //zwiększenie ilości o 1 fseek($plicznik,"0"); //wskaźnik na początek fputs($plicznik, $liczba); //wpisanie liczby do pliku flock($plicznik,3); ?>
19
CIASTECZKA „cookies” setcookie (PHP 3, PHP 4 , PHP 5)
setcookie -- Wysyła ciasteczko i zapisuje u klienta Opis setcookie ( string nazwa [, string wartość] [, int data_ważności ]) setcookie() określa ciasteczko (ang. cookie) do wysłania z nagłówkami HTTP. Ciasteczko musi być wysłane zanim jakiekolwiek inne nagłówki zostaną wysłane (to jest ograniczenie ciasteczek, nie PHP). To wymaga umieszczenia wywołań tej funkcji przed znacznikami <html> czy <head>. Wszystkie argumenty poza nazwą są opcjonalne. Jeśli obecny jest tylko argument nazwa, ciasteczko o takiej nazwie zostanie usunięte z klienta. Można też opuścić argumenty za pomocą pustego łańcucha (""). Argument data_ważności jest liczbą całkowitą. Można uzyć liczby zero (0). Argument data_ważności jest regularnym uniksowym znacznikiem czasu, takim jak zwracany przez funkcje time() lub mktime (). Wysłane ciasteczko jest dostępne już przy następnym załadowaniu strony w tablicy $_COOKIE. W PHP do była to tablica $HTTP_COOKIE_VARS.
20
Przykład 1. setcookie() wysyła przykładowe ciasteczka
Częste pułapki: Tworzone skryptem ciasteczka nie będą widziane do następnego przeładowania strony dla której mają być widoczne. Ciasteczko może być usunięte tylko z tymi parametrami, z jakimi je ustawiono. Można wielokrotnie wywołać setcookie() - wykonywane są we właściwej kolejności. Przykład 1. setcookie() wysyła przykładowe ciasteczka setcookie ("TestCookie", $value); setcookie ("TestCookie", $value,time()+3600); /* traci ważność za godzinę */ Aby skasować ciasteczko, należy ustawić datę ważności na datę z przeszłości Przykład 2. Kasowanie ciasteczek// np. ustawić datę ważności na godzinę wstecz setcookie ("TestCookie", "", time() ); Przykład 3. Sprawdzenie ciasteczka if (isset($_COOKIE["TestCookie"])) kod1; else kod2;
21
<?php if (isset($licznik)) $licznik++; else $licznik = 1; setcookie("licznik",$licznik,time()+(3600*24*31)); // ciasteczko będzie utrzymywane na komputerze // oglądającego stronę // przez miesiąc od ostatnich odwiedzin echo ("Odwiedziłeś tę stronę $licznik razy<br>"); echo"<br>"; var_dump($_COOKIE);//informacja o tablicy _COOKIE ?>
22
LICZNIK odporny na odświeżanie (plik i cookie)
<?php if (!file_exists("licznik.txt")) // jeżeli plik licznik.txt nie istnieje {$licznik=fopen("licznik.txt","w"); // tworzymy go } else // w innym wypadku { // otwieramy go i odczytujemy liczbę odwiedzin $licznik=fopen("licznik.txt","r+"); $numer=fgets($licznik,4096); // pobieramy pierwszą linijkę if ($numer=='') // przy pierwszym uruchomieniu plik będzie pusty $numer=0; // pierwsza wizyta // jeżeli użytkownik nie ma ciasteczka lub odwiedzał stronę przed godziną if (!isset($_COOKIE["CLicznik"])) { rewind ($licznik); // cofamy pozycję zapisu w pliku na początek $numer++; // zwiększamy liczbę odwiedzin o 1 fwrite($licznik,$numer); // zapisujemy liczbę w pliku fclose($licznik);// zamykamy plik // zapisujemy ciasteczko na komputerze użytkownika setcookie("CLicznik","Ustawione ciasteczko",time()+3600); // wyświetlamy odpowiedni tekst echo "Witam, jesteś ". $numer. "gościem na mojej stronie !!!"; ?> Uwaga: gdzie są ciasteczka (Explorer, Opera – inne przeglądarki) Nie jest istotna wartość ciasteczka
23
Funkcje czasu time Zwraca aktualny uniksowy znacznik czasu Opis int time ( ) Zwraca aktualny czas, podawany jako liczba sekund, które upłynęły od uniksowej Epoki (1 stycznia :00:00 GMT).
24
date Formatuje lokalny czas/datę Opis string date ( string format [, int znacznik_czasu]) Zwraca datę sformatowaną według szablonu podanego w argumencie format. Żądana data określona jest w argumencie znacznik_czasu, a w przypadku jego braku pobierany jest aktualny czas. Uwaga: Poprawny zakres znacznika czasu to zwykle od piątku, 13 grudnia :45:54 GMT (czasu Greenwich) do wtorku, 19 stycznia :14:07 GMT. (Wartości te odpowiadają minimalnej i maksymalnej wartości 32-bitowej liczbie całkowitej ze znakiem). W systemie Windows zakres ten jest bardziej ograniczony i zawiera się w przedziale do Niektóre systemy baz danych mają funkcje konwersji ich formatów daty w uniksowy znacznik czasu (jak np. funkcja UNIX_TIMESTAMP w MySQL-u).
25
Poniższych znaków używa się w szablonie formatującym datę:
d - dzień miesiąca, 2 cyfry z zerem na początku; tzn. od "01" do "31" D - dzień tygodnia, tekst, 3 litery; n.p. "Fri" F - miesiąc, tekst, pełna nazwa; n.p. "January" h - godzina, format 12-godzinny z zerem na początku; tzn. od "01" do "12" //g H - godzina, format 24-godzinny z zerem na początku; tzn. od "00" do "23" //G i - minuty; tzn. od "00" do "59" j - dzień miesiąca bez zera na początku; tzn. od "1" do "31" l (mała litera 'L') - dzień tygodnia, tekst, pełna nazwa; n.p. "Friday" m - miesiąc; tzn. "01" to "12" M – skrót nazwy miesiąca (ang.) n - miesiąc bez zera na początku; tzn. "1" to "12" r - data sformatowana według RFC 822; n.p. "Thu, 21 Oct :01: " (dodane w PHP 4.0.4) s - sekundy; i.e. "00" to "59" w - dzień tygodnia, liczbowy, tzn. od "0" (Niedziela) do "6" (Sobota) W - numer tygodnia w roku według ISO-8601, tydzień zaczyna się w poniedziałek (dodane w PHP 4.1.0) Y - rok, 4 liczby; n.p. "1999" //y z - dzień roku; tzn. od "0" do "365" Nierozpoznane znaki w szablonie formatującym będą wyświetlone tak jak są.
26
Przykład 1. przykłady użycia date()
echo date ("l dS of F Y h:i:s A"); echo "July 1, 2000 is on a " . date ("l", mktime(0,0,0,7,1,2000)); Jeśli nie chcemy, aby któryś z rozpoznawalnych w szablonie znaków został zastąpiony odpowiadającą mu częścią daty, musimy poprzedzić go znakiem odwrotnego ukośnika (backslash). Przykład 2. zastosowania date() /* Dzisiaj jest March 10th, 2001, 5:16:18 pm */ $today = date("F j, Y, g:i a"); // March 10, 2009, 5:16 pm $today = date("m.d.y"); // $today = date("j, n, Y"); // 10, 3, 2009 $today = date("Y-m-d"); // $today = date('h-i-s, j-m-y, it is w Day z '); // , , Fripm01 $today = date('\i\t \i\s \t\h\e jS \d\a\y.'); // It is the 10th day. $today = date("D M j G:i:s T Y"); // Sat Mar 10 15:16:08 MST 2009 $today = date('H:m:s \m \i\s\ \m\o\n\t\h'); // 17:03:17 m is month $today = date("H:i:s"); // 17:16:17
27
mktime mktime -- Oblicza uniksowy znacznik czasu dla podanej daty Opis int mktime ( int godzina, int minuta, int sekunda, int miesiąc, int dzień, int rok [, int letni/zimowy]) Uwaga: Proszę zwrócić uwagę na kolejność argumentów !!!, która w dodatku nie jest praktyczna przy opuszczaniu argumentów od prawej do lewej (patrz niżej). Częstym błędem w skryptach są pomyłki w kolejności tych argumentów. Funkcja zwraca uniksowy znacznik czasu odpowiadający podanym argumentom. Znacznik czasu jest liczbą całkowitą długą (long integer) zawierającą liczbę sekund dzielącą uniksową Epokę (1 stycznia 1970) od podanego w argumentach czasu. Argumenty mogą być opuszczane w kolejności od prawej do lewej. Za każdy pominięty argument będzie wówczas wstawiona aktualna wartość, zgodnie z lokalnym czasem/datą. Argument letni/zimowy może być ustawiony na 1, jeśli to czas zimowy, lub 0 jeśli letni, lub -1 (domyślnie) jeśli niewiadomo, czy letni czy zimowy. Jeśli nie jest to wiadome, PHP spróbuje ustalić samodzielnie.
28
Funkcja mktime() przydaje się przy wykonywaniu arytmetyki dat i walidacji, gdyż automatycznie policzy właściwą wartość dla danych spoza przedziałów. Na przykład, każda poniższa linia wyświetli "Jan ". Przykład 1. przykład mktime() <?php echo date ("M-d-Y", mktime (0,0,0,12,32,1997)); echo date ("M-d-Y", mktime (0,0,0,13,1,1997)); echo date ("M-d-Y", mktime (0,0,0,1,1,1998)); echo date ("M-d-Y", mktime (0,0,0,1,1,98)); ?> rok może być liczbą dwu lub czterocyfrową, przy czym wartości dwucyfrowe z przedziału 0-69 będą mapowane do , a z przedziału do (w systemach, w których time_t jest 32-bitową liczbą całkowitą ze znakiem, co jest obecnie najpopularniejszym rozwiązaniem, poprawny zakres argumentu rok zawiera się pomiędzy 1902 a 2037). Windows: Żadna znana wersja systemu Windows nie obsługuje ujemnych znaczników czasu. Z tego powodu zakres poprawnych dat zawiera się pomiędzy rokiem 1970 a 2038. Ostatni dzień dowolnego miesiąca może być wyrażony jako zerowy dzień następnego miesiąca, ale nie jako -1 dzień. Obydwa poniższe przykłady wyświetlą "Ostatni dzień lutego 2000 to: 29"
29
echo strftime ("Ostatni dzień lutego 2010 to: %d", $ostatni);
Przykład 2. Ostatni dzień miesiąca <?php $ostatni = mktime (0,0,0,3,0,2010); echo strftime ("Ostatni dzień lutego 2010 to: %d", $ostatni); $ostatni = mktime (0,0,0,4,-31,2010); echo strftime ("Ostatni dzień lutego 2010 to: %d", $ostatni); ?>
30
Przykłady zastosowania date() i mktime()
$jutro = mktime (0,0,0,date("m") ,date("d")+1,date("Y")); $poprzedni_miesiac = mktime (0,0,0,date("m")-1,date("d"), date("Y")); $nastepny_rok = mktime (0,0,0,date("m"), date("d"), date("Y")+1); Notatka: Rozwiązanie to jest bardziej godne zaufania od dodawania lub odejmowania określonej liczby sekund, chociażby z powodu zmiany czasu.
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.