Pretraga

1

Pretraga

offline
  • Pridružio: 26 Feb 2010
  • Poruke: 109

Napravio sam kod za pretragu teksta iz baze, i to sve radi ok. Ali imam problem koji nzm kako da resim. Nasao sam paginaciju koja radi ali problem je kada ja pozovem stranicu paginacija.php ona izbroji svaki red u bazi i prikaze strane (1,2,3...), a pretraga normalno odradi svoj posao, e sad potrebno mi je da se paginacija vlada po pretrazi. Kod za paginaciju sam nasao na linku, od korisnika "eevan79"... Nadam se da neko zna resenje...

mycity.rs/PHP/PHP-paginacija.html

<form action="rezultati.php" method="get"> <input type="text" name="search"><br> <input type="submit" value="Search"> </form> <?php if($_GET['search']=="") { ?> <?php $sqlsites = mysql_query("SELECT * FROM `oglas` ORDER BY `oglas`.`oglas_id`"); while ($rro=mysql_fetch_array($sqlsites)) { ?> <table class="foot">   <tr>     <td colspan="3" align="center"><strong>Naslov: </strong><?php echo $rro['oglas_naslov']; ?></td>     </tr>   <tr>     <td colspan="3"><?php echo substr ($rro["oglas_tekst"], 0, 250);?>...<a href="ID-<?php echo$rro["oglas_id"];?>.php">Detaljnije --></a></td>     </tr>   <tr>     <td width="150"><strong>Datum: </strong><?php echo $rro['oglas_datum']; ?></td>     <td width="220"><strong>Telefon: </strong><?php echo $rro['oglas_telefon']; ?></td>    <td ><strong>Slike: </strong>da</td>   </tr> </table> <?php }} $searchentry = htmlentities($_GET['search']); $search = mysql_query("SELECT * FROM oglas WHERE oglas_tekst LIKE '%".$searchentry."%' ORDER BY `oglas_id` DESC LIMIT 25"); if($_GET['search']) {    while($r = mysql_fetch_array($search)) { ?> <table class="foot">   <tr>     <td colspan="3" align="center"><strong>Naslov: </strong><?php echo $r['oglas_naslov']; ?></td>     </tr>   <tr>     <td colspan="3"><?php echo substr ($r["oglas_tekst"], 0, 250);?>...<a href="ID-<?php echo$r["oglas_id"];?>.php">Detaljnije --></a></td>     </tr>   <tr>     <td width="150"><strong>Datum: </strong><?php echo $r['oglas_datum']; ?></td>     <td width="220"><strong>Telefon: </strong><?php echo $r['oglas_telefon']; ?></td>    <td ><strong>Slike: </strong>da</td>   </tr> </table> <?php } } ?>



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 21 Apr 2007
  • Poruke: 98

Pošto ideš preko GET metode dodaj to i u paginaciji (na samom početku):

if (isset($_GET['search'])) $pref = "&search=".$_GET['search']; else $pref="";
I svuda gde se generiše paginacija
?page=1
?page=$prevpage
?page=$x
dodaj ".$pref."
Tako da ispadne
/?page=1&search=RECI_PRETRAGE
/?page=2&search=RECI_PRETRAGE

Na ovaj način će paginacija "pamtiti" reči pretrage. Naravno postoje i druge metoda, ali ova mi trenutno pala na pamet.

I upit vrši preko paginacije (ukupan broj pronadjenih rezultata):
$sql= 'SELECT COUNT(*) FROM oglas WHERE oglas_tekst LIKE '%".$searchentry."%''; $result = mysql_query($sql); $r = mysql_fetch_row($result); $numrows = $r[0]; $result_per_page = 20;  // 20 rezultata po strani $max_links = 5; //Broj linkova pre i posle trenutne stranice

Pozovi paginaciju.

I glavni upit:
SELECT * FROM oglas WHERE oglas_tekst LIKE '%".$searchentry."%' ORDER BY `oglas_id` DESC LIMIT $offset, $rowsperpage;



offline
  • Pridružio: 26 Feb 2010
  • Poruke: 109

Napisano: 03 Feb 2011 1:49

Uradio sam kako si mi rekao..Ali ovde se pojavio problem.. To je stranica rezultati.php od 23 reda...
<?php   // ***23 red*** $sql= 'SELECT COUNT(*) FROM oglas WHERE oglas_tekst LIKE '%".$searchentry."%''; $result = mysql_query($sql); $r = mysql_fetch_row($result); $numrows = $r[0]; $result_per_page = 5;  // 20 rezultata po strani $max_links = 5; //Broj linkova pre i posle trenutne stranice ?>

Warning: Division by zero in C:\xampp\htdocs\rezultati.php on line 25 Warning: Division by zero in C:\xampp\htdocs\rezultati.php on line 25 Warning: mysql_fetch_row() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\rezultati.php on line 27

Dopuna: 03 Feb 2011 18:16

Resio sam ovaj problem, bile su neke sintakticke greske... Ali, pojavio se novi problem... Kada pretrazim bazu, normalno mi izbaci samo ono sto sam trazio, to je i radilo, ali paginacija broji celu bazu, ne izbroji onaj broj koliko je pretrazivac pronasao u bazi... Npr, slovo "J" se u bazi nalazi na 2 mesta, i normalno ih prikazem na prvoj strani, ali paginacija pokazuje 3-4 stranice, a to je ukupan broj u bazi......

offline
  • Pridružio: 21 Apr 2007
  • Poruke: 98

Onda ti nije dobar upit.

Ako pretražuješ po slovima (početno slovo) upit treba biti:

" SELECT COUNT(*) FROM oglas WHERE oglas_tekst LIKE '".$searchentry."%' "

offline
  • Pridružio: 26 Feb 2010
  • Poruke: 109

Taj upit i koristim... Ali nece da radi nesto, kada se pretrazi baza paginacija jednostavno ne radi... Paginacija pokazuje broj strana iz cele baze, a trebala bi da prikaze samo onoliko koliko ima u bazi za zadatu pretragu....

offline
  • Pridružio: 21 Apr 2007
  • Poruke: 98

Daj ceo kod (forma + upiti).

offline
  • Pridružio: 26 Feb 2010
  • Poruke: 109

<form action="rezultati.php" method="get"> <input type="text" name="search"><br> <input type="submit" value="Search"> </form>

<?php include ("db.php"); $sql= 'SELECT COUNT(*) FROM oglas WHERE oglas_tekst LIKE "%'.$searchentry.'%"'; $result = mysql_query($sql); $r = mysql_fetch_row($result); $numrows = $r[0]; $result_per_page = 5;  // 20 rezultata po strani $max_links = 5; //Broj linkova pre i posle trenutne stranice ?> <?php include("paginacija.php"); ?> <?php if($_GET['oglas_tekst']=="") { ?> <?php $sqlsites = mysql_query("SELECT * FROM oglas WHERE oglas_tekst LIKE '%".$searchentry."%' ORDER BY `oglas_id` DESC LIMIT $offset, $rowsperpage"); while ($rro=mysql_fetch_array($sqlsites)) { ?> <table class="foot">   <tr>     <td colspan="3" align="center"><strong>Naslov: </strong><?php echo $rro['oglas_naslov']; ?></td>     </tr>   <tr>     <td colspan="3"><?php echo substr ($rro["oglas_tekst"], 0, 250);?>...<a href="ID-<?php echo$rro["oglas_id"];?>.php">Detaljnije --></a></td>     </tr>   <tr>     <td width="150"><strong>Datum: </strong><?php echo $rro['oglas_datum']; ?></td>     <td width="220"><strong>Telefon: </strong><?php echo $rro['oglas_telefon']; ?></td>    <td ><strong>Slike: </strong>da</td>   </tr> </table> <?php }} $searchentry = htmlentities($_GET['oglas_tekst']); $search = mysql_query("SELECT * FROM oglas WHERE oglas_tekst LIKE '%".$searchentry."%' ORDER BY `oglas_id` DESC LIMIT 25"); if($_GET['oglas_tekst']) {    while($r = mysql_fetch_array($search)) { ?> <table class="foot">   <tr>     <td colspan="3" align="center"><strong>Naslov: </strong><?php echo $r['oglas_naslov']; ?></td>     </tr>   <tr>     <td colspan="3"><?php echo substr ($r["oglas_tekst"], 0, 250);?>...<a href="ID-<?php echo$r["oglas_id"];?>.php">Detaljnije --></a></td>     </tr>   <tr>     <td width="150"><strong>Datum: </strong><?php echo $r['oglas_datum']; ?></td>     <td width="220"><strong>Telefon: </strong><?php echo $r['oglas_telefon']; ?></td>    <td ><strong>Slike: </strong>da</td>   </tr> </table> <?php } } include("paginacija.php"); ?>


U paginaciji sam dodao ono sto si mi rekao, i promenio....

offline
  • Pridružio: 21 Apr 2007
  • Poruke: 98

Napisano: 04 Feb 2011 0:25

$search = mysql_query("SELECT * FROM oglas WHERE oglas_tekst LIKE '%".$searchentry."%' ORDER BY `oglas_id` DESC LIMIT $offset, $rowsperpage");
Umesto

$search = mysql_query("SELECT * FROM oglas WHERE oglas_tekst LIKE '%".$searchentry."%' ORDER BY `oglas_id` DESC LIMIT 25");

I koristi svuda
LOWER(oglas_test) LIKE LOWER('%".$searchentry."%')

Dopuna: 04 Feb 2011 0:35

I ne koristi:
if($_GET['oglas_tekst'])
već
if(isset($_GET['oglas_tekst']))

Ne znam zašto koristiš 2 tabele i 2 upita. Probaj ovako nešto:
if(isset($_GET['oglas_tekst']) AND $_GET['oglas_tekst']==""){ //UPIT 1 } else { //UPIT 2 }
I onda loop sa tabelom:
while ($rro=mysql_fetch_array($sqlsites)) {

offline
  • Pridružio: 26 Feb 2010
  • Poruke: 109

Hvala puno, snasao sam se nekako, sad super radi... Hvala puno, imas pivo... Wink

offline
  • PHP Developer
  • Pridružio: 02 Okt 2005
  • Poruke: 546

I obavezno procitaj ovo posto tvoj kod koliko vidim nema zastitu od SQL Injection. Ima puno tekstova na tu temu, ovaj sam prvi nasao.
http://www.tizag.com/mysqlTutorial/mysql-php-sql-injection.php

Ko je trenutno na forumu
 

Ukupno su 845 korisnika na forumu :: 14 registrovanih, 2 sakrivenih i 829 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 357magnum, A.R.Chafee.Jr., Dorcolac, Draganeli, drimer, kolle.the.kid, Koridor, Lazarus, ozzy, strelac07, suton, vladaa012, yrraf, 125