Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: liczenie stron
Forum PHP.pl > Forum > PHP
tom23
Mam zrobiona wyszukiwarke na Mysql i jak wpisze dane słowo to mi zwraca liste znalezionych rekordów ( prawidlowo ) smile.gif
Ale jak tych rekordow jest 5 czy 9 to Ok, ale gdy jest 200 czy 150 to lista robi sie strasznie dluga.
I chce zeby na strone byla lista 20 rekordow a reszta z donosnikami na dole strony Np.
1 2 3 Nastepny .
Tylko jest jeden problem nie wiem jak to zrobic.
Prosze o pomoc.

moj kodzik wyglada tak

<?php
mysql_connect ("moj serwer","user","*******");
mysql_select_db (mojabaza);
if($stan=='szukaj') {
$zapytanie = "SELECT * FROM towary where symbol like "%$znajdz%" or nazwa like "%$znajdz%"
ORDER BY nazwa";
$wykonaj = mysql_query ($zapytanie);
$znaleziono = mysql_num_rows($wykonaj);
if ($znaleziono == "0")
{
print " ";
}
else
{
print "<DIV> Znaleziono trafień $znaleziono.<br></div>";
}


while($wiersz=mysql_fetch_array ($wykonaj)) {
echo " <tr>
<td width="30%"><DIV>".$wiersz['symbol']."</DIV></td>
<td width="70%"><div>".$wiersz['nazwa']."</div></td>
</tr>";
}
}
{
echo "</table>";
if ($znaleziono == "0")
{
print "<CENTER> Nie znaleziono żadnego rekordu</CENTER>";
}

echo "<TABLE border=0 align=center ><tr>

<td><center><br>
<form method="get" action="index.php">
<input type="text" name="znajdz" size="20" VALUE="czego szukasz" ><BR>
<input type="submit" value="szukaj" name="stan"></form></center></TD>";
echo "</TR></TABLE>";
}
?>


Czy ktos mi pomoze ?

Tomek
domm
W Twoim zapytaniu SQL:
Kod
SELECT * FROM towary where symbol like "%$znajdz%" or nazwa like "%$znajdz%"

ORDER BY nazwa

brakuje polecenia LIMIT X,Y (na końcu) które zawęzi liczbę znalezionych rekordów. X to numer rekordu od którego mają zostać prezentowane wyniki, a Y to ich ilość. Żeby to miało ręce i nogi, potrzebujesz jeszcze "pre-zapytania" np:
Kod
SELECT COUNT(*) FROM....
(bez limitu oczywiście), które pozwoli określić sumaryczną liczbę wyników. Znając liczbę wyników dzielisz sobie je na strony w zależności od tego ile chcesz wyświetlać (zmienna Y), a poźniej np. get-em do każdego dynamicznie wyświetlonego linku dodajesz zmienną X. Sorki że tak opisowo, ale chyba będzie lepiej jak sam napiszesz taki prosty skrypt :wink:
Seth
Kod
Function page_index( $show ){

  global $_GET;

    

  $result = mysql_query( "SELECT * FROM jakas_tabela" );

  $number = mysql_num_rows( $result );



  $page_num = ceil( $number/$this->show );

  $page = ceil( $_GET['offset'] / $show ) + 1;  

  

  $index = "<b>".$page."</b>";



  for( $i = 1; $i <= $page_num; $i++ ){

    if( $page != $i ){

      $j = ($i- 1) * $show;

      $tmp .= "<a href="?offset=$j">$i</a> ";

    }

  }

  

  if( $page_num != 1 ) $index .= " [ $tmp ]";



  return $index;

}


$show - liczba wyswietlanych rekordow
Dzialanie funkcji mozna zobaczyc na www.rally.vel.pl smile.gif
tom23
To caly kod bedzie wygladał tak, prosze o sprawdzenie, a jak bedzie cos zle prosze o dalsze wskazowki. Za wszystkie listy z pomoca bardzo dziekuje.

Oto kod:

<?php
mysql_connect ("moj serwer","user","*******");
mysql_select_db (mojabaza);
if($stan=='szukaj') {
$zapytanie = "SELECT COUNT(*) FROM towary where symbol like "%$znajdz%" or nazwa like "%$znajdz%"
ORDER BY nazwa ";
$wykonaj = mysql_query ($zapytanie);
$znaleziono = mysql_num_rows($wykonaj);
if ($znaleziono == "0")
{
print " ";
}
else
{
print "<DIV> Znaleziono trafień $znaleziono.<br></div>";
}


while($wiersz=mysql_fetch_array ($wykonaj)) {
echo " <tr>
<td width="30%"><DIV>".$wiersz['symbol']."</DIV></td>
<td width="70%"><div>".$wiersz['nazwa']."</div></td>
</tr>";
}
}
{
echo "</table>";
if ($znaleziono == "0")
{
print "<CENTER> Nie znaleziono żadnego rekordu</CENTER>";
}

echo "<TABLE border=0 align=center ><tr>

<td><center><br>
<form method="get" action="index.php">
<input type="text" name="znajdz" size="20" VALUE="czego szukasz" ><BR>
<input type="submit" value="szukaj" name="stan"></form></center></TD>";
echo "</TR></TABLE>";
}

Function page_index( $show ){
global $_GET;

$result = mysql_query( "SELECT * FROM towary" );
$number = mysql_num_rows( $result );

$page_num = ceil( $number/$this->show );
$page = ceil( $_GET['offset'] / $show ) + 1;

$index = "<b>".$page."</b>";

for( $i = 1; $i <= $page_num; $i++ ){
if( $page != $i ){
$j = ($i- 1) * $show;
$tmp .= "<a href="?offset=$j">$i</a> ";
}
}

if( $page_num != 1 ) $index .= " [ $tmp ]";

return $index;
}



?>



Jak znam zycie to pewnie cos zwaliłem !!!!
Seth
Kod
<?php

mysql_connect ("moj serwer","user","*******");

mysql_select_db (mojabaza);



if($stan=='szukaj') {

  $zapytanie = "SELECT COUNT(*) FROM towary where symbol like "%$znajdz%" or nazwa like "%$znajdz%" ORDER BY nazwa  ";

  $wykonaj = mysql_query ($zapytanie);

  $znaleziono = mysql_num_rows($wykonaj);

  

  if ($znaleziono == "0"){

    print " ";

  }else{

    print "<DIV> Znaleziono trafień $znaleziono.<br></div>";

  }



  while($wiersz=mysql_fetch_array ($wykonaj)) {

    echo " <tr>

    <td width="30%"><DIV>".$wiersz['symbol']."</DIV></td>

    <td width="70%"><div>".$wiersz['nazwa']."</div></td>

    </tr>";

  }



  echo "<tr><td colspan=2 align=right>".page_index( 5 )."</td></tr>";

}



echo "</table>";



if ($znaleziono == "0"){

  print "<CENTER> Nie znaleziono żadnego rekordu</CENTER>";

}



echo "<TABLE border=0 align=center ><tr>

  <td><center><br>

  <form method="get" action="index.php">

  <input type="text" name="znajdz" size="20" VALUE="czego szukasz" ><BR>

  <input type="submit" value="szukaj" name="stan"></form></center></TD>";

  echo "</TR></TABLE>";





Function page_index( $show ){

  global $_GET;

  global $znajdz;

    

  $result = mysql_query( "SELECT * FROM towary where symbol like "%$znajdz%" or nazwa like "%$znajdz%" ORDER BY nazwa" );

  $number = mysql_num_rows( $result );



  $page_num = ceil( $number/$this->show );

  $page = ceil( $_GET['offset'] / $show ) + 1;  

  

  $index = "<b>".$page."</b>";



  for( $i = 1; $i <= $page_num; $i++ ){

    if( $page != $i ){

      $j = ($i- 1) * $show;

      $tmp .= "<a href="?offset=$j">$i</a> ";

    }

  }

  

  if( $page_num != 1 ) $index .= " [ $tmp ]";



  return $index;

}

?>


Tak powinno byc dobrze. Nie testowalem tego u siebie, wiec jak by byly jakies bledy to pisz.
tom23
Wielkie dzieki za pomoc !!!. Ale skrypcik sie wywala sad.gif
Wyswietla bląd

Kod
Warning: Division by zero in /var/www/html/motozbyt/test/inny/index.php on line 157



a linia 157 w moim skrypcie jest nastepujaca.

Kod
$page = ceil( $_GET['offset'] / $show ) + 1;


Wielki dzieki za pomoc , czy mozna zrobic cos z tym problemem.
Pozdrawiam
Tomek
Seth
Sorry rabnalem sie w kodzie podczas przpisywania z mojego zrodla smile.gif

Blad jest w lini 156
Kod
$page_num = ceil( $number/$this->show );


Moja funkcja jest w classie i zapomnialem zmienic zmienna $this->show na $show tongue.gif

Powinno byc tak
Kod
$page_num = ceil( $number/$show );
tom23
Juz jest lepiej ale jeszcze wyrzuca błędy.
Nie listuje rekordow.

Kod
Warning: Division by zero in /var/www/html/motozbyt/test/inny/index.php on line 157







[ 1 2 3 4 5 6 ]


tylko wyswietla na dole cyferki z kolejnymi linkami do nastepnych stron.

Pozdrawiam
tom23
i jeszcze zle pokazuje ilosc trafien bo zawsze jest 1 a w rzeczywistosci znacznie wiecej.

Pozdrawiam
Seth
Jak bede mial troche wiecej czasu potestuje to u siebie i podesle Ci kod.
Seth
Kod
<?php

mysql_connect ("host","login","pass"); // zmien na odpowiednie

mysql_select_db ("baza");  // dane twojego serwera



echo "<table>";



if($stan=='szukaj') {

  $zapytanie = "SELECT * FROM towary where symbol like "%$znajdz%" or nazwa like "%$znajdz%" ORDER BY nazwa";

  $wykonaj = mysql_query ($zapytanie);

  $znaleziono = mysql_num_rows($wykonaj);

  

  if ($znaleziono == "0"){

    print " ";

  }else{

    print "<DIV> Znaleziono trafień $znaleziono.<br></div>";

  }



  while($wiersz=mysql_fetch_array ($wykonaj)) {

    echo " <tr>

    <td width="30%"><DIV>".$wiersz['symbol']."</DIV></td>

    <td width="70%"><div>".$wiersz['nazwa']."</div></td>

    </tr>";

  }



  echo "<tr><td colspan=2 align=right>Strona ".page_index( 3 )."</td></tr>"; // page_index( x ) gdzie x to liczba wyswietlanych rekordow na stronie

}



echo "</table>";



if ($znaleziono == "0"){

  print "<CENTER> Nie znaleziono żadnego rekordu</CENTER>";

}



echo "<TABLE border=0 align=center ><tr>

  <td><center><br>

  <form method="get" action="test.php">

  <input type="text" name="znajdz" size="20" VALUE="czego szukasz" ><BR>

  <input type="submit" value="szukaj" name="stan"></form></center></TD>";

  echo "</TR></TABLE>";





Function page_index( $show ){

  global $_GET;

  global $znajdz;

    

  $result = mysql_query( "SELECT * FROM towary where symbol like "%$znajdz%" or nazwa like "%$znajdz%"" );

  $number = mysql_num_rows( $result );



  $page_num = ceil( $number/$show );

  $page = ceil( $_GET['offset'] / $show ) + 1;  

  

  $index = "<b>".$page."</b>";



  for( $i = 1; $i <= $page_num; $i++ ){

    if( $page != $i ){

      $j = ($i- 1) * $show;

      $tmp .= "<a href="?offset=$j">$i</a> ";

    }

  }

  

  if( $page_num != 1 ) $index .= " [ $tmp ]";



  return $index;

}

?>


Ten kod przetestowalem u siebie i dziala. Oczywiscie login, haslo itp. musisz zmienic na odpowiednie twojego serwera.
tom23
Wielkie dzieki za pomoc ale niestet nie wszystko jest ok.
Sorki ze jestem taki marudny. Jeszcze raz sorki.

Skrypt dziła tylko ma jeszcze jedna wade.

Po wpisaniu do wyszukiwarki np. ab


to skrypt mi wyrzuca od razu wszystkie znalezione rekordy . A na dole strony znajduja sie cyferki z kolejnymi stronami (dobrze liczy - tak mialo byc),
lecz jak sie kliknie na cyferke np"3" zeby przejsc do strony 3 to on wraca do strony pierwszej bez znalezionego zadnego rekordu.

Strone testuje pod tym adresem

http://www.motozbyt.biz.pl/test/inny/index.php

Bardzo dziekuje za pomoc.
Tomek
Seth
Kod
<?php

mysql_connect ("localhost","login","pass"); // wartosci do zmiany

mysql_select_db ("bartek"); // wartosc do zmiany



$show = 1; // ilosc pokazywanych rekordow

$plik= "test.php"; // nazwa pliku w ktorym jest ten skrypt

echo "<table>";



if($stan=='szukaj') {

  if( isset($_GET['offset']) ){

    $add = "LIMIT ".$_GET['offset'].", $show";

  }else{

    $add = "LIMIT 1, 1";

  }

  $zapytanie = "SELECT * FROM towary where symbol like "%$znajdz%" or nazwa like "%$znajdz%" ORDER BY nazwa ".$add;

  $wykonaj = mysql_query ($zapytanie);

  $znaleziono = mysql_num_rows($wykonaj);

  

  if ($znaleziono == "0"){

    print " ";

  }else{

    print "<DIV> Znaleziono trafień $znaleziono.<br></div>";

  }



  while($wiersz=mysql_fetch_array ($wykonaj)) {

    echo " <tr>

    <td width="30%"><DIV>".$wiersz['symbol']."</DIV></td>

    <td width="70%"><div>".$wiersz['nazwa']."</div></td>

    </tr>";

  }



  echo "<tr><td colspan=2 align=right>Strona ".page_index( $show )."</td></tr>";

}



echo "</table>";



if ($znaleziono == "0"){

  print "<CENTER> Nie znaleziono żadnego rekordu</CENTER>";

}



echo "<TABLE border=0 align=center ><tr>

  <td><center><br>

  <form method="get" action="$plik">

  <input type="text" name="znajdz" size="20" VALUE="czego szukasz" ><BR>

  <input type="submit" value="szukaj" name="stan"></form></center></TD>";

  echo "</TR></TABLE>";





Function page_index( $show ){

  global $_GET;

  global $znajdz;

    

  $result = mysql_query( "SELECT * FROM towary where symbol like "%$znajdz%" or nazwa like "%$znajdz%"" );

  $number = mysql_num_rows( $result );



  $page_num = ceil( $number/$show );

  $page = ceil( $_GET['offset'] / $show ) + 1;  

  

  $index = "<b>".$page."</b>";



  for( $i = 1; $i <= $page_num; $i++ ){

    if( $page != $i ){

      $j = ($i- 1) * $show;

      $tmp .= "<a href="?offset=$j&znajdz=".$_GET['znajdz']."&stan=szukaj">$i</a> ";

    }

  }

  

  if( $page_num != 1 ) $index .= " [ $tmp ]";



  return $index;

}

?>

Juz powinno byc wszystko OK. Mam nadzieje winksmiley.jpg
tom23
Wielkie dzieki .
laugh.gif Gra i buczy. laugh.gif
Pozdrawiam :wink:
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.