|
Porcjowanie wyników zapytania w
bazie tekstowej
Jednym z najczęściej zadawanych pytań jest jak porcjować wyniki zapytania w
"bazie" tekstowej. Nie mamy w tym wypadku tak jak w MySql-u możliwości
określenia limitu od-do
(jak to wygląda w MySql opiszę następnym razem).
Aby zrozumieć zasadę działania takiego wyświetlania
danych musimy najpierw przyglądnąć się pętli for:
for ($index=0; $index < 20; $index++){
}
powyższa pętla wyświetli nam pozycje od 0 do 20
(wyświetlamy pozycje dopóki zmienna $index jest
mniejsza od 20)
Aby porcjować pozycję musimy cyfry 0 i 20 zamienić na zmienne np.
for ($index=$pos; $index < $ilepoz; $index++){
}
-------------------------------------------------------------
$pos="20";
$ilepoz="30";
//zakładamy że powyższe zmienne zostały przesłane linkiem
for ($index=$pos; $index < $ilepoz; $index++){
}
ten przykład wyświetli nam pozycje od 20 do 30 tym samym jeśli prześlemy w linku do następnej strony ostatnie wartości
tych zmiennych i dodamy maksymalną ilość wyświetlanych pozycji na stronie (w
tym wypadku 20)
wyświetlimy pozycje: od wartości $pos + 20 do wartości
$ilepoz + 20.
-------------------------------------------------------------
...a teraz praktycznie:
Przykład:
Załóżmy że wcześniej wprowadzaliśmy dane z formularza
o polach imie i email np. w ten sposób:
<?
$fp = fopen("dane.txt", "a");
flock($fp,2);
fwrite($fp, "$imie||$email||\n");
flock($fp,3)
fclose($fp);
?>
-------------------------------------------------------------
Skrypt wyświetlający:
<?
$max="20";//tu ustawiamy maksymalną ilość wyświetlanych pozycji
na stronie
$count="0";
//jeśli zmienna next jest pusta zaczynamy od pozycji 0
if($next==""){$next="0";}
else{$next=$max;}
//jeśli zmienna pos przesyłana w linku jest pusta ustawiamy jej wartość na
0
//jeśli nie dodajemy do niej zmienną next która przejęła wartość max
czyli 20
if($pos==""){$pos="0";}
else{$pos=$pos+$next;}
//tu określamy do której pozycji mamy wyświetlić dane
if($ilepoz==""){$ilepoz=$max;}
else{$ilepoz=$ilepoz+$next;}
$plk = file("dane.txt");
//wykonujemy pętle i dzielimy plik najpierw linie później tekst
//pomiędzy operatorami ||
for ($index=$pos; $index < $ilepoz; $index++)
{ $g = split("\|", chop($plk[$index]));
$split = explode("||", $plk[$index]);
$count++;
//wyświetlamy elemeny tablicy jeśli nie są puste
if(($split[0]!="") && ($split[1]!="")){
echo "$count. <a href=mailto:\"$split[1]\">$split[0]</a><br>";}
}
//jeśli wyświetlana pozycja jest większa od maksymalnej robimy link wstecz
//tym samym link pojawi się tylko na następnych stronach
if($pos>="$max"){
echo"<a href=\"javascript:history.back()\"><<
wstecz</a> ";
}
//jeśli ostatnia wyświetlona pozycja jest mniejsza od ilości wszystkich
pozycji
//w tablicy wyświetlamy link do następnych
//to jak przedstawimy linki do następnych stron zależy już od naszej pomysłowości
if($ilepoz<count($plk)){
echo"<a href=\"index.php3?next=$max&pos=$pos&ilepoz=$ilepoz\">następne
>></a>";
}
//tu wyświetlamy np. numer wyświetlonej strony
$numer_strony = $ilepoz/$max;
echo"<br><br><b>$numer_strony strona</b><br><br>";
?>
Ogólnie zasada jest bardzo prosta:
przesłać ostatnie wartości zmiennych w pętli do następnej strony i dodać
do nich ile pozycji następnych ma wyświetlić - najprostsza matematyka.
Praktyczny przykład będzie do podglądnięcia w UltraNews v04...a więc
powodzenia :)
dodał: Bastek
|