Porcjowanie zapytañ w MySQL cz.1By³o ju¿ o porcjowaniu zapytañ w bazie tekstowej,teraz nadszed³ czas na MySql...W MySql jest to tym ³atwiejsze ¿e wszystko odbywasiê za pomoc¹ parametru LIMIT podawanego w zapytaniu np:$zapytanie="SELECT * FROM wyszukiwarka WHERE opis LIKE '%$searchtext%' ORDER by id DESC" LIMIT 0,10;takie zapytanie pobierze dane od rekordu 0 do 10....tak wiêc ca³y problem to przekazanie tych parametrów do nastêpnej stronydodanie odpowiedniej liczby i wyœwietlenie...zatem spróbujmy to zrobiæ na przyk³adzie prostej wyszukiwarki:
<?phpif(($s=="") && ($e=="")){$s="0";//ustawiamy limit na 20 pozycji na stronie$e="20";}//³¹czymy siê z baz¹$conn = mysql_connect("localhost","user","password");mysql_select_db("MOJABAZA");$zapytanie="SELECT * FROM wyszukiwarka WHERE opis LIKE '%$searchtext%' ORDER by id DESC" LIMIT $s,$e;$wynik=mysql_query($zapytanie);echo"Wyniki wyszukiwania dla zapytania: <b>$searchtext</b><br><br>";//teraz zliczymy sobie iloœæ rekordów, bêdzie nam to potrzebne aby wiedzieæ czy//czy utworzyæ link "nastêpna strona" jeœli bêdzie to potrzebnelist($ile)=mysql_fetch_row(mysql_db_query("MOJABAZA","SELECT count(*) FROM wyszukiwarka WHERE opis LIKE '%$w%'"));while($rekord=mysql_fetch_array($wynik)){echo"<table border=\"1\" cellpadding=\"2\" width=\"100%\"><tr><td bgcolor=\"#80D6FF\"><a href=\"".$rekord['adres']."\">".$rekord['tytul']."</a></td></tr><tr><td>".$rekord['opis']."</td></tr></table>";}//generujemy linki do nastêpnej strony jeœli rekordów jest wiêcej ni¿ tych wyœwietlonychecho"<center>";if($ile <= $e){echo"<img src=\"img/bc.jpg\" border=\"0\"> <a href=\"javascript:history.back();\">poprzednia strona</a>";}if(($ile <= $e) && ($ile > $e)){echo" | ";}if($ile > $e){echo"<a href=\"$url/show_l.phtml?s=$e&e=".$b=$e+$e."\">nastêpna strona</a> <img src=\"img/nx.jpg\" border=\"0\">";}echo"</center>";?>
przekazuj¹c cyferki w linku (<a href=\"show_l.phtml?s=$e&e=".$b=$e+$e."\">)powodujemy ¿e wartoœæ LIMIT $s,$e wci¹¿ jest zwiêkszana np.przy pierwszym wyœwietleniu strony ten link bêdzie wygl¹da³ tak:<a href=\"show_l.phtml?s=20&e=40\">tak wiêc przy pierwszym wyœwietleniu dostaniemy pozycje od 0 do 20a w linku przeka¿emy informacje o tym ¿e na nastepnej stroniemaj¹ zostaæ wyœwietlone pozycje od 20 do 40.To oczywiœcie przyk³ad najprostszy z mo¿liwych... chodzi tylko o to¿eby zrozumieæ zasadê dzia³ania takiego porcjowania....w nastêpnej czêœci opiszê jak zrobiæ porcjowanie na zasadzielinków na stronie w stylu [1] [2] [3] [4] [5]tak jak to ma miejsce na przyk³ad na Google....na razie polecam poæwiczenie na prostszym przyk³adzie, a ten powinien byæ idealny.
Najczęstsze błędy
Każdemu zdarzają się pomyłki, mnie również. PHP jednak ułatwia nam nieco sprawę, bo wyświetla komunikaty o błędach. Postaram się objaśnić znaczenie tych najczęściej występujących.
Przykład: echo("tekst";Błąd: Parse error: parse error in 'nazwa pliku' on line 'linia'Znaczenie błędu: Brak nawiasu w instrukcji echo. (parse error - tu: błąd składni)Jak poprawić: wstawić nawias
Przykład: function aaa {echo("aaa");} Błąd: Parse error: parse error, expecting `'('' in 'plik' on line 'linia'Znaczenie błędu: Błąd składni - brak nawiasów w definicji funkcjiJak poprawić: jeżeli funkcja pobiera argumenty, to podać je w nawiasach. Jeżeli nie, to i tak wstawić puste nawiasy.
Przykład: if (isset($action) { echo("blablabla"); } Błąd: Parse error: parse error in 'nazwa pliku' on line 'linia'Znaczenie: to samo, co powyżej, ale tym razem to błąd w zagnieżdżeniu nawiasówJak poprawić: Dopisać jeszcze jeden nawias (od if)
$file = fopen("plik.txt"); Błąd: Warning: Wrong parameter count for fopen() in 'plik' on line 'linia'Znaczenie: Ostrzeżenie - zły parametr (argument) dla funkcji fopenJak poprawić: podaj odpowiedni drugi argument. Dla przypomnienia ich pełna lista://Funkcja fopen otwiera plik plik.txt:$plik = fopen("plik.txt","r"); // do odczytu$plik = fopen("plik.txt","w"); // do skasowania całej zawartości i zapisu$plik = fopen("plik.txt","a"); // do dopisywania nowej treści$plik = fopen("plik.txt","r+"); // do odczytu i zapisu$plik = fopen("plik.txt","w+"); // do skasowania wszystkiego, zapisu i odczytu$plik = fopen("plik.txt","a+"); // do dopisywania i odczytu
$p = fopen("plik.txt","r");fclose($p);Błąd: Jeżeli nie ma pliku plik.txt, to PHP zwróci komunikat:Warning: fopen("plik.txt","r") - No such file or directory in 'plik' on line 'linia'Znaczenie: Ostrzeżenie - nie ma takiego pliku lub katalogu (coś jak DOSowe 'Bad command or filename'... ktoś to jeszcze pamięta?)Jak poprawić: Stworzyć taki plik, albo zmienić wywołanie funkcji fopen do istniejącego plikuI związany z tym błąd:Warning: Supplied argument is not a valid File-Handle resource in 'plik' on line 'linia'Znaczenie: Podany argument nie jest prawidłowym "wskaźnikiem na plik" (wolna interpretacja) Jak poprawić: Jak wyżej
formularze
Bigby