Poslao: 03 Feb 2011 00:17
|
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.
|
|
Poslao: 03 Feb 2011 01:24
|
offline
- eevan79

- Građanin
- 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;
|
|
|
|
Poslao: 03 Feb 2011 18:16
|
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......
|
|
|
|
Poslao: 03 Feb 2011 23:52
|
offline
- eevan79

- Građanin
- 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."%' "
|
|
|
|
Poslao: 04 Feb 2011 00:09
|
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....
|
|
|
|
|
Poslao: 04 Feb 2011 00:19
|
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....
|
|
|
|
Poslao: 04 Feb 2011 00:35
|
offline
- eevan79

- Građanin
- 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))
{
|
|
|
|
Poslao: 04 Feb 2011 01:19
|
offline
- Pridružio: 26 Feb 2010
- Poruke: 109
|
Hvala puno, snasao sam se nekako, sad super radi... Hvala puno, imas pivo...
|
|
|
|
Poslao: 04 Feb 2011 08:52
|
offline
- |_MeD_|

- Zaslužni građanin
- 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]
|
|
|
|