2016-03-22 6 views
1

Ich arbeite an einem Codeabschnitt, der Seitennummerierung für verschiedene Sortiersysteme ausführt. Es funktioniert für Likes und gibt korrekt aus, aber funktioniert nicht für das Sortiersystem von Tag. DieseWarum funktioniert mein PHP Code für die Seitennummerierung nicht?

$sorting = $_GET["sorting"]; 

$per_page = 10; 
$pages = $count_total->num_rows; 
$total_pages = ceil($pages/$per_page); 

if($sorting == "likes") { 
     $count_total = $db2->query("SELECT * FROM likes WHERE user='$user'"); 
    } 

if($sorting == "tag") { 
    $tag_name = $_GET["tag_name"]; 
    $count_total = $db2->query("SELECT * FROM movie_tags WHERE tag_id='$tag_name'"); 
    } 

$pages = $count_total->num_rows; 
    $total_pages = ceil($pages/$per_page); 

$start = (($page - 1) * $per_page); 



for($number=1;$number<=$total_pages;$number++) { 
      if($page == $number) { 
      echo '<div class="complete_page">'.$number.'</div>'; 
      } else { 
      $sorting = $_GET["sorting"]; 
      echo '<a href="?page='.$number.'&sorting='.$sorting.'"> <div class="number_page">'.$number.'</div></a>'; 

      } 
     } 
     } 

ist ein Beispiel dafür, wie ich bin mit Paginierung:

$movie = $db2->query("SELECT * FROM movies ORDER BY likes DESC LIMIT $start, $per_page"); 

HINWEIS: Wenn ich $pages Echo, beiden Sortiersysteme Werte erzeugen. In der Tat hat Tag einen Wert von 11. Warum erstellt dieser Wert das Paginierungssystem nicht. Ich weiß, das ist kein Problem mit dem Paginierungssystem, weil es für das Sortiersystem von Likes arbeitet.

+0

[Ich dachte nur, Sie sollten wissen, dass der Besuch von '/? Page = somesqlinjectionhere' sehr unglücklich sein könnte.] (Http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in -php) – Marty

+0

Wahr. Mein Gedanke ist, dass ich SQL Injection und andere Sicherheit am Ende mit einem Team von Entwicklern machen werde. Ich bin gerade ein Solo-Entwickler in diesem Projekt jetzt ... –

+0

Ich empfehle nicht offensichtliche und schwere Sicherheitsprobleme bis zum Ende. – Marty

Antwort

1

versuchen Ändern Sie abfragen zu:

$movie = $db2->query("SELECT * 
         FROM movies 
         ORDER BY likes DESC 
         LIMIT $per_page 
         OFFSET $start"); 

Dadurch wird die Anzahl der Zeilen auf $ festgelegt sollte von $ beginnen per_page starten.

+0

Hat nicht funktioniert. Bitte ignorieren Sie mein Beispiel für die Seitennummerierung. Es ist nur ein Beispiel und bezieht sich nicht direkt auf mein Problem. –

+0

$ start = (($ page - 1) * $ per_page); Soll dies $ Seiten statt $ Seite sein. Ich könnte blind sein, aber ich kann nicht finden, wo $ Seite initialisiert wird. –

+0

Das soll so sein. Du hast recht, dass ich $ page übersprungen habe. $ page ist einfach holen Sie den Seitenbereich der URL: films.php? page = 1 –

1

Sie sollten versuchen, die 2 einfachen Anführungszeichen um $ tag_name in Ihrer SQL-Abfrage zu entfernen. ich meine:

$count_total = $db2->query("SELECT * FROM movie_tags WHERE tag_id=".$tag_name); 

Da Ihr Tag-Wert 11 ist, ich glaube, Ihre Datenbankspalte tag_id genannt ist eine ganze Zahl. Und mit diesen zwei einfachen Anführungszeichen vergleichen Sie es mit einem String/varchar '11'.

Verwandte Themen