Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: stronicowanie - dziala nie do konca
Forum PHP.pl > Forum > Gotowe rozwiązania
czezz
znalazlem kod do stronicowania wynikow zapytania sql. Lekko go przerobilem dla swoich potrzeb i dziala pieknie do mementu do puki nie uzyje zmiennej w zapytaniu SQL. Jesli w zapytaniu wstawie zmienna to wyswietlona zostanie tylko pierwsza strona, a pozostale beda puste.

Tu jest fragment takiego feralnego zapytania wyciagnietego ze skryp:
[sql:1:21cc625241]
select tel1, impuls, impuls, operator, data from main where io=7 and operator in(501,505,509) and data = '".$_POST['data']."' LIMIT $limit,20;
[/sql:1:21cc625241]

jesli w miejsce wyboldowanej zmiennej '".$_POST['data']."' wpisze stala wartosc np: 031127 to wszystko bedzie ok, kazda kolejna strona wyswietla wyniki

tu zamieszczam caly kod do stronicowania. Moze komus wpadnie jakis fajny pomysl jak to usprawnic.

[php:1:21cc625241]<?php

<?
$pol = mysql_connect('localhost', 'root','666') or die("serwerek dead");
mysql_select_db("bill") or die("Nie mozna sie polaczyc z baza!");

$page = $_REQUEST['page'];
$query = $_POST['query'];
// check to see if $page is set

if (!$page) {
$page = 1;
}
// Change $query to a request super global after the first page.
if($page > 1){
//$query = $_REQUEST['query'];
}
//set up some limits
$limit = $page * 20;
$limit = $limit - 20;
//get the count from the database table
$sql_num = mysql_query("SELECT * FROM main where io =7");
$num = mysql_num_rows($sql_num);

// query your database for the final results
$sql_results = mysql_query("select tel1, impuls, impuls, operator, data from main where io=7 and operator in(501,505,509) and data = '".$_POST['data']."' LIMIT $limit,20");

if($num < 20){
$through = $num;
} else {
$through = $limit + 20;
}
if ($through > $num){
$through = $total;
}
if($page > 1){
$from = $limit +1;
} else {
$from = $limit;
}
if($from == 0){
$from = $from +1;
}

echo "Rezultat wyszukiwania:";
echo "<p align="right">";
if ($page > 1) {
echo "<a
href="$PHP_SELF?query=$query&page=".($page -1).""><< poprzednia</a>&nbsp;&nbsp;";
}
if (($num > 20) && (($limit + 20) < $num)) {
echo "<a href="$PHP_SELF?query=$query&page=".($page +1)."">następna >></a>";
}

//Wyswietlanie
print('<table>');
print("<TABLE border=1 CELLSPACING=1 WIDTH=70% ALIGN=center>");
{
$j=1;
while(list($i,$l, $ll)=mysql_fetch_row($sql_results))

{
print("<tr>");
print("<td>");
print($j);
print("</td>");
print("<td>");
print("<b>Numer telefonu: </b>");
print($i);
print("</td>");
print("<td>");
print("<b>Ilość impulsów: </b>");
print($l);
print("</td>");
print("<td>");
print("<b>koszt: </b>");
print("<td>");
print($ll);
print("</td>");
$j++;
}
}
print('</table>');

if ($page > 1) {
echo "<a
href="$PHP_SELF?query=$query&page=".($page -1).""><< poprzednia</a>&nbsp;&nbsp;";
}
if (($num > 20) && (($limit + 20) < $num)) {
echo "<a href="$PHP_SELF?query=$query&page=".($page +1)."">następna >></a>";
}

?>[/php:1:21cc625241]
BzikOS
[php:1:8db207c0b7]<?php
$sql_num = mysql_query("SELECT * FROM main where io =7");

// ...

$sql_results = mysql_query("select tel1, impuls, impuls, operator, data from main where io=7 and operator in(501,505,509) and data = '".$_POST['data']."' LIMIT $limit,20");
?>[/php:1:8db207c0b7]

Warunki w obu tych zapytaniach muszą być takie same.
czezz
ee...to nie to sad.gif
To wyglada tak jak by ten skrypt za kazdym razem po kliknieciu w "nastepna strona" odpytywal baze danych ale gubil przy tym wartosc zmiennaj '".$_POST['data']."'
Tak mi sie wydaje...jesli tak to co by tu mozna bylo zrobic zeby ta zmienna "przyszpilic" na stale ?
BzikOS
Wrzuć ją do sesji. I popraw to co podałem Ci w poprzednim poście, bo przy takich zapytaniach to owszem będzie skrypt działał, z tym że źle.
czezz
czy mozesz mnie troche nakierowac? Bo wlasnie przeczytalem sobie tutaj http://pl.php.net/manual/pl/ref.session.php o sesjach i o ile sam tekst brzmi calkiem sensownie to w zaden sposob nie potrafie sobie wyobrazic jak zastosowac podany tam przyklad.

Dodalem na poczatek skryptu stronicowania to:
[php:1:bb1c4ad6f7]<?php
session_start();
if (isset($HTTP_SESSION_VARS['count'])) {
$HTTP_SESSION_VARS['count']++;
}
else {
$HTTP_SESSION_VARS['count'] = 0;
}
?>[/php:1:bb1c4ad6f7]

Nie pomoglo, ale jesli wcisne strzalke w tyl ( w przegladarce ) juz po odpaleniu skryptu, to napisze mi, ze sesja wygasla. Sadze ze jestm blisko tylko faktem jest, ze jeszcze tego nie ogarniam.
czezz
prosze pomozcie.
zombie
daj spokój z count. poczytaj dokładnie o sesjach. zarejestruj zmienną data w sesji, czyli np.:
[php:1:d5fa028451]<?php
session_start();
if (isset($_POST['data'])){
$_SESSION['data'] = $_POST['data'];
}

if (isset($_SESSION['data'])){
$_POST['data'] = $_SESSION['data'];
}
?>[/php:1:d5fa028451]
dokładnie nie wnikałem w skrypt, ale chyba o to chodzi...?
czezz
hej!!! dzienx pomoglo :]
czezz
No dobra wiec caly skrypt razem z obsluga sesji wyglada następujaco:


( pewnie wielu z was powie, że jest to napisane nie profesjonalnie i możnaby bylo napisać to lepiej i prościej... i zgodze się z tą opinią, ale puki co poniższy kod działa smile.gif i może komuś się przyda dlatego go tu zamieszczam)

[STRONICOWANIE WYSWIETLANYCH DANYCH + ZMIENNA W ZAPYTANIU SQL]

[php:1:b11d115ed0]<?php

<?

//polaczenie do bazy
$pol = mysql_connect('localhost', 'root','666') or die("serwerek dead");
mysql_select_db("bill") or die("Nie mozna sie polaczyc z baza!");

session_start();

if (isset($_POST['data'])){
$_SESSION['data'] = $_POST['data'];
}

if (isset($_SESSION['data'])){
$_POST['data'] = $_SESSION['data'];
}

$page = $_REQUEST['page'];
$query = $_POST['query'];

// check to see if $page is set
if (!$page) {
$page = 1;
}
// Change $query to a request super global after the first page.
if($page > 1){
//$query = $_REQUEST['query'];
}
//set up some limits
$limit = $page * 20;
$limit = $limit - 20;

//get the count from the database table
$sql_num = mysql_query("select tel1, impuls, impuls, operator, data from main where io=7 and operator in(501,505,509)");
$num = mysql_num_rows($sql_num);
//data ='".$data."'
//query your database for the final results

$sql_results = mysql_query("select tel1, impuls, impuls, operator, data from main where io=7 and operator in(501,505,509) and data = '".$_SESSION['data']."' LIMIT $limit,20");


if($num < 20){
$through = $num;
} else {
$through = $limit + 20;
}
if ($through > $num){
$through = $total;
}
if($page > 1){
$from = $limit +1;
} else {
$from = $limit;
}
if($from == 0){
$from = $from +1;
}

echo "Rezultat wyszukiwania:";
echo "<p align="right">";
if ($page > 1) {
echo "<a
href="$PHP_SELF?data=$data?query=$query&page=".($page -1).""><< poprzednia</a>&nbsp;&nbsp;";
}
if (($num > 20) && (($limit + 20) < $num)) {
echo "<a href="$PHP_SELF?data=$data?query=$query&page=".($page +1)."">następna >></a>";
}

//Wyswietlanie
print('<table>');
print("<TABLE border=1 CELLSPACING=1 WIDTH=70% ALIGN=center>");
{
$j=1;
while(list($i,$l, $ll)=mysql_fetch_row($sql_results))

{
print("<tr>");
print("<td>");
print($j);
print("</td>");
print("<td>");
print("<b>Numer telefonu: </b>");
print($i);
print("</td>");
print("<td>");
print("<b>Ilość impulsów: </b>");
print($l);
print("</td>");
print("<td>");
print("<b>koszt: </b>");
print("<td>");
print($ll);
print("</td>");
$j++;
}
}
print('</table>');

if ($page > 1) {
echo "<a
href="$PHP_SELF?data=$data?query=$query&page=".($page -1).""><< poprzednia</a>&nbsp;&nbsp;";
}
if (($num > 20) && (($limit + 20) < $num)) {
echo "<a href="$PHP_SELF?data=$data?&query=$query&page=".($page +1)."">następna >></a>";
}


?>[/php:1:b11d115ed0]
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.