Jako, że kończę pisać swoją stronę(została do zrobienia grafika) w wyszukiwarce chciałbym ograniczyć ilość wyświetlanych rekordów na jedną stronę.
Korzystam ze skryptu, który już mam napisany i działa przy innych plikach tutaj coś jest nie tak.
Ograniczył do wyświetlania 5 rekordów, ale pokazuje tylko pierwszą stronę. Rekordów w bazie jest 36 więc podzielić na 5=7 i trochę czyli 8 stron, a on pokazuje tylko 5 ostatnich. Nie bardzo wiem co jest źle.
Z góry dziękuje za pomoc.
Pozdrawiam
szukaj.php
<?php
include('functions/filtr.php');
include('include/db.php');
$subpage = $_GET['page'];
$perPage = 5;
if (!empty($_GET['subpage']))
{
if (is_numeric($_GET['subpage']))
{
$subpage = (int) $_GET['subpage'];
}
}
if ($subpage < 1)
{
$subpage = 1;
}
$start = ($subpage - 1) * $perPage;
$_POST['wynik'] = trim(filtr($_POST['wynik']));
if(empty($_POST['wynik']))
{
echo '<font color="red"><b>Formularz został wypełniony niepoprawnie!<br /> Nie można wyświetlić wyników wyszukiwania!</b></font>';
echo '<br /><br />';
}
else
{
$zapytanie = "SELECT `id`, `tresc`, `adres`, `numer` FROM home WHERE tresc LIKE '%{$_POST['wynik']}%'
UNION SELECT `id`, `tresc`, `adres`, `numer` FROM kontakt WHERE tresc LIKE '%{$_POST['wynik']}%'
UNION SELECT `id`, `tresc`, `adres`, `numer` FROM oferta WHERE tresc LIKE '%{$_POST['wynik']}%'
UNION SELECT `id`, `tresc`, `adres`, `numer` FROM o_mnie WHERE tresc LIKE '%{$_POST['wynik']}%'
UNION SELECT `id`, `tresc`, `adres`, `numer` FROM portfolio WHERE tresc LIKE '%{$_POST['wynik']}%'
UNION SELECT `id`, `nazwa`, `adres`, `numer` FROM portfolio WHERE nazwa LIKE '%{$_POST['wynik']}%'
UNION SELECT `id`, `technologia`, `adres`, `numer` FROM portfolio WHERE technologia LIKE '%{$_POST['wynik']}%'
UNION SELECT `id`, `adres_strony`, `adres`, `numer` FROM portfolio WHERE adres_strony LIKE '%{$_POST['wynik']}%'
UNION SELECT `id`, `tresc`, `adres`, `numer` FROM reklama WHERE tresc LIKE '%{$_POST['wynik']}%'
UNION SELECT `id`, `tresc`, `adres`, `numer` FROM skrypty WHERE tresc LIKE '%{$_POST['wynik']}%'
UNION SELECT `id`, `nazwa`, `adres`, `numer` FROM skrypty WHERE nazwa LIKE '%{$_POST['wynik']}%' ORDER BY `id` DESC LIMIT ".filtr($start).", ".filtr($perPage)."";
$idzapytania = mysql_query($zapytanie);
$oblicz = mysql_num_rows($idzapytania);
if (!isset($_GET['id']) or empty($_GET['id']))
{
echo'Znaleziono: '.$oblicz.'<br /><br />';
for($x=0;$x<$oblicz;$x++)
{
$wiersz = mysql_fetch_array($idzapytania);
echo $x+1;
echo '. ';
$wyraz = explode(' ',substr($wiersz['tresc'], 50));
$wyrazy = substr($wiersz['tresc'], 0, 50).$wyraz[0];
$wyraz = $wyrazy;
$array = array('[url]','[/url]','[b]','[/b]','[i]','[/i]','[u]','[/u]','[small]','[/small]',
'[big]','[/big]','[p]','[/p]','[center]','[/center]','[color=(http://)?(.*?)]','[/color]',
'[size=(http://)?(.*?)]','[/size]','[img]','[/img]','[hr=([0-9]{1,2}|100)]','[/hr]');
$wyrazek = str_replace($array,'',$wyraz);
echo '<a style="text-decoration: none;" href="'.$wiersz['adres'].'/'.$wiersz['numer'].'"><b>'.$wyrazek.'</b></a>';
echo'<br /><br />';
}
}
$prev = $subpage - 1;
$next = $subpage + 1;
$prevLink = '/szukaj/subpage/'.$prev.'';
$nextLink = '/szukaj/subpage/'.$next.'';
$ilosc_wierszy = mysql_num_rows($idzapytania);
echo '<div style="text-align:center;">';
if($subpage > 1)
echo'<a style="text-decoration: none;" href="'.$prevLink.'">Poprzednia strona</a> ';
$stron=round($ilosc_wierszy/$perPage);
for($i=1; $i<=$stron; ++$i)
{
if($i==$subpage)
echo '<b>'.$i.' </b>';
else
echo '<a style="text-decoration: none;" href="/szukaj/subpage/'.$i.'">'.$i.' </a>';
}
if($subpage < $stron)
echo ' <a style="text-decoration: none;" href="'.$nextLink.'">Następna strona</a>';
echo '</div>';
}
mysql_close($connect);
?>PS. Nie pokazuje nawet napisów Następna strona, Poprzednia strona, a wpisując w adres przeglądarki /szukaj/subpage/2 wyświetla komunikat:
Formularz został wypełniony niepoprawnie!
Nie można wyświetlić wyników wyszukiwania!
Jak na razie udało mi się pokazać Liczbę stron, napis poprzednia strona i napis następna strona, ponieważ usunąłem z zapytania
ORDER BY `id` DESC LIMIT ".filtr($start).", ".filtr($perPage)."
Teraz pytanie. Jak ustalić limit w zapytaniu z UNION?
Ok zmieniłem.
Z zapytania zupełnie usunąłem
ORDER BY `id` DESC LIMIT ".filtr($start).", ".filtr($perPage)."
I zmieniłem
for($x=0;$x<$oblicz;$x++)na
for($x=0;$x<5;$x++)
EDIT:
Przypuśćmy, że znajdzie mi 4 rekordy. To co wtedy?
1. pierwszy rekord
2. drugi rekord
3. trzeci rekord
4. czwarty rekord
5.
A poza tym nie działa stronicowanie tj. Wyszukując np. frazę technologia znajduje 36 rekordów. Dzieli je po 5 na stronę, ale chcąc przejść do następnej podstrony tj. szukaj/subpage/2 wyświetla komunikat
Formularz został wypełniony niepoprawnie!
Nie można wyświetlić wyników wyszukiwania!
Nie bardzo wiem jak temu zaradzić.
Użytkownik nansss dnia 07 luty 2010 - 18:24 napisał
1. pierwszy rekord
2. drugi rekord
3. trzeci rekord
4. czwarty rekord
5.
To tak: ten problem rozwiązany jeszcze tylko to: chcąc przejść do następnej podstrony tj. szukaj/subpage/2 wyświetla komunikat
Formularz został wypełniony niepoprawnie!
Nie można wyświetlić wyników wyszukiwania!
Ok już sobie poradziłem. Teraz tylko mam pytanie jak zrobić z formularzem
<form action="/szukaj" method="get"> <input type="text" name="wynik" value="Szukaj w serwisie..." onclick="this.value=' '" /> <input class="przycisk_szukaj" type="submit" value="Szukaj" /> </form>
.htaccess
Options -Indexes
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^portfolio/subpage/([a-z0-9_-]+) index.php?page=portfolio&subpage=$1
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^portfolio/([a-z0-9_-]+) index.php?page=portfolio&id=$1
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^skrypty/subpage/([a-z0-9_-]+) index.php?page=skrypty&subpage=$1
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^skrypty/([a-z0-9_-]+) index.php?page=skrypty&id=$1
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^reklama/subpage/([a-z0-9_-]+) index.php?page=reklama&subpage=$1
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^reklama/([a-z0-9_-]+) index.php?page=reklama&id=$1
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^cpadmin_edytuj_w_portfolio/edit/([a-z0-9_-]+) index.php?page=cpadmin_edytuj_w_portfolio&edytuj=$1
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^cpadmin_edytuj_skrypt/edit/([a-z0-9_-]+) index.php?page=cpadmin_edytuj_skrypt&edytuj=$1
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^cpadmin_edytuj_reklame/edit/([a-z0-9_-]+) index.php?page=cpadmin_edytuj_reklame&edytuj=$1
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^cpadmin_home/edit/([a-z0-9_-]+) index.php?page=cpadmin_home&edit=$1
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^cpadmin_oferta/edit/([a-z0-9_-]+) index.php?page=cpadmin_oferta&edit=$1
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^cpadmin_o_mnie/edit/([a-z0-9_-]+) index.php?page=cpadmin_o_mnie&edit=$1
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^cpadmin_kontakt/edit/([a-z0-9_-]+) index.php?page=cpadmin_kontakt&edit=$1
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^szukaj/wynik/([a-z0-9_-]+)/subpage/([a-z0-9_-]+) index.php?page=szukaj&wynik=$1&subpage=$2
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^szukaj/wynik/([a-z0-9_-]+) index.php?page=szukaj&wynik=$1
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z0-9_-]+) index.php?page=$1 [L]
szukaj.php
<?php
include('functions/filtr.php');
include('include/db.php');
$subpage = $_GET['page'];
$perPage = 5;
if (!empty($_GET['subpage']))
{
if (is_numeric($_GET['subpage']))
{
$subpage = (int) $_GET['subpage'];
}
}
if ($subpage < 1)
{
$subpage = 1;
}
$start = ($subpage - 1) * $perPage;
$wynik_filtru = trim($_GET['wynik']);
if(empty($wynik_filtru))
{
echo '<font color="red"><b>Formularz został wypełniony niepoprawnie!<br /> Nie można wyświetlić wyników wyszukiwania!</b></font>';
echo '<br /><br />';
}
else
{
$zapytanie = "SELECT `id`, `tresc`, `adres`, `numer` FROM home WHERE tresc LIKE '%{$wynik_filtru}%'
UNION SELECT `id`, `tresc`, `adres`, `numer` FROM kontakt WHERE tresc LIKE '%{$wynik_filtru}%'
UNION SELECT `id`, `tresc`, `adres`, `numer` FROM oferta WHERE tresc LIKE '%{$wynik_filtru}%'
UNION SELECT `id`, `tresc`, `adres`, `numer` FROM o_mnie WHERE tresc LIKE '%{$wynik_filtru}%'
UNION SELECT `id`, `tresc`, `adres`, `numer` FROM portfolio WHERE tresc LIKE '%{$wynik_filtru}%'
UNION SELECT `id`, `nazwa`, `adres`, `numer` FROM portfolio WHERE nazwa LIKE '%{$wynik_filtru}%'
UNION SELECT `id`, `technologia`, `adres`, `numer` FROM portfolio WHERE technologia LIKE '%{$wynik_filtru}%'
UNION SELECT `id`, `adres_strony`, `adres`, `numer` FROM portfolio WHERE adres_strony LIKE '%{$wynik_filtru}%'
UNION SELECT `id`, `tresc`, `adres`, `numer` FROM reklama WHERE tresc LIKE '%{$wynik_filtru}%'
UNION SELECT `id`, `tresc`, `adres`, `numer` FROM skrypty WHERE tresc LIKE '%{$wynik_filtru}%'
UNION SELECT `id`, `nazwa`, `adres`, `numer` FROM skrypty WHERE nazwa LIKE '%{$wynik_filtru}%'";
$idzapytania = mysql_query($zapytanie) or die (mysql_error());
$oblicz = mysql_num_rows($idzapytania);
if (!isset($_GET['id']) or empty($_GET['id']))
{
echo'Znaleziono: '.$oblicz.'<br /><br />';
for($x=0;$x<5;$x++)
{
$wiersz = mysql_fetch_array($idzapytania);
if($wiersz['tresc'] != '')
{
echo $x+1;
echo '. ';
$wyraz = explode(' ',substr($wiersz['tresc'], 50));
$wyrazy = substr($wiersz['tresc'], 0, 50).$wyraz[0];
$wyraz = $wyrazy;
$array = array('[url]','[/url]','[b]','[/b]','[i]','[/i]','[u]','[/u]','[small]','[/small]',
'[big]','[/big]','[p]','[/p]','[center]','[/center]','[color=(http://)?(.*?)]','[/color]',
'[size=(http://)?(.*?)]','[/size]','[img]','[/img]','[hr=([0-9]{1,2}|100)]','[/hr]');
$wyrazek = str_replace($array,'',$wyraz);
echo '<a style="text-decoration: none;" href="'.$wiersz['adres'].'/'.$wiersz['numer'].'"><b>'.$wyrazek.'</b></a>';
echo'<br /><br />';
}
}
}
$prev = $subpage - 1;
$next = $subpage + 1;
$prevLink = '/szukaj/wynik/'.$wynik_filtru.'/subpage/'.$prev.'';
$nextLink = '/szukaj/wynik/'.$wynik_filtru.'/subpage/'.$next.'';
$ilosc_wierszy = mysql_num_rows($idzapytania);
echo '<div style="text-align:center;">';
if($subpage > 1)
echo'<a style="text-decoration: none;" href="'.$prevLink.'">Poprzednia strona</a> ';
$stron=round($ilosc_wierszy/$perPage);
for($i=1; $i<=$stron; ++$i)
{
if($i==$subpage)
echo '<b>'.$i.' </b>';
else
echo '<a style="text-decoration: none;" href="/szukaj/wynik/'.$wynik_filtru.'/subpage/'.$i.'">'.$i.' </a>';
}
if($subpage < $stron)
echo ' <a style="text-decoration: none;" href="'.$nextLink.'">Następna strona</a>';
echo '</div>';
}
mysql_close($connect);
?>Formularz próbuje wyszukać tak:
szukaj/wynik?=+tutaj
a chciałbym
szukaj/wynik/tutaj

Logowanie
Rejestracja
Pomoc
Dodaj odpowiedź

Cytuj
