paginare php

Aici prezentati probleme, intrebari, sau orice subiecte legate de scripturi si tutoriale de pe site.
Cristina
Mesaje: 9

paginare php

De cateva zile stau cu ochii in PC pt a rezolva problema cu paginarea da nu reusesc. :cry:

In mare merge codul . Dar eu de ex selectez masiniile din BD dupa anumite criterii: marca, an, etc. Si dc aleg dupa marca prima pagina este bine dar dupa aceea, imi arata masiniile din alta marca. Pana a introduce codul pt paginare a mers bine dar acum nu. Deci nu reusesc sa fac cumva legatura.
Codul este:

Cod: Selectaţi tot

<?php
function get_search_cars($marca, $data_fabricatie, $caroserie,$combustibil,$portiere,$culoare)
	{   $conn = db_connect();

	$text="SELECT * FROM cars";
	$where=" WHERE 'id'='id'"; 
	$order="order by data desc";

	if ($marca) $where .= " AND marca ='".$marca."'";
	if ($data_fabricatie) $where .= " AND data_fabricatie ='".$data_fabricatie."'";
	if ($caroserie) $where .= " AND caroserie='".$caroserie."'";
	if ($combustibil) $where .= " AND combustibil='".$combustibil."'";
	if ($portiere) $where .= " AND portiere='".$portiere."'";
	if ($culoare) $where .= " AND culoare='".$culoare."'";
	$query=$text.$where.$order;
	    $result = mysql_query($query);
	   if (!$result)
	     return false;
	   $num_cars = mysql_num_rows($result);
	   //arata cate masini sunt in baza de date la fiecare marca
	       echo '<div class="afisare_nr_masini">Anunturi gasite: '.$num_cars.'</div>';
	   if ($num_cars == 0)
	   {
	     echo '<table><tr><td>Ne pare rau, nu a fost gasit
	            niciun anunt dupa criteriile de cautare selectate.<br/>
	            Refaceti cautarea selectand mai putine criterii sau folositi alte filtre.</td></tr></table>';
	     }

	      $numrows = $num_cars; 
	      echo $numrows ; 
	     // Stabileste numarul de linii din tabel afisate in pagina 
        $rowsperpage = 10; 
	     	     
		// afla numarul total necesar de pagini 
		$totalpages = ceil($numrows / $rowsperpage);      
		echo '; pagini '.$totalpages;
		// Obtine pagina curenta sau seteaza default 
		if (isset($_GET['currentpage']) && is_numeric($_GET['currentpage'])) {  
  		// seteaza variabila ca int 
  		$currentpage = (int) $_GET['currentpage'];  
		} else {  
  		// pagina care este initial afisata (pagina default) 
  		$currentpage = 1;  
		}

		// daca pagina curenta e mai mare decat total pagini...
		if ($currentpage > $totalpages) {  
  		// seteaza pagina curenta la ultima pagina  
  		$currentpage = $totalpages;  
		} 
		// daca pagina curenta e mai mica decat prima pagina...  
		if ($currentpage < 1) {  
  		// seteaza pagina curenta la prima pagina   
  		$currentpage = 1;  
		} 

		// lista cu pagini, in functie de pagina curenta   
		$offset = ($currentpage - 1) * $rowsperpage;  

		// obtine datele din tabel (MODIFICATI 'nume_tb') din baza de date  
   		$text="SELECT * FROM cars";
			$where=" WHERE 'id'='id'"; 
			$order="order by data desc LIMIT $offset, $rowsperpage";

			if ($marca) $where .= " AND marca ='".$marca."'";
			if ($data_fabricatie) $where .= " AND data_fabricatie ='".$data_fabricatie."'";
			if ($caroserie) $where .= " AND caroserie='".$caroserie."'";
			if ($combustibil) $where .= " AND combustibil='".$combustibil."'";
			if ($portiere) $where .= " AND portiere='".$portiere."'";
			if ($culoare) $where .= " AND culoare='".$culoare."'";
			$query=$text.$where.$order;
	    		$result = mysql_query($query);
	   		if (!$result)
	     		return false;
	   		$num_cars = mysql_num_rows($result);
	   		//arata cate masini sunt in baza de date la fiecare marca
	       		echo '<div class="afisare_nr_masini">Anunturi gasite: '.$num_cars.'</div>';
	   		if ($num_cars == 0)
	   		{
	     		echo '<table><tr><td>Ne pare rau, nu a fost gasit
	            		niciun anunt dupa criteriile de cautare selectate.<br/>
	            		Refaceti cautarea selectand mai putine criterii sau folositi alte filtre.</td></tr></table>';
	     		}

		/*** Construirea link-urilor pt. paginare ***/ 
		// raza nr. link-uri din jurul celui curent 
		$range = 3;

		// Link-uri inapoi, daca pagina curenta nu e prima
		if ($currentpage > 1) {  
  		// arata << pt. link la prima pagina  
  		echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=1'><<</a> &nbsp; ";  
  		// obtine nr. pagina din urma 
  		$prevpage = $currentpage - 1;  
  		// arata < pt. link la o pagina in urma 
  		echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=$prevpage'><</a> &nbsp;";  
		} 

		// definirea link-urilor din raza paginii curente
		for ($x = ($currentpage - $range); $x < (($currentpage + $range) + 1); $x++) {  
  		// daca e un nr. de pagina valid ... 
  		if (($x > 0) && ($x <= $totalpages)) {  
    		// daca nr. e pagina curenta ...  
    		if ($x == $currentpage) {  
      		// afiseaza nr. pagina fara a fi link  
      		echo " [<b>$x</b>] ";  
    		// daca nr. nu e pagina curenta ...  
    		} else {  
      		// il face link  
   		echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=$x'>$x</a> ";  
    		}  
  		}
		}
        
		// Daca pagina curenta nu e ultima, afiseaza link inainte si spre ultima pagina
		if ($currentpage != $totalpages) {  
  		// obtine pagina urmatoare 
  		$nextpage = $currentpage + 1;  
   		// arata > pt. urmatoarea pagina   
  		echo "&nbsp; <a href='{$_SERVER['PHP_SELF']}?currentpage=$nextpage'>></a> ";  
  		//  arata >> pt. ultima pagina
  		echo " &nbsp; <a href='{$_SERVER['PHP_SELF']}?currentpage=$totalpages'>>></a> ";  
		}	     
  
	$result = db_result_to_array($result);
   return $result;
}
?>
Stiu ca este cam lung . Dar va rog dc puteti sa ma ajutati.
Va multumesc.

MarPlo Mesaje: 4343
Personal nu stiu sigur care sa fie cauza, pt. a gasi problema, trebuie testat, prin eliminare. Prima data cu o singura conditie WHERE, apoi inca una, vazand ce rezultat da pana la cea care nu mai afiseaza ce trebuie.
Si mereu cu un echo la $query pt. a vedea ce interogare trimite la mysql.

In neregula pare totusi expresia " WHERE 'id'='id'" , la nume de coloane nu se pune ghilimele simple, ci `` (de langa tasta 1), iar la 'id' de dupa egal poate trebuia $id , dar nu se vede preluata de undeva vreo variabila $id.
Cam atat am putut sa deslusesc din cod.

Cristina Mesaje: 9
Am reusit. Va multumesc mult. Este foare bun codul pentru paginare de pe acest site, numai ca trebuie putina atentie.

Subiecte similare