2011-01-14 5 views
0

Ich habe ein Problem mit meinem Code (Entschuldigung es ist eine Menge, aber es ist die einzige Art und Weise, die ich Ihnen zeigen konnte, es ist im Grunde nur eine Select-Anweisung aus einer Tabelle), die eine Seitenverknüpfung zeigt aber nicht ändert die Seite Ergebnisse. Grundsätzlich setze ich es zum Beispiel auf 1 Ergebnis pro Seite, aber es zeigt alle Ergebnisse, zeigt aber immer noch einen Link oben, um zur nächsten Seite zu gelangen. Die nächste Seite zeigt dasselbe. Ich bin ein PHP-Anfänger, also würde jede Hilfe sehr geschätzt werden.Problem mit PHP Paginierung

Danke!

<?php 

      if (isset($_GET['page'])) $page = $_GET['page']; else $page = 1; 
      $max_results = 1; 
      $from = (($page * $max_results) - $max_results); 
      REQUIRE('config.php'); 
      $q = mysql_real_escape_string(ucfirst(trim($_REQUEST['q']))); 
      $result = mysql_query("SELECT * FROM gj WHERE name LIKE '%$q%' OR cat1 LIKE '%$q%' OR cat2 LIKE '%$q' OR cat3 LIKE '%$q' ORDER by name") or trigger_error(mysql_error()); 
      $rows = mysql_num_rows($result); 
      if($rows == 0){ 

      } 
      echo " <div id='title'>Search for &quot;$q&quot;<div class='righttitle'>$rows business";if($rows > 1){echo "es";}elseif($rows == "0"){echo "es";}echo" found"; 
      echo"<div id='pagenumbers'>"; 
      // (1) get the total number of results for your query 
      // modify this to match the total results for the main query 
      $total_results = mysql_result(mysql_query("SELECT COUNT(*) as Num FROM gj where name LIKE '%$q%' OR cat1 LIKE '%$q%' OR cat2 LIKE '%$q' OR cat3 LIKE '%$q'"),0); 

      // (2) Calculate total number of pages. Round up using ceil() 
      $total_pages = ceil($total_results/$max_results); 

      if($total_results > $max_results) 
      { 
       // (3) build Previous link 
       if($page > 1) 
       { 
       $prev = ($page - 1); 
       echo "<a href=\"".$_SERVER['PHP_SELF']."?q=$q&page=$prev\">&lt;&lt; Prev</a> "; 
       } 

       // (4) display page numbers 
       for($i = 1; $i <= $total_pages; $i++) 
       { 
       if($page == $i) 
       { 
        echo $i . " "; 
       } 
       else 
       { 
        echo "<a href=\"".$_SERVER['PHP_SELF']."?q=$q&page=$i\">$i</a> "; 
       } 
       } 

       // (5) build Next Link 
       if($page < $total_pages) 
       { 
        $next = ($page + 1); 
        echo "<a href=\"".$_SERVER['PHP_SELF']."?q=$q&page=$next\">Next &gt;&gt;</a>"; 
       } 
      } 

    echo"</div></div></div>"; 
     while($row = mysql_fetch_array($result)) 
     { 
     $id=$row['id']; 
     $name=$row['name']; 
     $phone=$row['phone']; 
     $website=$row['website']; 
     $city=$row['city']; 
     $address=$row['address1']; 
     $zipcode=$row['zipcode']; 
     $sponsored = $row['sponsored']; 
     $addressmap = preg_replace('/\s/', '+',$address); 
     $citymap = preg_replace('/\s/', '+',$city); 
     //Start While Loop 
     echo" 
     <div id='listing'> 
      <div id='mainlisting'>"; 
      echo" 
       <div class='name'> 
        <a href='./more.php?id=$id' class='";if($sponsored != 1){echo "red";}else{echo"sponsored";}echo"'>$name</a> <div class='right'>$phone</div> 
       </div> 
       <div class='other'> 
        $address, $city, CO $zipcode 
|<a target='_blank' href='http://maps.google.com/maps?  f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=$addressmap,+$city+CO&amp;&amp;&amp;ie=UTF8&amp;hq=&amp;hnear=$address,+$city,+Colorado+$zipcode&amp;safe=active&amp;&amp;&amp;t=h&amp;z=14&amp;iwloc=A&amp;output=embed' rel='lyteframe' class='";if($sponsored != 1){echo "red";}else{echo"sponsored";}echo"' title='$name' rev='width: 500px; height: 500px; scrolling: no;'> See Map</a><br/> 
        <a href='#' class='";if($sponsored != 1){echo "red";}else{echo"sponsored";}echo"'>";if($website != null){ echo "<a target='_blank' href='$website' class='";if($sponsored != 1){echo "red";}else{echo"sponsored";}echo"'>Website</a> |";}echo" <a href='#' class='";if($sponsored != 1){echo "red";}else{echo"sponsored";}echo"'>More Info</a> 
       </div> 
      </div> 
     </div><!--/LISTING-->"; 

     } 

Michael, habe ich versucht, was Sie getan haben, aber ich könnte es falsch gemacht haben ... Hier ist mein Code, bevor die Anweisung, wo

<?php 
     $page = 1; $total_pages = 9; $record_start = ($page * $total_pages) - $total_pages; 
      REQUIRE('config.php'); 
      $q = mysql_real_escape_string(ucfirst(trim($_REQUEST['q']))); 
      $result = mysql_query("SELECT * FROM gj WHERE name LIKE '%$q%' OR cat1 LIKE '%$q%' OR cat2 LIKE '%$q' OR cat3 LIKE '%$q' ORDER by name LIMIT 0,9") or trigger_error(mysql_error()); 
      $rows = mysql_num_rows($result); 
      if($rows == 0){ 

      } 
      echo " <div id='title'>Search for &quot;$q&quot;<div class='righttitle'>$rows business";if($rows > 1){echo "es";}elseif($rows == "0"){echo "es";}echo" found"; 
      echo"<div id='pagenumbers'>"; 
      // (1) get the total number of results for your query 
      // modify this to match the total results for the main query 
      $total_results = mysql_result(mysql_query("SELECT COUNT(*) as Num FROM gj where name LIKE '%$q%' OR cat1 LIKE '%$q%' OR cat2 LIKE '%$q' OR cat3 LIKE '%$q '"),0); 

      // (2) Calculate total number of pages. Round up using ceil() 
      $alltotal_pages = ceil($total_results/$max_results); 

      if($total_results > $max_results) 
      { 
       // (3) build Previous link 
       if($page > 1) 
       { 
       $prev = ($page - 1); 
       echo "<a href=\"".$_SERVER['PHP_SELF']."?q=$q&page=$prev\">&lt;&lt; Prev</a> "; 
       } 

       // (4) display page numbers 
       for($i = 1; $i <= $alltotal_pages; $i++) 
       { 
       if($page == $i) 
       { 
        echo $i . " "; 
       } 
       else 
       { 
        echo "<a href=\"".$_SERVER['PHP_SELF']."?q=$q&page=$i\">$i</a> "; 
       } 
       } 

       // (5) build Next Link 
       if($page < $alltotal_pages) 
       { 
        $next = ($page + 1); 
        echo "<a href=\"".$_SERVER['PHP_SELF']."?q=$q&page=$next\">Next &gt;&gt;</a>"; 
       } 
      } 

echo "";

+0

helfen, warum nicht Sie eine Klasse erstellen, diese zu handhaben, wie Sie wollen nicht, dass schreiben, Immer wenn Sie Seiten brauchen. – RobertPitt

+0

Danke @RobertPitt Ich werde das tun –

Antwort

1

Was Sie tun müssen, ist hinzuzufügen, so etwas wie:

$ page = 1;

$ result_per_page = 10;

$ record_start = ($ page * $ result_per_page) - $ result_per_page;

$ result = mysql_query ("SELECT * FROM gj WHERE name LIKE '% $ q%' OR cat1 LIKE '% $ q%' OR cat2 LIKE '% $ q' OR cat3 LIKE ‚% $ q 'ORDER by name LIMIT $ record_start, $ result_per_page ") oder trigger_error (mysql_error());

+0

Ich habe gerade meine Antwort bearbeitet ... Sorry, ich bin wirklich ein Anfänger bei PHP ... Danke für die Hilfe. –

+0

sieht aus wie Sie vergessen haben, die LIMIT $ record_start, $ results_per_page in der ersten Abfrage – Michael

+0

Ich habe immer noch ein Problem, aber es ist kein Fehler wie zuvor. Es zeigt mir jetzt nur 9 meiner 15 Reihen. Dann, wenn Sie auf die nächste Seite klicken, funktioniert der Link nicht. –

1

Das Problem ist, dass Sie immer die gleiche Ergebnismenge abrufen und dann nur alles ausgeben, egal welche Seite gerade "aktiv" ist. Wenn Sie paginieren möchten, möchten Sie wahrscheinlich eine LIMIT-Klausel in Ihrer SQL-Abfrage verwenden (z. B. LIMIT 20,10, um 10 Datensätze ab dem Offset 20 (nullbasiert, d. H. Datensatznummer 21) zurückzugeben).

+0

Ich habe nur das getan, aber es hat nicht funktioniert ?? Ist das richtig????? $ result = mysql_query ("SELECT * FROM gj WHERE Name LIKE '% $ q%' ODER cat1 LIKE '% $ q%' ODER cat2 LIKE '% $ q' ODER cat3 LIKE '% $ q' ORDER name LIMIT 20, 10 ") oder trigger_error (mysql_error()); –

+0

Das sollte funktionieren ... – Michael