[PHP] Seiten wechsel

Muuhmann

Lieutenant
Registriert
Sep. 2004
Beiträge
782
Hi Leute, ich schreib mir hier grad was zurecht.

Ich habe eine MySQL Tabelle die über mehrere Hundert einträge verfügt.
Ich möchte jetzt ein Formular erstellen, eine Select Box, die Abhängig von der Anzahl der Einträge alle 15 Einträge (und am ende natürlich der rest) einen <option></option>-tag einfügt mit natürlich den richtigen Attributen..

Ich glaub ich geb einfach mal was Code an:

die Select-Anweisung:
PHP:
if($_POST[page]) {
$page_cur = $_POST[page];
}
else {
$page_cur = 0;
}
$sql="SELECT * FROM $_POST[table] ORDER BY $orderby $updown LIMIT $page_cur,15";

das Formular bis jetzt:
PHP:
	<span style="font-size:12px; margin-left:40px;">Seite:</span>
	<form action="index.php?site=show" method="post" class="orderform" style="display:inline" name="page">
		<select name="page" class="form_selection">
		<?php
			$page = 1;
			$a = 0;
			for($i=1; $i <= $max; $i++) {			
				if($i == $a) {
					echo("<option value=\"$i\" ".check("$_POST[page]", "$i")." >$page</option>");
					$a = $a + 15;
					$page++;
				}					
			}
		?>
		</select>
	</form>

Das Problem ist jetzt, es werden die <option>-tags nicht ausgegeben, ich bin mir sehr sicher, dass das mit der for-schleife nciht richtig ist, weiß aber im moment keine andere methode..

desweiteren würde ich das gerne so machen, dass sobald dann die seite ausgewählt wurde, das formular abgeschickt wird.. is das irgendein JS befehl? Kenn mich da nicht so aus.. vielleicht onChange() ? Aber die richtige Syntax dafür kenn ich nich..

Hoffe ihr könnt mir helfen!

MfG, Muuhmann
 
Also - das erste was du an Informationen brauchst, ist: Wieviele Einträge gibt es insgesammt?
PHP:
$qGetNumRows = "SELECT COUNT(*) as 'Anzahl' FROM <tabelle>";
$result = mysql_query($qGetNumRows);
$anzahlZeilen = mysql_fetch_field($result,0,0);

Dann musst du wissen, wieviele Einträge du auf einer Seite anzeigst:
PHP:
$zeilenProSeite = 30;

Jetzt kannst du die Anzahl der Seiten - bzw die einzelnen Seiten ermitteln:

PHP:
$anzahlSeiten = ceil($anzahlZeilen / $zeilenProSeite);

$aktuelleSeite = (int)$_POST['page'];
if($aktuelleSeite < 1) $aktuelleSeite = 1;
if($aktuelleSeite > $anzahlSeiten) $aktuelleSeite = $anzahlSeiten;

echo '        <select name="page" class="form_selection" onchange="document.forms.page.submit()">';
for($i=1;$i<=$anzahlSeiten;$i++) {
  echo '<option value="'.$i.'" '.(($i == $aktuelleSeite) ? ' selected' : '').'>Seite '.$i.'</option>';
}
echo '        </select>';

Jetzt kannst du die Ergebnisse anzeigen:
PHP:
$offset = ($aktuelleSeite-1) * $zeilenProSeite;
$qGetRows = "SELECT * FROM <tabelle> LIMIT $offset, $zeilenProSeite";
$result = mysql_query($qGetRows);

while($zeile = mysql_fetch_assoc($result)) {
  ... ausgabe ...
}

PS: Wie immer ohne garantie ;) ist nicht getestet

Edit: Korrektur bei options
 
Zuletzt bearbeitet:
ya danke soweit ;) klappt auch, aber ich kann obwohl ich mehr als 30 einträge habe nicht mehr als Seite 1 auswählen.. ich glaube der fehler ist irgendwo hier:

PHP:
$qGetNumRows = "SELECT COUNT(*) as 'Anzahl' FROM <tabelle>";
$result = mysql_query($qGetNumRows);
$anzahlZeilen = mysql_fetch_field($result,0,0);

$anzahlZeilen gibt immer nur 1 aus...
habe übrigens mysql_fetch_field($result, 0, 0) in mysql_fetch_field($result, 0) geändert, weil sonst syntax fehler

ok habs selbst rausgefunden!

Danke für deine Hilfe enigma, hatte mir das so auch schon gedacht, habs aber nicht auf die reihe bekommen (wäre nicht auf COUNT(*) gekommen sondern habs mit mysql_num_rows versucht (das wurde aber nach dem query aufgerufen ^^))

man muss
PHP:
$anzahlZeilen = mysql_result($result,0);
verwenden.

Jetzt funktioniert nur das onChange noch nicht...

ok gelöst, ist: onchange="document.page_select.submit()"
dem form natürlich noch name="page_select" hinzufügen!
 
Zuletzt bearbeitet:
Ups. Das muss mysql_result statt mysql_fetch_field sein:

PHP:
$anzahlZeilen = mysql_result($result,0,0);

Intention: Hole 0. Feld in der 0. Zeile - sprich: Das 1. Feld in der 1. Zeile für normal-denkende Menschen.
 
Zurück
Oben