 |
Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Comunitatea PHP Romania
|
| 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>
<a href="oferte.php?obiect=avion&tranzactie=vanzare&validare=1" target="_self" >vanzare-avion</a><br>
<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 |
|
| |
|