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 dinamica - probleme
Vezi mesajul original
Du-te la pagina 1, 2  Următoare
 
       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
esix



Data înscrierii: 21/Noi/2004
Mesaje: 19
Locație: Calafat

Trimis: Dum Dec 12, 2004 10:39 am    Titlul subiectului: Paginare dinamica - probleme  

Am 2 blocuri de cod: unul afiseaza obiectele din tabel, altul afiseaza Pagina: 0 1 2 3....

PRIMA PARTE:
an style="color: #000000"><?php $pag = $_GET['pag']; $ob = 3; $min = $pag * $ob; print '<br>'; $cmd = "SELECT * from `shop_produse` LIMIT $min, $ob"; $rez = mysql_query($cmd); while($rnd = mysql_fetch_array($rez, MYSQL_ASSOC)){   print $rnd['Produs'].'<br>'; } 


PARTEA A DOUA:
an style="color: #000000"><?php $cmd = "SELECT * from `shop_produse`"; $rez = mysql_query($cmd); $cat = mysql_num_rows($rez); $pag = 0; while($pag <= round($cat / $ob)){   print "<a href='".$_SERVER['PHP_SELF']."?pag=".$pag."'>"."$pag"."</a>"." ";   $pag++; } 

De afisat imi afiseaza corespunzator, dar as dori sa inceapa paginarea, sa zicem de la 1 2 3 4... nu de la 0 1 2 3 4... si sa scot link-ul de pe pagina curenta
Sus  
mihnea sim



Data înscrierii: 20/Aug/2004
Mesaje: 149
Locație: Alexandria

Trimis: Dum Dec 12, 2004 5:20 pm    Titlul subiectului:  

an style="color: #000000"><?php $pag = 1;  while($pag < round($cat / $ob)){    print "<a href='".$_SERVER['PHP_SELF']."?pag=".$pag."'>"."$pag"."</a>"." ";    $pag++;  } 
Sus  
esix



Data înscrierii: 21/Noi/2004
Mesaje: 19
Locație: Calafat

Trimis: Dum Dec 12, 2004 7:09 pm    Titlul subiectului:  

mihnea sim a scris: an style="color: #000000"><?php $pag = 1;  while($pag < round($cat / $ob)){    print "<a href='".$_SERVER['PHP_SELF']."?pag=".$pag."'>"."$pag"."</a>"." ";    $pag++;  } 

Nu inteleg?! pai asta este acelasi cod care l-am scris eu... Pe mine ma intereseaza sa imi afiseze Pagina:1234 nu Pagina:01234 si totodata m-ar interesa sa scot link-ul de pe pagina curenta...
Sus  
mihnea sim



Data înscrierii: 20/Aug/2004
Mesaje: 149
Locație: Alexandria

Trimis: Dum Dec 12, 2004 10:15 pm    Titlul subiectului:  

Pai eu am initializat $pag cu 1, iar in loc de "<=" am zis "<", dar acum vad ca am o greseala de algoritm. Uite o varianta corecta:

an style="color: #000000"><?php $cmd = "SELECT * from `shop_produse`";  $rez = mysql_query($cmd);  $cat = mysql_num_rows($rez);  $pag = 0;  while($pag <= round($cat / $ob)){  $pg = $pag + 1;   print "<a href='".$_SERVER['PHP_SELF']."?pag=".$pag."'>".$pg."</a>"." ";    $pag++; 
Sus  
esix



Data înscrierii: 21/Noi/2004
Mesaje: 19
Locație: Calafat

Trimis: Dum Dec 12, 2004 10:44 pm    Titlul subiectului:  

Ok, am sesizat eroarea mea. Acum nu reusesc sa ma gasesc o solutie pentru a afisa fara link pagina curenta. Spre exemplu eu ma aflu acum pe pagina 2 si vreau sa vad paginarea in felul urmator:

Pagina: 1234
Sus  
beeuser



Data înscrierii: 20/Mai/2004
Mesaje: 384

Trimis: Dum Dec 12, 2004 11:40 pm    Titlul subiectului:  

pear site:

http://pear.php.net/manual/en/package.html.pager.php
Sus  
stefan03



Data înscrierii: 01/Iun/2004
Mesaje: 28
Locație: Ploiesti

Trimis: Mie Feb 23, 2005 9:39 pm    Titlul subiectului:  

Link scos de pe pagina activa
Cod:

$cmd = "SELECT * from `produse`";
$rez = mysql_query($cmd);
$cat = mysql_num_rows($rez);                   
$pag = 0;                                     
while($pag < round($cat / $ob)){
$pg = $pag + 1;   
   
   if ($_GET['pag'] == ($pg-1)){
      print "$pg";
      }else{
                          
  print "<a href='".$_SERVER['PHP_SELF']."?pag=".$pag."'>".$pg."</a>"." "; }
  $pag++;
}
Sus  
NDC



Data înscrierii: 19/Feb/2005
Mesaje: 127

Trimis: Joi Feb 24, 2005 1:44 am    Titlul subiectului: Re: Paginare dinamica - probleme  

Salut,

n-ar fi rau sa optimizezi totusi procesul:

esix a scris:
PARTEA A DOUA:
an style="color: #000000"><?php $cmd = "SELECT * from `shop_produse`"; $rez = mysql_query($cmd); $cat = mysql_num_rows($rez); 

Deci tu selectezi TOT din baza de date? Un query ca asta intoarce un ditamai resource, merge lent si incetineste serverul. Corect este

Cod: $cmd = "SELECT COUNT(*) from `shop_produse`";
$rez = mysql_fetch_row(mysql_query($cmd));
$cat =$rez[0];
Sus  
mihnea sim



Data înscrierii: 20/Aug/2004
Mesaje: 149
Locație: Alexandria

Trimis: Joi Feb 24, 2005 8:06 am    Titlul subiectului:  

daca esti preocupat de timpul de executie ... si mai eficient ar fi mysql_result in loc de mysql_fetch_row ;)
Sus  
beginner18



Data înscrierii: 30/Aug/2004
Mesaje: 714
Locație: Bucuresti

Trimis: Lun Mar 07, 2005 1:07 pm    Titlul subiectului: nu stiu daca mai intereseaza pe cineva dar am postat sa fie!  

mi se pare ca este gresit la ce a scris mihnea sim:

$cmd = "SELECT * from `shop_produse`";
$rez = mysql_query($cmd);
$cat = mysql_num_rows($rez);
$pag = 0;
while($pag <= round($cat / $ob)){
$pg = $pag + 1;
print "<a href='".$_SERVER['PHP_SELF']."?pag=".$pag."'>".$pg."</a>"." ";
$pag++; }

pentru ca, acea functie round nu fac ce trebuie. Si sa demonstrez printr-un exmeplu:
Daca $cat=21 //$cat este nr inregistrarilor
si $ob=10 //iar $ob cred ca reprezinta numarul de inreg pe pagina
round($cat,$ob)=2 ..deci imi face 2 pagini
insa mie imi trebuie 3 pagini:
1 - primele 10 inregistrari
2 - urmatoarele 10 inregistrari
3 - ultima inregistrare

deci, la acel round($cat,$ob) se pierde 1 inregistrare.
Codul pe care l-am facut si afiseaza tot(acu 10 min am terminat de lucrat la el, ca imi trebuia pentru forum) este:

an style="color: #000000"><?php $query="select * from forum_posts;"; $result=mysql_query($query) or die(mysql_error()); $num=mysql_num_rows($result); $i=$num%$nrpepagina;  $j=($num-$i)/$nrpepagina; if($i!=0){ $j=$j+1; } if($i==0){ $j=$j-1;} for($k=1;$k<=$j;$k++){ echo "<a href=\"forum_view.php?webdesign=instalare&pagina=$k\">$k</a>"; echo" "; } echo"<br>"; 

Explicatii la el:
de fapt, el cauta sa vada daca restul numarul inregistrarilor % numarul de inreg pe pagina, este 0, atunci, sunt (numarul inregistrarilor / numarul de inreg pe pagina) pagini
daca este diferit de 0, atunci sunt: [numarul inregistrarilor / numarul de inreg pe pagina] + 1 pagini ( am pus in paranteza patrata ca asa arat ca e parte intreaga din acea impartire )
mai exact, daca sunt 21 de inregistrari si 10 sa fie pe pagina
21%10 !=0
[21/10]=2
deci sunt 2+1 pagini(mai adaug 1, ca sa intre ultima inregistrare, pe pagina a 3-a )
... :D ..nuj dc m-am facut inteles..ca de obicei nu sunt inteles!
Sus  
NDC



Data înscrierii: 19/Feb/2005
Mesaje: 127

Trimis: Lun Mar 07, 2005 10:17 pm    Titlul subiectului: Re: nu stiu daca mai intereseaza pe cineva dar am postat sa  

beginner18 a scris: mi se pare ca este gresit la ce a scris mihnea sim:
...
pentru ca, acea functie round nu fac ce trebuie.
...
Codul pe care l-am facut si afiseaza tot(acu 10 min am terminat de lucrat la el, ca imi trebuia pentru forum) este:
...
Explicatii la el:
de fapt, el cauta sa vada daca restul numarul inregistrarilor % numarul de inreg pe pagina, este 0, atunci, sunt (numarul inregistrarilor / numarul de inreg pe pagina) pagini
daca este diferit de 0, atunci sunt: [numarul inregistrarilor / numarul de inreg pe pagina] + 1 pagini ( am pus in paranteza patrata ca asa arat ca e parte intreaga din acea impartire )
...
... :D ..nuj dc m-am facut inteles..ca de obicei nu sunt inteles!
Nu inteleg de ce trebuie sa reinventezi roata??

Exista functia ceil(). Stii ce face? returneaza numarul intreg imediat urmator argumentului dat, daca acesta are parte fractionara. Pentru 2 returneaza 2, pentru 2.1 returneaza 3 etc.

Va complicati atata pentru un script de paginare care e la mintea unui elev de clasa a cincea. [/b]
Sus  
beginner18



Data înscrierii: 30/Aug/2004
Mesaje: 714
Locație: Bucuresti

Trimis: Lun Mar 07, 2005 10:25 pm    Titlul subiectului:  

uite...hai sa invatam sa gandim..crezi tu ca daca stiam de aceasta functie, as mai fi facut porcaria aia?
Sus  
raul_



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

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

[STERS]
Sus  
beginner18



Data înscrierii: 30/Aug/2004
Mesaje: 714
Locație: Bucuresti

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

e vechi postu!!! nu mai are rost..iti dai seama ca am gasit de atunci!!!!
merci oricum
Sus  
raul_



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

Trimis: Lun Ian 23, 2006 3:24 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 Du-te la pagina 1, 2  Următoare
Pagina 1 din 2


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