Beiträge: 868
Themen: 53
Registriert seit: 24.08.2007
21.06.2008, 17:46
(Dieser Beitrag wurde zuletzt bearbeitet: 21.06.2008, 22:14 von Manuel.)
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
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.
Gruß Manuel
Bitte erst die
Suche und die
Doku benutzen.
Beiträge: 25.766
Themen: 269
Registriert seit: 20.09.2005
Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Beiträge: 868
Themen: 53
Registriert seit: 24.08.2007
21.06.2008, 22:13
(Dieser Beitrag wurde zuletzt bearbeitet: 21.06.2008, 22:14 von Manuel.)
Ä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
Gruß Manuel
Bitte erst die
Suche und die
Doku benutzen.
Beiträge: 18.383
Themen: 257
Registriert seit: 09.02.2005
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.
Gruß,
Michael
Support erfolgt NUR im Forum!
Bitte gelöste Themen als "erledigt" markieren.
Beiträge mit mangelhafter Rechtschreibung/Grammatik werden kommentarlos gelöscht.
Beiträge: 868
Themen: 53
Registriert seit: 24.08.2007
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($result2, MYSQL_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'><</a> ";
$first = " <a href=\"$self?page=1&rowsPerPage=$rowsPerPage\" class='page'><<</a> ";
} else {
$prev = ' '; // we're on page one, don't print previous link
$first = ' '; // nor the first page link
}
if ($pageNum < $maxPage) {
$page = $pageNum + 1;
$next = " <a href=\"$self?page=$page&rowsPerPage=$rowsPerPage\" class='page'>></a> ";
$last = " <a href=\"$self?page=$maxPage&rowsPerPage=$rowsPerPage\" class='page'>>></a> ";
} else {
$next = ' '; // we're on the last page, don't print next link
$last = ' '; // nor the last page link
}
// print the navigation link
echo $first . $prev . $nav . $next . $last;
// and close the database connection
mysql_close();
?>
Gruß Manuel
Bitte erst die
Suche und die
Doku benutzen.
Beiträge: 18.383
Themen: 257
Registriert seit: 09.02.2005
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']);
Gruß,
Michael
Support erfolgt NUR im Forum!
Bitte gelöste Themen als "erledigt" markieren.
Beiträge mit mangelhafter Rechtschreibung/Grammatik werden kommentarlos gelöscht.
Beiträge: 868
Themen: 53
Registriert seit: 24.08.2007
22.06.2008, 01:42
(Dieser Beitrag wurde zuletzt bearbeitet: 22.06.2008, 01:42 von Manuel.)
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.
Gruß Manuel
Bitte erst die
Suche und die
Doku benutzen.