Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Podzial na strony
Forum PHP.pl > Forum > PHP
rainer
Witam jestem nowy na forum
i mam pewien problem.
Mam baze danych mysql i napisalem wyszukiwarke
wszystko ladnie dziala podaje mi odpowiedzi ale:
czasem tych odpowiedzi na zadane zapytanie jest np. 5
a czasem 55 (calkiem spora baza).
Chcialem zrobic dzielenie odpowiedzi,
jesli np. odpowiedzi jest 55 to zeby byl podzial
na strony np. po 10 odpowiedzi na stronce.
Jest jakies proset rozwiazanie?
Pozdrawiam.
Piotrek
Może zadziała Ci coś takiego. To jest chyba jedno z prostszych rozwiązań. Można je łączyć w jakiś ciąg w wyszukiwarce zobacz np. http://www.krakcenbud.com.pl/modules.php?n...y=bud&type=wsio. Napewno nie jest doskonałe ale może ktoś na forum przy okazji coś podrzuci do tematu.

Kod
<?

    $offset=30; // po ile wyników

    if (!isset($min)) $min=0;

    if (!isset($max)) $max=$min+$offset;



    $q = "select jakies_pole from jakas_tabela ORDER BY jakas_nazwa LIMIT $min,$offset"; // dodaj sobie jakieś warunki

  $result = mysql_query($q);

    

    $nrows  = mysql_num_rows($result);

    $x=0;

          

    

    if ($nrows>0) {

    while($lista = mysql_fetch_array($result)) {

    

    echo "$lista[jakies_pole]<br>";



    $x++;

    }  





    } else {

    // np. nic o nie znaleziono

    }

          

          

                

$prev=$min-$offset;

    if ($prev>=0) {

    print "<a href="$PHP_SELF?min=$prev">";

    print "< poprzednie</a> &nbsp;";

    }



$next=$min+$offset;

    if ($x>=29) {

    print "<a href="$PHP_SELF?min=$max">";

    print "następne ></a>";

    }



?>


Powodzenia. Piotrek
rainer
a co to za zmienna $PHP_SELF
wledle tego kodu
pokazuje pierwsze 3 znalezione odpowiedzi
zmienilem
$offset=30 na =3
i
if ($x>=29) { na =2
ale jak dam nastepne to
Warning: Supplied argument is not a valid MySQL result resource in /katlog/szukaj.php on line 145
w lini 145 jest
$nrows = mysql_num_rows($result);
Piotrek
$PHP_SELF - to plik skryptu (on sam), ale zanim umieścisz na swojej go na swojej stronie spróbuj wypróbować sam kawałek kodu bo działa http://www.krakcenbud.com.pl/test6.php tylko zaraz po <? umieść mysql_connect(host, uzytk, haslo); oraz mysql_select_db(bazka); itp.


Piotrek
rainer
Witam Piotrze
kod niby dziala
log z mysql -a
gdy zadaje pierwsze zapytanie
020628 11:44:08 44 Connect www@localhost on
44 Init DB bkt
44 Query SELECT * FROM bazabkt WHERE branza LIKE 'kina%' ORDER BY 'kina%' LIMIT 0, 6
020628 11:44:09 44 Quit
gdy zadaje zapytanie z linka nastepne
to nieprzesyla wartosi WHERE i LIKE
020628 11:44:15 45 Connect www@localhost on
45 Init DB bkt
45 Query SELECT * FROM bazabkt WHERE LIKE '%' ORDER BY '%' LIMIT 6, 6
45 Quit

Jak popisac zeby dodawal te wartosi questionmark.gif?
Piotrek
Tu już chyba będziesz musiał poczekać na lepszego fachurę smile.gif - ale jeśli nie przenosi ci parametru linkiem czyli metodą GET to może masz register_globals = OFF wtedy coś takiego może się dziać. W pliku konfiguracyjnym php.ini (win) albo odpowiednikiem dla innego systemu należy zadać ON albo skorzystać z podpowiedzi castora http://forum.php.pl/viewtopic.php?t=637, którą napewno będę testował.

Piotrek
rainer
register_globals = On
bo przecia za pierwszym zapytaniem parametry sa przekazywane
SELECT * FROM bazabkt WHERE branza LIKE 'kina%' ORDER BY 'kina%' LIMIT 0, 6

dopiero gdy odwolam sie do linka generoanego przez:
print "<a href="$PHP_SELF?min=$max">";
parametyr nie sa przekazywane
SELECT * FROM bazabkt WHERE LIKE '%' ORDER BY '%' LIMIT 6, 6

moze jakies parametry do $PHP_SELF questionmark.gif?
Piotrek
Uczepiłeś się tego $PHP_SELF smile.gif żebyś wiedział na 100% że to nie w tym tkwi problem zamiast tego wpisz nazwę Twojego pliku w którym jest kod. Tak jak mój wcześniejszy plik to test6.php to kod może wyglądać nastęująco: print "<a href="test6.php?min=$max">";

Ja więcej nie wiem i przyznaję się uczciwie. Musisz poczekać na wypowiedzi innych. Jeśli mogę Ci jeszcze tylko poradzić - próbuj na początek odpalić ten kawałek kodu luzem tak jak w moim test6.php a później wstawić dopiero go do strony.

Tak dokładnie wygląda plik test6.php - zaznaczyłem Ci miejsca które musisz sam uzupełnić. Zapisz to dokładnie tak samo i przetestuj.

<?

mysql_connect([b]nazwa_hosta, nazwa_uzytkown, haslo_uzytkown);
mysql_select_db([b]nazwa_bazy_danych);



$offset=3;
if (!isset($min)) $min=0;
if (!isset($max)) $max=$min+$offset;


$q = "select * from [b]kategorie LIMIT $min,$offset";
$result = mysql_query($q);

$nrows = mysql_num_rows($result);
$x=0;


if ($nrows>0) {
while($lista = mysql_fetch_array($result)) {

echo "$lista[[b]nazwa<br>";
// treść wywyołana z bazy

$x++;
}


} else {
// np. nic o nie znaleziono
}



$prev=$min-$offset;
if ($prev>=0) {
print "<a href="test6.php?min=$prev">";
print "< poprzednie</a> &nbsp;";
}

$next=$min+$offset;
if ($x>=2) {
print "<a href="test6.php?min=$max">";
print "następne ></a>";
}


?>


Najczęściej u mnie taki błąd Warning: Supplied argument is not a valid MySQL result resource in /costam on line .... występuje kiedy mylę nazwy tabel, nazwy pól tabel itp w zapytaniu mysql_query.


Pozdrawiam
Piotrek
rainer
Dziekuje Piotrze za wyrozumialesc
Wszystko sie zgadza kod dziala jesli ma nastale przypisane parametry wyszukiwania
ale jesli parametry pochodza z innego formularza
<form action="szukaj.php" method="POST">
to niestety parametry wyszukiwania nie sa zachowane

ma ktos jakis pomysl jak to zrobic
Piotrek
Może będę miał więcej czasu w weekend żeby Ci pomóc, ale już dziś możesz przegrzebać kawałki kodów które udostępniam na mojej stronie: http://www.krakcenbud.com.pl/modules.php?n...me=okienka_wysz. Masz tam też linki gdzie takie okienka już poprawnie działają.

Pozdrawiam
Piotrek
castor
jesli nie odbiera parametrow przeslanych w POST to zamiast
Kod
$zmienna
daj
Kod
$HTTP_POST_VARS['zmienna']
;
rainer
Witam
mam takie zapytanie do bazy:
$query = "SELECT * FROM bazabkt WHERE $select11 LIKE '$value%' ORDER BY firma LIMIT $min, $offset";

$select11 i $value pochodza z POST

ja te zmienne zapisac chyba nie tak
$query = "SELECT * FROM bazabkt WHERE $HTTP_POST_VARS['select11'] LIKE $HTTP_POST_VARS['value%'] ORDER BY firma LIMIT $min, $offset";

Prosze o pomoc bo juz calkiem sie zkrecilem
Pozdrawiam
Piotrek
A co nie działa? smile.gif Może pomoże jeśli przedtem zdeklarujesz nową zmienną $value i wtedy zamiast:
$query = "SELECT * FROM bazabkt WHERE $HTTP_POST_VARS['select11'] LIKE $HTTP_POST_VARS['value%'] ORDER BY firma LIMIT $min, $offset";
otrzymasz:
Kod
$value = $HTTP_POST_VARS['value'];

$query = "SELECT * FROM bazabkt WHERE $HTTP_POST_VARS['select11'] LIKE '$value%' ORDER BY firma LIMIT $min, $offset";


nie jestem pewien ale napewno będzie wyglądało ładniej
Piotrek
rainer
To nic niepomaga

$query = "SELECT * FROM bazabkt WHERE $HTTP_POST_VARS['select11'] LIKE '$value%' ORDER BY firma LIMIT $min, $offset";

=

Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING'

nic z tego chyba niebedzie
chyba zeby moze zakeszowac jakos te wartosci przekazane z POST
Piotrek
No zaraz... bo też tak bezmyślnie przepisałem - skupiając się na $value - przecież po WHERE musisz napisać nazwę pola tabeli a nie $HTTP_POST_VARS['select11'] ?!?!?!

Próbuj dalej!
Piotrek
rainer
Ale co ta kurde da?
jak drugie wywolanie przez print "<a href="$PHP_SELF?min=$max">";
niebedzie mialo danych z POST
bo niby jak? z nieba?
Piotrek
Nie zrażaj się coś wspólnie namotaliśmy - ale może należy rozpatrzyć to od nowa. W tym momencie pod adresem www.webwweb.pl/test6.php jest dokładnie taki kod:
Kod
<?



mysql_connect(serwer, uzytkownik, haslo);

mysql_select_db(baza_danych);





$min = $_GET['min'];  // to dodałem w najnowszej wersji



    $offset=5;

    if (!isset($min)) $min=0;

    if (!isset($max)) $max=$min+$offset;



    $q = "select * from tabela ORDER BY nazwa_pola LIMIT $min,$offset";

  $result = mysql_query($q);

    $nrows = mysql_num_rows($result);

    $x=0;

          

    if ($nrows > 0) {

    while($lista = mysql_fetch_array($result)) {

    

    echo "$lista[nazwa_pola]<br>";

    // treść wywyołana z bazy



    $x++;

    }  



    } else {

    // np. nic o nie znaleziono

    }

              

$prev = $min - $offset;

    if ($prev>=0) {

    print "<a href="test6.php?min=$prev">";

    print "< poprzednie</a> &nbsp;";

    }



$next = $min + $offset;

    if ($x>=4) {

    print "<a href="test6.php?min=$max">";

    print "następne ></a>";

    }



?>


i rozumiem że chcesz do tego zrobić wyszukiwarkę - ja też !
W dodatku zrobiłem register_globals = OFF więc żeby zadziałało trzeba będzie wykombinować jeszcze przeniesienie zawartości pola z formularza, który umieścimy w innym pliku.

Piotrek
rainer
Witam
ja mam identyczny kod jak ty
jest na www.ll.pl/baza

dorobilem formularz
i teraz tak gdy zadam zapytanie np. a w polu nazwa szukana
(polem w miescie prosze sie niesugerowac nie jest narazie przypisane)
to jest odp. i wszystko dziala
log z mysqla:
8 Query SELECT * FROM bazabkt WHERE firma LIKE 'a%' ORDER BY firma LIMIT 0,3
wszystkie parametry z formularza zostaly prawidlowo przekazane
do:
$q = "SELECT * FROM bazabkt WHERE $selekcja LIKE '$szukamy%' ORDER BY firma LIMIT $min,$offset";

teraz przechodze do linka "nastepne"
kod:
print "<a href="test.php?min=$max">";
print "nastpne ></a>";

i juz nieznajduje nic bo nie ma parametrow z formularza
dla $selekcja i $szukamy
log z mysql:
9 Query SELECT * FROM bazabkt WHERE LIKE '%' ORDER BY firma LIMIT 3,3

Wiec jakie pomysly?

Pozdrawiam
Robert
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.