MyBB.de Forum

Normale Version: Multipaging
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Also meine Frage. Ich hab ein Gästebuch in PHP geschrieben. Alles funktioniert und wir auch alles sehr schön in der Datenbank gespeichert. Jeztz hab ich nur n Problem. Ich möchte kein Gästebuch mit 100erten von Einträgen und würde daher Multipaging verwenden. Jedoch gibt es dort ebenfalls ein Problem. Ich hab dieses Sourceskript eines Tuts runtergeladen und hab mir das Tutuorial auch sorgfältig durchgelesen...aber ich kriegs einfach nicht gebacken und frag deshalb mal die PHP-Junkies von MyBB Wink

Wurde aus Platzgründen entfernt

Ich hab kein Plan was der da abfragt und da kommt auch immer der MySQL Fehler. Ich hab da dann mal das Template eingefügt, das die Daten der Einträge ausspuckt, und dann füllt sich die ganze Seite mit einem leeren Eintrag.
Ähmm danke aber ich möchte nicht nur 5 Einträge anzeigen oder so, also ich möchte das so machen wie in einem Forum oder in einem Comment System auch.
Unten bzw. Unten und Oben soll angezeigt werden <<Erste Seite Seite: 1,2 Letzte Seite>>

Also in dem Stil und alles in einer .php datei. Also wenn du mir erklärst welches ich anschaun soll dann kuck ich nochmal aber ich hab da jetzt nur gelesen, das es die anzuzeigenden Beiträge zeigt...

Es soll die Setienanzahlen selbst generieren!

Edit Ich hab ein anderes Tutorial gefunden, und das funktioniert perfekt.
Dragon, auch wenn mir deine Antwort nicht weitergeholfen hat, trotzdem danke xD

MfG,
Kioshi
Kioshi schrieb:Edit Ich hab ein anderes Tutorial gefunden, und das funktioniert perfekt.
Dann hoffe ich, dass es besser ist als das schon genannte. Der von dir oben gepostete Code enthält mehrere Sicherheitsprobleme, da übergebene Werte ungeprüft in die Datenbankabfrage übernommen werden (SQL-Injektion).

Falls es interessiert: In der Datei inc/functions.php des MyBB findest du die Funktion multipage(), die die Seitenlisten erstellt.
Mit SQL-Injektion weiß ch zwar was gemeint ist, aber richtig kapieren tu ich nicht was der mysql_real_escape_string genau macht. Also sollte ich da, wo nur
PHP-Code:
$query mysql_query("SELECT cel1 FROM tabele WHERE cel2 = 'cel2value'"); 
steht, zu

PHP-Code:
$query mysql_query("SELECT cel1 FROM tabele WHERE cel2 = '".mysql_real_escape_string(cel2value)."'"); 
ändern?

Also ich schreib dir mal das Tutorial raus:

PHP-Code:
<?php
/* You must provide the proper database information here */
$username="<-usernam->";
$password="<-password->";
$database="<-database->";
mysql_connect(localhost,$username,$password);
@
mysql_select_db($database) or die( "Unable to select database");

// How many rows of results need to be on each page?
$rowsPerPage 5;

// If you would like to make $rowsPerPage adjustable, include this
if (isset($_GET['rowsPerPage'])) {
    
$rowsPerPage $_GET['rowsPerPage'];
}

// by default we show first page
$pageNum 1;

// if $_GET['page'] defined, use it as page number
if(isset($_GET['page'])) {
    
$pageNum $_GET['page'];
}

// Count the offset so each page will know how many rows to skip in order to get to the rows meant for each page
$offset = ($pageNum 1) * $rowsPerPage
/* You must change 'table' in the next line to suit your table */
$query  "SELECT * FROM <-tablename-> LIMIT $offset$rowsPerPage";
$result=mysql_query($query);
$num=mysql_numrows($result);
$i=0;
while (
$i $num) {
    
// Establish your variable in preparation to print your results
    
$variable1=mysql_result($result,$i,"variable1");

    
// Print variables
echo $variable1 '<BR />'
}
// We have to query the database again to count how many rows we have total
/* You must change 'id' and 'table' in the next line */
$query2   "SELECT COUNT(id) AS numrows FROM <-tablename->";
$result2  mysql_query($query2) or die('Error, query2 failed');
$row     mysql_fetch_array($result2MYSQL_ASSOC);
$numrows $row['numrows'];

// how many pages we have when using paging?
$maxPage ceil($numrows/$rowsPerPage); 
// Print page number links
$self $_SERVER['PHP_SELF'];
$nav '';
for(
$page 1$page <= $maxPage$page++) {
    if (
$page == $pageNum) {
            
$nav .= $page ";   // no need to create a link to current page
    
} else {
            
$nav .= " <a href=\"$self?page=$page&rowsPerPage=$rowsPerPage\" class='page'>$page</a> ";
    }
}

    
// creating previous and next link
    // plus the link to go straight to
    // the first and last page
    
if ($pageNum 1) {
        
$page $pageNum 1;
        
$prev " <a href=\"$self?page=$page&rowsPerPage=$rowsPerPage\" class='page'>&lt;</a> ";
         
        
$first " <a href=\"$self?page=1&rowsPerPage=$rowsPerPage\" class='page'>&lt;&lt;</a> ";
    } else {
        
$prev  '&nbsp;'// we're on page one, don't print previous link
        
$first '&nbsp;'// nor the first page link
    
}
    if (
$pageNum $maxPage) {
        
$page $pageNum 1;
        
$next " <a href=\"$self?page=$page&rowsPerPage=$rowsPerPage\" class='page'>&gt;</a> ";
        
$last " <a href=\"$self?page=$maxPage&rowsPerPage=$rowsPerPage\" class='page'>&gt;&gt;</a> ";
    } else {
        
$next '&nbsp;'// we're on the last page, don't print next link
        
$last '&nbsp;'// nor the last page link
    
}
    
// print the navigation link
echo $first $prev $nav $next $last;
// and close the database connection
mysql_close();
?>
Es geht um diese zwei Zeilen:
PHP-Code:
$rowsPerPage $_GET['rowsPerPage']; 
PHP-Code:
$pageNum $_GET['page']; 
Der Inhalt von $rowsPerPage wird so in den Query übernommen. $pageNum wird zwar noch verrechnet, aber solche Dinge müssen IMMER geprüft werden. Dem Code nach handelt es sich bei beiden Angaben um numerische Werte, dann reicht es wenn du die Daten durch intval() laufen lässt. Ansonsten wäre der Ansatz mit mysql_real_escape_string() auch möglich.
PHP-Code:
$rowsPerPage intval($_GET['rowsPerPage']); 
PHP-Code:
$pageNum intval($_GET['page']); 
Okay ich werd mir auf jeden Fall mal so n Paar Berichte über SQL-Injecktion und wie man es verhindern kann lesen. Aber danke Michael für deine Hilfe. Habs so übernommen.