SYSTEMY TELEINFORMATYCZNE

Transkrypt

SYSTEMY TELEINFORMATYCZNE
SYSTEMY
TELEINFORMATYCZNE
Wprowadzenie do PHP
AiR 5r.
Wykład 5
Tablice
Tablica to zmienna, która przechowuje zbiór lub sekwencję
wartości. Tablica może posiadać wiele elementów, a każdy z nich może
przechowywać pojedynczą zmienną, taką jak tekst bądź liczby, lub też inną
zmienną. Tablice zawierające w sobie inne tablice są nazywane
wielowymiarowymi.
0
Książki
1
Filmy VHS
2
indeksy
Filmy DVD
Produkty
Wartości przechowywane w tablicy nazywane są elementami tablicy.
Każdy z elementów tablicy posiada indeks (klucz) umożliwiający
dostęp do niego.
PHP obsługuje tablice indeksowane numerycznie, jak i asocjacyjne.
Tablice indeksowane numerycznie stosowane są w większości języków
programowania. W PHP indeks numeryczny zaczyna się od
wartości "0".
Tablice asocjacyjne stosowane w PHP jako wskaźnika używają
najczęściej łańcucha znaków.
Tablice indeksowane numerycznie
Tworzenie tablicy:
$produkty[0] = "Ksiazki";
$produkty[1] = "Filmy VHS";
$produkty[2] = "Filmy DVD";
Albo konstrukcja array:
$produkty = array("Ksiazki","Filmy VHS","Filmy DVD");
$produkty1 = array(1=>"Ksiazki","Filmy VHS","Filmy DVD");
//zmiana indeksu startowego
$produkty2 = array(1=>"Ksiazki",3=>"Filmy VHS",5=>"Filmy
DVD"); // „tablica rzadka"
Dostęp do elementów tablicy:
echo $produkty[1];
for ($i = 0; $i<3; $i++)
echo $produkty[$i];
Tablice asocjacyjne
Tworzenie tablicy:
$ceny = array("Biblia PHP"=>123, "Faraon"=>89, "Atlas
świata"=>243);
przykład tworzy tablicę w której nazwy produktów są kluczami, a ceny
wartościami.
$ceny["Pan Tadeusz"] = 149;
$el
Dostęp do elementów tablicy:
key
0
value
1
echo $ceny["Pan Tadeusz"];
Biblia
BiBlia
123
123
while ($el = each($ceny))
{
PHP
PHP
echo $el["key"];
echo " - ";
echo $el["value"];
echo "<br>";
}
funkcja each() zwraca bieżący element tablicy i przechodzi do
następnego
$el jest tablicą o 4 elementach:
"key" i 0 – zawierają klucz bieżącego elementu tablicy $ceny
"value" i 1 – zawierają wartość bieżącego elementu tablicy $ceny
Tablice heterogeniczne – wartości przechowywane w tablicy mogą być
różnych typów.
$mieszana = array("mały piesek", 63, 4.25, false);
var_dump($mieszana);
var_dump(zmienna_tablicowa)
wyświetla zawartość i typ zmiennej, dodając odstępy
albo
print_r (zmienna_tablicowa)
Tablice wielowymiarowe
Elementy tablic mogą przechowywać inne tablice -> w ten sposób
można utworzyć tablicę dwuwymiarową traktowaną jak macierz
Tak zdefiniowana tablica składa się z trzech wektorów
Biblia PHP
PHP
123
FAR
Faraon
89
ASW
Atlas świata
243
Tworzenie tablicy dwuwymiarowej
a) indeksowanej numerycznie
$prod = array(array ("PHP", "Biblia PHP", 123),
array("FAR", "Faraon", 89),
array("ASW", "Atlas świata", 243) );
Dostęp do elementów tablicy:
echo $prod[0][1]; //itd
lub z użyciem pętli for:
for( $rzad=0; $rzad<3; $rzad++)
{
for( $kol=0; $kol<3; $kol++)
echo " | ".$prod[$rzad][$kol];
echo "<br>";
}
a) asocjacyjnej
$prod = array( array (
array(
array(
"Kod"=>"PHP",
"Nazwa"=>"Biblia PHP",
"Cena"=>123
),
"Kod"=>"FAR",
"Nazwa"=>"Faraon",
"Cena"=>89
),
"Kod"=>"ASW",
"Nazwa"=>"Atlas świata",
"Cena"=>243)
);
Dostęp do elementów tablicy:
echo $prod[0]["Nazwa"]; //itd
lub:
for( $rzad=0; $rzad<3; $rzad++)
echo " | ".$prod[$rzad]["Kod"].
" | ".$prod[$rzad]["Nazwa"].
" | ".$prod[$rzad]["Cena"]." |<br>";
Sortowanie tablic
Funkcja sort()
$produkty = array("Książki","Filmy VHS","Filmy DVD",
"filmy DVD", "Plyty CD", Plyty VCD");
for($i=0; $i<6; $i++)
echo $produkty[$i]."<br>";
echo "Oto produkty:<br>";
sort($produkty);
echo "Oto sortowane produkty:<br>";
for($i=0; $i<5; $i++)
echo $produkty[$i]."<br>";
rsort($produkty);//porządek odwrotny!
for($i=0; $i<5; $i++)
echo $produkty[$i]."<br>";
F. sort() zwraca uwagę na wielkość liter, dlatego wielkie litery
zostaną umieszczone przed małymi
Zliczenie elementów tablicy
count(tablica)
F. count() działa na wszystkich typach zmiennych i zwraca 0 jeśli
badana jest zmienna pusta lub nieustawiona (można wykorzystać
isset() i is_array())
Do rozdzielania ciągów na tablicę służy funkcja explode(). Jako
pierwszy parametr trzeba do niej podać znak lub dłuższy ciąg który
oddziela kolejne pola, jako drugi ciąg do rozdzielenia.
<?php
$dane="alfa;beta;gamma;delta";
$tablica = explode(";", $dane);
?>
Wyszukiwanie minimalnej i maksymalnej wartości w tablicy
min(tablica), max(tablica)
<?php
…
echo "Najmniejsza wartosc:".min($dlugosci)." <br>";
echo "Najwieksza wartosc:".max($dlugosci)." <br>";
?>
Znajdowanie wartości w tablicy
in_array(igla, stog_siana) – funkcja zwraca true jeśli wartość igla
jest w tablicy stog_siana
…
if (in_array(194, $dlugosci))
echo "Liczba 194 jest w tablicy";
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.
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 = @fopen($plik, "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.)
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
lub
$msg = file('adres/nazwa_pliku');
fclose($file);
echo $msg;
Można podawać liczbę znaków do odczytania
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
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).
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");
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);
?>
Funkcje czasu
time
Zwraca aktualny unixowy znacznik czasu
Opis
int time ( )
Zwraca aktualny czas, podawany jako liczba sekund, które
upłynęły od unixowej Epoki (1 stycznia 1970 00:00:00 GMT).
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.
Najważniejsze znaki używane 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"
s - sekundy; i.e. "00" to "59"
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ą.
Przykłady użycia funkcji date()
Przykład 1.
echo date ("l dS of F Y h:i:s");
echo "1 lipca 2010 ----- " . date ("l", mktime(0,0,0,7,1,2010));
Przykład 2.
•
•
•
•
•
•
<?php
$dzis=date('d.m.Y');
echo $dzis."<BR>";
$jutro=date('d.m.Y',time()+3600*24);
echo $jutro;
?>
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.
Przykład 1. przykład mktime()
<?php
echo date ("M-d-Y", mktime
(0,0,0,12,32,2007));
echo date ("M-d-Y", mktime (0,0,0,13,1,2007));
echo date ("M-d-Y", mktime (0,0,0,1,1,2008));
echo date ("M-d-Y", mktime (0,0,0,1,1,2008));
?>
rok może być liczbą dwu lub czterocyfrową, przy czym
wartości dwucyfrowe z przedziału 0-69 będą mapowane do
2000-2069, a z przedziału 70-99 do 1970-1999
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.
Przykład. Ostatni dzień miesiąca
<?php
$ostatni = mktime (0,0,0,3,0,2012);
echo "Ostatni dzień lutego 2012 to:".date('d', $ostatni);
?>
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.
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. Formularze wysyłane przez GET mają
ograniczoną długość.
Należy pamiętać o zdefiniowaniu nazw wszystkich pól
formularza z których skrypt ma skorzystać.
Przykład:
<FORM ACTION="skrypt2.php" METHOD="post">
<INPUT TYPE="text" NAME="tekst">
<input type="submit"
value="Wyslij">
</FORM>
name="x"
Wartości zmiennych będą dostępne wówczas w tablicy $_POST
lub
$_GET (w zależności od atrybutu METHOD formularza)
Czyli skrypt2.php istniejący na serwerze zawierający:
<?php
echo($_POST['tekst']);
?>
prawidłowo dane przesłane na serwer i umieszczone w tablicy
poprawnie prześle z powrotem do klienta
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.
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.
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
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)
submit – przycisk służący do wysyłania formularza lub do
kasowania zawartości wypełnionych pól;
textarea – wiele wierszy tekstu
checkbox – pole wyboru (jeden z dwu);
radio – pole wyboru (jeden z wielu);
select – menu rozwijane lub lista;
Przykład
<FORM ACTION="licz.php" METHOD="POST">
<P>Liczba1: <INPUT TYPE="text" NAME="val1" SIZE=10></p>
<P>Liczba2: <INPUT TYPE="text" NAME="val2" SIZE=10></p>
<p>Dodaj<INPUT TYPE="radio" NAME="calc" VALUE="dodaj"
checked></p>
<p>Odejmij<INPUT TYPE="radio" NAME="calc" VALUE="odejmij"></p>
<INPUT TYPE=submit NAME="Calculate" VALUE="Wykonaj">
</FORM>
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 = [email protected] //własny adres
Można zastosować funkcję w skrypcie:
ini_set('sendmail_from','[email protected]');
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 ("[email protected]"; "to jest temat wiadomości",
"to jest treść bardzo krótkiej wiadomości",
"od:[email protected]")