Witaj, Gościu O nas | Kontakt | Mapa
Wortal Forum PHPEdia.pl Planeta Kubek IRC Przetestuj się!

Tutorial PHP/MySQL

Pojedyncze rekordy i śledzenie błędów

W poprzednich dwóch częściach poradnika pokazano metody na pobranie danych z bazy i ich wyświetlenie. W tej części nastąpi sfinalizowanie aspektów wyświetlania i pobierania oraz pozbywaniu się błędów.

Śledzenie błędów

Podczas wyświetlania informacji z bazy danych może zdarzyć się sytuacja, że żądanych danych nie ma w bazie, jeśli pozwalasz na aktualizację i usuwanie danych. Na szczęście korzystając z PHP i MySQL jest prosta droga aby zaradzić tego typu problemom

$num=mysql_numrows($result);

gdzie $result zawiewa wynik zapytania w bazie danych (jak wybranie wszystkich rekordów). Tak jak już objaśniałem ustawi wartość $num jako numer wiersza w rezultacie (zostało to wykorzystane przy pętli w czwartej części).Możesz także dodać warunek IF:

if ($num==0) {
echo "Baza danych nie zawiera jeszcze kontaktów";
} else {
 // pętla wyświetlająca dane
}

Możesz również rozszerzyć np. poprzez dodanie linka umożliwiającego dodanie kontaktu jeśli jeszcze żaden nie istnieje.

SORTOWANIE DANYCH

Możesz nie tylko wybierać i wyświetlać rekordy z bazy danych, lecz również sortować dane (np. wyświetlić dane w porządku alfabetycznym). Standardowo wyniki są sortowane po wartości pola ID począwszy od wartości 1 w górę. Możesz sortować wyniki po wartości dowolnie wybranego pola, na przykład możesz posortować alfabetycznie kontakty bazując na polu last name. Dla nie zaznajomionych ze standardowymi bazami danych, powinno nastąpić sortowanie w porządku rosnącym od A do Z (lecz można zrobić to również rosnąco pod względem 1 – 10 etc) lub malejącym Z do A lub 10 do 1. Aby to uzyskać należy wydać polecenie:

SELECT * FROM contacts ORDER BY last ASC

Możesz użyć DESC w celu sortowania malejącego.

Więcej sposobów użycia mysql_numrows i sortowania

Wartość jaką przypisano do $num jest bardzo ważna pod względem korzystania z pętli i wykrywania błędów ma też wiele innych zastosowań. Przykładem może być chęć wyświetlenia tylko 5-ciu ostatnich rekordów dodanych do bazy. Dane powinny być wprowadzone bazując na ich numerach ID ( tak aby wiersz o największym ID był dodany jako ostatni). To wymaga pobrania ich w sposób malejący.

Są już zapisane w sposób od najnowszego do najstarszego, lecz skrypt nadal nie pokaże pierwszych 5 wyników. Aby to osiągnąć należy ustawić pętle w ten sposób aby wartość $num ustawiona była na wartość 5 (pętla zostanie wykonana tylko 5 razy na 5 obiektach).

Oczywiście, zanim tego dokonamy należy sprawdzić czy $num jest większe od 5, jeśli uruchomisz pętle 5 razy na tylko 3 rekordach otrzymasz błąd. Zaradzenie mu jest bardzo proste do zrealizowania za pomocą np. Poniższego kodu:

if ($num>5) {
$to=5;
}else{
$to=$num;
}

$i=0;
while ($i < $to) {
Dalsza część kodu

Powyższy kod sprawdzi czy w bazie jest więcej niż pięć wierszy. Jeśli tak pętla wykona się 5 razy. Jeśli nie pętla wykona się tyle razy ile jest zapisanych rekordów.

POLE ID

Jeśli się cofniesz do rozdziału z opisem tworzenia bazy danych , przypomnisz sobie iż zawarliśmy w niej pole numeryczne o nazwie ID. Przypisano mu wartość klucza podstawowego oraz typ wartości auto_increment. Już wyjaśniono iż jest to unikalne pole dla każdego rekordu w bazie danych. W tym miejscu pokazane zostanie jak je wykorzystać w celu pobrania pojedynczego rekordu z bazy.

WYBIERANIE POJEDYNCZEGO POLA

Na końcu poprzedniej części pokazano w jaki sposób pobrać rekord bazując na wartości wybranego pola:

SELECT * FROM contacts WHERE field='value'

Używając unikalnego pola ID możemy pobrać dowolny rekord używając zapytania:

SELECT * FROM contacts WHERE id='$id'

Gdzie $id jest wartością numeru rekordu. To może wydawać się to nie intuicyjne i nie wygodne można wykorzystać to na wiele przydatnych sposobów. Np. jeśli chcesz posiadać generowaną dynamicznie stronę powiązana z bazą danych i obsługiwaną przez skrypt PHP, powinieneś napisać go i zawrzeć dane z bazy danych w szablonie. Następnie używając pola ID możesz pobrać pojedynczą stronę czy wyniki i zawrzeć je w wyniku. Możesz nawet użyć url strony aby wybrać rekord np.

http://www.yoursite.com/news/items.php?item=7393

Następnie skrypt odczyta rekord o tym ID i przypisze mu wartość $item zawartą w rekordzie o ID 7393

Linkowanie do wybranego rekordu

Używając tej metody wybierania rekordu poprzez adres URL można rozszerzyć ją do generowania url dynamicznie poprzez wartość przypisaną do pola ID. Wydaje się to skomplikowane więc zaproponuje przykładowy skrypt realizujący to zadanie. Pokaże w jaki sposób stworzyć stronę aktualizacyjną za pośrednictwem której użytkownik będzie mógł szczegóły kontaktowe.

Aby tego dokonać inna kolumna zostanie zawarta w wynikowej kolumnie, i będzie zawierała link do aktualizacji danych. Link ten powinien prowadzić do strony pozwalającej na aktualizacje danych .Aby ustawić rekord użyjemy:

?id=$id

Pobierając ID rekordu wraz z niesionymi przez niego informacjami , podczas jego wyświetlania danych z bazy , ten kod spowoduje utworzenie linka z przypisaną wartością ID, co na stronie aktualizacji danych pozwoli na pobranie interesującej nas danej i dokonania jej modyfikacji.

CZEŚAE 7

W tej części pokażemy jak stworzyć stronę służącą do aktualizacji zapisanych w bazie danych informacji.

Informacje na podobny temat:
Wasze opinie
Wszystkie opinie użytkowników: (7)
gdzie link?
Piątek 15 Lipiec 2011 12:45:10 pm - beneglih

Fajny tutorial, tylko dlaczego na jego końcu jest informacja, że skrypt można pobrać, dwukropek i puste miejsce, brak linka...

ort
Sobota 13 Marzec 2010 10:02:17 pm - katwer <katwer_at_op.pl>

Co jak co, ale artykuł do druku na poważnym portalu, to już powinien przejść przez standardowe sprawdzanie pisowni choćby zautomatyzowane, jeśli autor nie wie, jak się pisze HASŁO.

Sorry, ale takie lekceważenie języka polskiego - musiałam.

pytanie
Niedziela 01 Lipiec 2007 8:56:38 pm - bercik156 <fifunia07_at_wp.pl>

mam pytanie jak zmienić w bazie danych język żeby na stronie były polskie znaki??

złeeee
Poniedziałek 07 Maj 2007 9:01:03 am - wbeatn <wbeatn_at_gmail.com>

dlaczego w tym artykule jest podany bledny kod ? strona z dodawaniem do bazy mi dziala, to samo jest ze strona ktora wyswietla rekordy, ale strona ktora ma wyswietlic formularz edytujacy wywala blad 'Warning: mysql_numrows(): supplied argument is not a valid MySQL ...' .. robie wszystko wedlug instrukcji i takie cos :/

Dłąd :D
Sobota 25 Listopad 2006 11:38:44 pm - sabistik <wiktorski_at_poczta.php.pl>

haha, Czemu nikt wcześniej tego nie zraportował:
http://irc.php.pl/blog/?id=392
?? ;D

Wyjaśnienie małe
Piątek 27 Październik 2006 9:26:17 pm - slump <slump_Ilawa_at_wp.pl>

Twoje sugestje są jak najbardziej trafne, jednak pamiętaj, że jest to tylko translacja arta z języka Angielskiego.
Pozdrawiam

Kilka luźnych uwag
Czwartek 26 Październik 2006 12:12:12 pm - Diabl0

Rozumiem że jest to art dla totalnie początkujących i przeglądałem go bardzo pobieżnie, ale mimo wszystko mam kilka zastrzeżeń:

1 - instalowanie phpmyadmin na serwerze bez odpowiedniego zabezpieczenia go - kto się opiekuje serwerami niech spojrzy sobie w logi jak często trafiają się roboty szukające phpmyadmin - nie sądzę aby szukały one sobie tylko z czystej ciekawości. Trzeba było przynajmniej napisać jak go zabezpieczyć przez .htaccess

2 - SQL incjection - wstawianie danych pochodzących od usera prosto do bazy bez sprawdzenia i zabezpieczenia. Temat ten wszędzie jest tak często wałkowany że tutorial dla początkujących z takim błędem to duży imho duża porażka. Aż tak ciężko było poświęcić dwa akapity na wyjaśnienie zagrożenia i zaproponowanie chociażby mysql_escape_string?

3 - nie wiem skąd takie parcie na while ($i < $num) i każdorazowe przepisywanie danych? IMHO dużo wygodniejsze (zwłaszcza dla początkujących, a nie wiem też czy nie szybsze) jest while ($row = mysql_fetch_assoc($ret).

4 - drobiazg, ale: <? :) <?php jest bardziej prawidłowe zwłaszcza że już słyszałem jakieś pogłoski że <? ma zostać z czasem usunięte :)

5 - formatowanie kodu - ja rozumiem że system znaczników na php.pl może utrudniać zachowanie wcięć itp, ale skoro to jest tutorial dla początkujących to przydało by się też zadbać o uczenie ich dbałości o wygląd kodu i jego staranniejsze formatowanie - to naprawdę ułatwia w przyszłości życie a dzięki odrobiny praktyki stosuje się praktycznie odruchowo.

To takie moje drobne uwagi po pobieżnym przejrzeniu arta (głównie fragmentów kodu) . Nie jest to żadna miażdżąca krytyka - po prostu wychodzę z założenia że o ile w arcie dla doświadczonych programistów nawet nie było by sensu zwracać na to uwagi (w końcu każdy i tak ma już wyrobione własne nawyki i przyzwyczajenia), to jednak w arcie dla początkujących warto położyć większy nacisk na tego typu drobiazgi aby od początku wtłaczać i wyrabiać w nich dobre nawyki.

Mentax.pl    NQ.pl- serwery z dodatkiem świętego spokoju...   
O nas | Kontakt | Mapa serwisu
Copyright (c) 2003-2024 php.pl    Wszystkie prawa zastrzeżone    Powered by eZ publish Content Management System eZ publish Content Management System