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.
[Link mogu videti samo ulogovani korisnici]

Ko je trenutno na forumu
 

Ukupno su 1015 korisnika na forumu :: 76 registrovanih, 10 sakrivenih i 929 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: Andrija357, ArchaBasha, Asteker, babaroga, bojank, bokisha253, Borski1977, Brankojle, Brok, Chainsaw, cojapop, debeli, Dimitrise93, Dioniss, Dzoni Stek, esx66, Folkstar, Frunze, Gall, grenadir, interesujeme, jackreacher011011, Jakonjveliki, Jose, Još malo pa deda, Kriglord, Kubovac, Kurgan, LastTsar, lucko1, Marko Marković, markoni.slo, marsovac 2, mean_machine, mercedesamg, Mercury, Miki281, MIKI63, mikrimaus, Milos ZA, Misha2101, mitja2512, mkukoleca, moldway, nekdo, nnnnnnnnnn, opt1, Pavle29L, pein, Pele23, perunnurep, pisac12, Prometeus, rajkoplje, raptorsi, Rebel Frank, rodoljub, Rothmans, royst33, sabac015555m, samipag822, Shadow soldier, Sky diver 29, Stanislav1970, stokssone, synergia, TalicniTom, Toper, Valter071, vidra1, Vlada78, x9, YugoSlav, Zavulon, zokizemun, zziko