Wpisy otagowane ‘PHP’
Zabezpieczony: Optymalizacja przetwarzania tablicy w pętli
czwartek, 28 Październik 2010Wprowadzenie do ADODB
wtorek, 22 Czerwiec 2010Biblioteka ADODB jest warstwą abstrakcyjną pośredniczącą w komunikacji z bazą danych. Dzięki niej aplikacja może być przenoszona między wieloma różnymi systemami baz danych. ADODB obsługuje MySQL, PostgreSQL, Oracle, Interbase, Microsoft SQL Server, Access, FoxPro, Sybase, ODBC i ADO. Ułatwione jest też wysyłanie i odbieranie danych z bazy z poziomu skryptu PHP.
Tworzenie obiektu i nawiązywanie połączenia
Połączenie z bazą za pomocą biblioteki ADODB wygląda następująco:
include("adodb5/adodb.inc.php"); $db = NewADOConnection('mysql'); $db->Connect("127.0.0.1", "root", "haslo", "mojabaza"); |
W pierwszej linijce włączamy do skryptu bibliotekę ADODB. Ścieżka do pliku adodb.inc.php może być nieco inna – ważne, by wskazywała na wspomniany wcześniej plik. W drugiej linijce tworzymy obiekt komunikacji z bazą danych. Funkcja NewADOConnection() w argumencie przyjmuje symbol bazy danych. Ostatnia linijka łączy obiekt $db z rzeczywistą bazą danych. Metoda Connect pobiera kolejno argumenty: adres bazy danych, nazwa użytkownik, hasło i nazwa bazy danych.
Pobieranie i aktualizacja danych – metoda Execute()
$rs = $db->Execute('SELECT * FROM uzytkownik'); $rs = $db->Execute("UPDATE uzytkownik SET imie=$imie WHERE id=45;"); |
W metodzie Execute możemy umieścić dowolne zapytanie SQL. Jeżeli będzie to zapytanie pobierające dane, dane będą dostępne w zmiennej $rs
Pobieranie danych i wyświetlanie danych z bazy – metody: GetRow(), GetAll(), GetOne()
Istnieje znacznie wygodniejszy sposób pobierania danych z bazy niż metoda Execute(). Są to metody: GetRow(), GetAll() i GetOne(). W tych metodach umieszczamy tylko zapytania SELECT.
$rs = $db->GetAll('SELECT * FROM user WHERE id<40'); $rs = $db->GetRow('SELECT * FROM user WHERE id=1'); $rs = $db->GetOne('SELECT login FROM user WHERE id=1'); |
Metoda GetAll() zwraca wiele rekordów – wszystkie będące wynikiem zapytania. Wynik zapisywany jest w tablicy dwuwymiarowej $rs. Elementami tablicy głównej są tablice z polami jednego rekordu pobranego z bazy danych.
Metoda GetRow() zwraca jeden rekord w postaci tablicy jednowymiarowej. Jeżeli zapytanie zwróci więcej danych, zapisany zostanie jedynie pierwszy rekord.
Metoda GetOne() zwraca pojedynczą wartość. Jeżeli zapytanie zwróci więcej danych, zwrócona zostanie jedynie wartość pierwszej kolumny z pierwszego rekordu wyniku zapytania.
Biblioteka ADODB jest dużym ułatwieniem dla każdego programisty. 3 z 6 stron tworzonych na szkoleniu Zawodowy Webmaster wykorzystują ją do wszelkich operacji na bazie danych. Oprócz opisanych powyżej możliwości na szkoleniu wykorzystywane są również złączenia, podzapytania i funkcje agregujące.
Zabezpieczony: Odbieranie danych z formularza
czwartek, 4 Luty 2010Jak używać funkcji round()
środa, 2 Grudzień 2009Php ma wiele dosyć ciekawych funkcji. Dzisiaj postanowiłem opisać jedną z nich. Funkcja round() zwraca zaokrągloną wartość pierwszego argumentu z dokładnością do miejsca podaną w drugim argumencie. Drugi argument jest opcjonalny i domyślnie wynosi 0. Zaokrąglanie odbywa się zgodnie z regułami matematycznymi. Czyli:
<?php echo round(13.4); ?> |
wyświetli liczbę 13, a kod:
<?php echo round(32.5); ?> |
wyświetli liczbę 33. Podanie jawnie drugiego argumentu o wartości 0 nie wnosi niczego nowego w działaniu funkcji. Kod:
<?php echo round(12.6, 0); ?> |
wyświetli liczbę 13. Natomiast przy wartościach większych od zera, zaokrąglenia dokonuje się do części dziesiątych, setnych, tysięcznych…
<?php echo round(3.976323, 2); ?> |
Powyższy kod wyświetli nam 3.98. Przy wartościach mniejszych od zera drugiego argumentu, zaokrąglanie obywa się do dziesiątek, setek, tysięcy…
<?php echo round(3421757, -3); ?> |
Powyższy kod wyświetli 3422000
Podstawy wyświetlania danych w php
piątek, 27 Listopad 2009Częstym problemem programistów (nie tylko początkujących) jest optymalizacja kodu. Tymczasem mało kto przejmuje się najprostszymi metodami odciążania serwera. Bo czy jest coś prostszego i bardziej powszechnego niż wyświetlanie tekstu przez php. W tym tekście zajmę się instrukcją echo, ale przedstawione zasady są dosyć uniwersalne i przez większość osób niestety zaniedbywane.
echo jest najprostszą instrukcją do wyświetlania tekstu. Można wywołać ją z tekstem przekazanym przez zmienną:
<?php $tekst='Ala ma kota.'; echo $tekst; ?> |
przez łańcuch znaków umieszczony w apostrofach:
<?php echo 'Ala ma kota.'; ?> |
lub łańcuch znaków umieszczony w cudzysłowie:
<?php echo "Ala ma kota."; ?> |
Wszystkie trzy sposoby wyświetlą dokładnie to samo. Można też przekazać do instrukcji echo tekst razem ze zmiennymi.
<?php $zwierz='kota'; echo "Ala ma $zwierz.<br />"; $zwierz='tygrysa'; echo "Ala ma $zwierz."; ?> |
Efektem powyższego będą dwie linijki tekstu:
Ala ma kota.
Ala ma tygrysa.
Zmienne umieszczone w cudzysłowie zostaną zinterpretowane. Inaczej jest w przypadku apostrofów. Kod w postaci:
<?php $zwierz='kota'; echo 'Ala ma $zwierz.<br />'; $zwierz='tygrysa'; echo 'Ala ma $zwierz.'; ?> |
da efekt nieco odmienny:
Ala ma $zwierz.
Ala ma $zwierz.
Czysty tekst lepiej jest umieszczać w apostrofach niż w cudzysłowie. Cała zawartość cudzysłowu jest przetwarzana przez php co bardziej obciąża serwer. Przy jednej linijce i małej liczbie odwiedzin można to pominąć, ale przy większym serwisie to już jest różnica. Umieszczając tekst ze zmiennymi najlepiej jest stosować apostrofy dla tekstu, a zmienne dołączać operatorem konkatenacji (czyli kropki).
<?php $zwierz='kota'; echo 'Ala ma '.$zwierz.'.<br />'; $zwierz='tygrysa'; echo 'Ala ma '.$zwierz.'.'; ?> |
Tu efekt będzie zgodny z oczekiwaniami, a przy tym serwer mniej obciążony.
Ala ma kota.
Ala ma tygrysa.
Jeżeli już ktoś upiera się przy cudzysłowie, to nie ma powodu stosować operatora konkatenacji. Dwie pierwsze linie kodu będą dawały identyczny efekt i podobnie obciążają serwer. Trzecia linia jest bardziej przyjazna dla procesora.
<?php echo "Zamówienie nr" . $numer . " zostało przyjęte przez " . $user; echo "Zamówienie nr $numer zostało przyjęte przez $user"; echo 'Zamówienie nr' . $numer . ' zostało przyjęte przez ' . $user; ?> |
Co robią i czym się różnią funkcje isset() i empty()
środa, 23 Wrzesień 2009Wielu początkujących programistów php ma problemy z stosowaniem funkcji isset() oraz empty() – nie w każdej sytuacji potrafią jednoznacznie określić jaką wartość powinny te funkcje zwracać dla określonych argumentów. By wyjść im na przeciw postanowiłem zebrać najczęściej występujące przypadki i je wyjaśnić.
echo isset($a);
echo empty($a);
$a=NULL;
echo isset($a);
echo empty($a);
?>
Gdy zmienna $a nie istnieje lub ma wartość NULL, funkcja isset($a) zwróci wartość false, a funkcja empty($a) zwróci wartość true.
$a=true;
echo isset($a);
echo empty($a);
?>
Gdy zmienna $a ma wartość true, funkcja isset($a) zwróci wartość true, a funkcja empty($a) zwróci wartość false.
$a=false;
echo isset($a);
echo empty($a);
$a=0;
echo isset($a);
echo empty($a);
?>
Gdy zmienna $a ma wartość false lub 0, funkcje isset($a) i empty($a) zwrócą wartość true.
$a=-3;
echo isset($a);
echo empty($a);
$a=1.36;
echo isset($a);
echo empty($a);
?>
Gdy zmienna $a ma wartość liczbową różną od 0, to isset($a) zwróci wartość true, a funkcja empty($a) zwróci wartość false.
$a=”;
echo isset($a);
echo empty($a);
$a=’0′;
echo isset($a);
echo empty($a);
?>
Gdy zmienna $a jest pustym łańcuchem znaków lub łańcuchem składającym się z pojedynczego znaku ’0′, funkcje isset($a) i empty($a) zwrócą wartość true.
$a=’000′;
echo isset($a);
echo empty($a);
$a=’ ‘;
echo isset($a);
echo empty($a);
$a=’Ala ma 3/4 kota’;
echo isset($a);
echo empty($a);
?>
Gdy zmienna $a zawiera kilka znaków ’0′, lub zawiera znak spacji lub jest dowolnym innym ciągiem znaków, to isset($a) zwróci wartość true, a funkcja empty($a) zwróci wartość false.
$a=array();
echo isset($a);
echo empty($a);
?>
Gdy zmienna $a jest tablicą nie zawierającą żadnych elementów, funkcje isset($a) i empty($a) zwrócą wartość true.
$a=array(NULL);
echo isset($a);
echo empty($a);
$a=array(false);
echo isset($a);
echo empty($a);
$a=array(0);
echo isset($a);
echo empty($a);
$a=array(”);
echo isset($a);
echo empty($a);
?>
Gdy zmienna $a jest tablicą zawierającą puste elementy np. NULL, false, 0, pusty łańcuch znaków, to isset($a) zwróci wartość true, a funkcja empty($a) zwróci wartość false.
$a=array(‘kolor’ => ‘zielony’);
echo isset($a['kształt']);
echo empty($a['kształt']);
$a=array(‘krokodyl’, ‘żaba’, ‘hipopotam’);
echo isset($a[8]);
echo empty($a[8]);
class Test
{
var $a;
}
$a=new Test();
echo isset($a->a);
echo empty($a->a);
?>
Gdy odwołujemy się do nieistniejącego klucza lub indeksu tablicy albo do pustego pola obiektu, funkcja isset($a) zwróci wartość false, a funkcja empty($a) zwróci wartość true.
Dla wygody wszystkie rozpatrywane przypadki zebrałem w tabelce poniżej.
badany element | isset() | empty() |
brak zmiennej | false | true |
---|---|---|
NULL | false | true |
wartość logiczna true | true | false |
wartość logiczna false | true | true |
wartość liczbowa 0 | true | true |
inna wartość liczbowa | true | false |
pusty łańcuch znaków | true | true |
łańcuch znaków zawierający zero | true | true |
łańcuch znaków zawierający wiele zer | true | false |
spacje | true | false |
dowolny ciąg znaków | true | false |
pusta tablica | true | true |
tablica zawierająca puste elementy (np. o wartościach NULL, false, 0, pusty łańcuch znaków) |
true | false |
nieistniejący klucz tablicy | false | true |
nieistniejący indeks tablicy | false | true |
pole klasy bez podstawionej wartości | false | true |