Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc
Comunitatea PHP Romania
 

Paginare in php - rog ajutor
Vezi mesajul original

 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> PHP Incepători
Subiectul anterior :: Subiectul următor  
Autor Mesaj
admarnic



Data înscrierii: 03/Mar/2005
Mesaje: 78
Locație: Romania

Trimis: Mar Mar 15, 2005 11:36 am    Titlul subiectului: Paginare in php - rog ajutor  

/*
Sunt foarte incepator in PHP
De vreo trei zile ma chinui cu afisarea in pagini diferite a rezultatelor (paginarea)
Am gasit mai multe tutorialuri si scripturi si l-am ales pe asta pt ca il inteleg la cat stiu eu despre php
Problema mea e urmatoarea:
Atunci cand apas pe link-ul care face query la baza de date e ok,
adica imi afiseaza din baza de date doar paginile care contin ceea ce caut
si numerotarea respectiva. Spre ex: daca am in baza de date 4 avioane si 2 camasi
afisate cate una pe pag si caut avioanele afisarea se face corect, adica pe 4 pag ,
iar daca sunt cautate camasi sunt afisate 2 pagini.
Problema apare daca apas pe next sau pe pag 2, etc, pentru ca imi afiseaza numarul total de pagini
adica 6, "uitand" ce i-am cerut prin query-ul initial.
Cum sa rezolv aceasta problema.
Eu cred ca ar trebui sa-l determin cumva sa "tina minte" query-ul initial pana ii fac un nou query,
dar nu stiu cum sa fac
Va rog ajutati-ma
Multumesc anticipat.


*/

<html>

<head>
<title>Oferte</title>

</head>

<body>

&nbsp;<a href="oferte.php?obiect=avion&tranzactie=vanzare&validare=1" target="_self" >vanzare-avion</a><br>
&nbsp;<a href="oferte.php?obiect=camasa&tranzactie=cumparare&validare=1" target="_self">cumparare-camasa</a><br>


</body>

</html>
<?

$page_name="oferte.php"; // Daca folosesti codul in alta pagina ( sau fisier) cu alt nume atunci schimba acest nume cu numele paginii respective.

// Conectare la baza de date
$link=mysql_connect('localhost','root','');
mysql_select_db("bazadate",$link);

/////////////// Gasim numarul de inregistrari care respecta criteriile. Se foloseste pt paginare///////
$query2=" select * from oferte WHERE obiect like '%".$HTTP_GET_VARS['obiect']."%' and tranzactie like '%".$HTTP_GET_VARS['tranzactie']."%' and validare=1 ";
$result2=mysql_query($query2);
echo mysql_error();
$nume=mysql_num_rows($result2);
/////////////// ---------------
if(!isset($start)) { // Variabila este setata 0, pt prima pagina
$start = 0;

}

$eu = ($start - 0);
$limit = 1; // Nr de inregistrari de afisat/pagina.
$this = $eu + $limit;
$back = $eu - $limit;
$next = $eu + $limit;

////////////// Executia query cu variabila $eu and $limit setate in partea de sus a paginii///////////
$query=" select * from oferte WHERE obiect like '%".$HTTP_GET_VARS['obiect']."%' and tranzactie like '%".$HTTP_GET_VARS['tranzactie']."%' and validare=1 limit $eu, $limit ";
$result=mysql_query($query);
echo mysql_error();

//////////////// Afisam rezultatele/////////
while($a = mysql_fetch_array($result))
{
echo "obiect: $a[1] <br> tranzactie: $a[2]";

}
////////////////////////////// Sfarsit afisare ////////////////////////

/////////////// Inceputul afisarii numarului de pagini /////////////////
echo "<table align = 'center' width='50%'><tr><td align='left' width='30%'>";
//// daca variabila $back este egala cu 0 sau mai mare va aparea link-ul ca sa se poata merge back ////////
if($back >=0) {
print "<a href='$page_name?start=$back'><font face='Verdana' size='2'>PREV</font></a>";
}
//////////////// Link-utile paginilor sunt centrate si nu se afiseaza ca link pagina curenta ///////////
echo "</td><td align=center width='30%'>";

$i=0;
$l=1;
for($i=0;$i < $nume;$i=$i+$limit){
if($i <> $eu){
echo " <a href='$page_name?start=$i'><font face='Verdana' size='2'>$l</font></a> ";
}
else { echo "<font face='Verdana' size='4' color=red>$l</font>";} /// Nu se afiseaza pagina curenta cu link si apare colorata in rosu
$l=$l+1;
}


echo "</td><td align='right' width='30%'>";
///////////// Daca nu am ajuns la ultima pagina apare un link de next. Mai jos verificam acest lucru /////
if($this < $nume) {
print "<a href='$page_name?start=$next'><font face='Verdana' size='2'>NEXT</font></a>";}
echo "</td></tr></table>";


?>
Sus  
aurelian



Data înscrierii: 01/Iun/2003
Mesaje: 833
Locație: Bucuresti

Trimis: Mar Mar 15, 2005 12:26 pm    Titlul subiectului:  

Poate te ajuta:
an style="color: #000000"><?php // codul tau // $from, cred ca e $start la tine. // $HTTP_GET_VARS == $_GET if(!isset($_GET['from'])) {      $from=0; } else {     $from = $_GET['from']; } // query: // se pot comprima queriurile 1 si 2 ? //1. nr total de inregistrari care respecta criteriile: $query="select count(*) AS nr_rezultate from oferte WHERE obiect like '%".$HTTP_GET_VARS['obiect']."%' and tranzactie like '%".$HTTP_GET_VARS['tranzactie']."%' and validare=1"; $rs=mysql_query($query) or die(mysql_error()); $row = mysql_fetch_array($rs); $nr_rezultate = $row['nr_rezultate'];  //2. limitari, am pus 30 pe pagina, cred ca merge sa schimbi cu variabila $eu (apropo, prost nume ai ales) $query="select * from oferte WHERE obiect like '%".$HTTP_GET_VARS['obiect']."%' and tranzactie like '%".$HTTP_GET_VARS['tranzactie']."%' and validare=1 LIMIT $from,30"; // ce linkuri avem pe pagina? // afisam link catre pagina precedenta? if($from==0) { // nu il afisam            $first_page=false; } else { // il afisam             $first_page=true; } // suntem pe ulltima pagina? if(($from+30)>$nr_rezultate) {     $last_page=false; } else {     $last_page=true; } // afisare rezultate $rs = mysql_query($query) or die (mysql_error); while($a = mysql_fetch_array($rs)) {     echo "obiect: $a[1] <br> tranzactie: $a[2]"; } // decidem daca afisam sau nu link catre pagina urmatoare/precedenta. if($first_page){ ?> <!-- afiseaza linkul aici --> <?php } if($last_page) { ?> <!-- afiseaza linku aici --> <?php } 

In linkurile ai putea pune ceva de genul:
PREV:
an style="color: #000000"><?php ?> LINKUL_TAU?from=<?php echo ($from-30); ?> 
si NEXT:
an style="color: #000000"><?php ?> LINKUL_TAU?from=<?php echo ($from+30); ?> 


Normal, poti inlocui 30 cu 1 sau cu cat vrei tu.

Sugestii:
-> fii atent cand iei variabilele din GET si nu uita sa le faci add/strip slashes in functie de magics_*
-> nu mai folosi $this pentru numele unei variabile.
Sus  
admarnic



Data înscrierii: 03/Mar/2005
Mesaje: 78
Locație: Romania

Trimis: Mar Mar 15, 2005 2:20 pm    Titlul subiectului: Multumesc dar...  

Am inteles ideea dar tot nu stiu cum sa fac link-urile propriuzise ale paginii cu noul script.
:roll: Cer scuze ca sunt atat de nepriceput.
Sus  
aurelian



Data înscrierii: 01/Iun/2003
Mesaje: 833
Locație: Bucuresti

Trimis: Mar Mar 15, 2005 2:50 pm    Titlul subiectului:  

Pai cam asa banuiesc:

<a href=$page_name?from=$from-30>Prev</a>
<a href=$page_name?from=$from+30>Next</a>

Am inlocuit start cu from, trebuie sa le pui in conditiile alea cu if($first_page){ }
si if($last_page){ }

cam asa:
an style="color: #000000"><?php if($first_page){ ?> <a href=<?=$page_name?>?from=<?=($from-30)?>>Prev</a> <?php } else { echo '<br />'; } if($last_page){ ?> <a href=<?=$page_name?>?from=<?=($from+30)?>>Next</a> <?php } else { echo '<br />'; } ?> 
Sus  
admarnic



Data înscrierii: 03/Mar/2005
Mesaje: 78
Locație: Romania

Trimis: Mar Mar 15, 2005 3:05 pm    Titlul subiectului: Inca o data multumesc pt raspunsul promt  

Dar face ca si scriptul initial, adica uita sa faca next sau prev numai pe query-ul solicitat initial. Face acest lucru pe toata baza de date, ca si scriptul cu problema initiala.
Sus  
raul_



Data înscrierii: 15/Sep/2005
Mesaje: 711

Trimis: Lun Ian 23, 2006 3:12 pm    Titlul subiectului:  

[STERS ]
Sus  
PHPRomania Bot
Bot Member


Data înscrierii: 27/Dec/2007
Mesaje: 1
Locaţie: Server Google
Trimis: Mie Dec 26, 2007 7:01 pm   Titlul subiectului: Ad  

Sus  
 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> PHP Incepători
Pagina 1 din 1


Powered by phpBB 2.0.22 © 2001, 2002 phpBB Group
Varianta în limba română: Romanian phpBB online community