Gewisse Anzahl Daten auslesen aus MySQL

syntraxx

Mitglied
Hallo Zusammen

Ich möchte folgendes in meinen Skript noch einbauen:
- nach dem letzten Datensatz sollen 2 Links sein: einer der die nächsten 5 Datensätze ausliest und einer der die vorigen 5 Datensätze ausliest
- Es soll aber nur eine Seite programmiert werden, also genau so bleiben, wie es im Moment ist

Kann mir da jemand helfen?

Hier der Code:

PHP:
<?php
$db = "database";
$link = mysql_connect( "server", "user", "pass" );
mysql_select_db( $db );

$query = "SELECT  * FROM produkte";

$result = mysql_query($query);

while( $zeile = mysql_fetch_array($result, MYSQL_NUM) ) {

// Tabelle ausgeben mit Formular

print ('
<form action="reg_cart.php" method="post">
<table width="600" border="0">
  <tr>
	<td width="70"><input type="text" name="artikelnummer" size="8" disabled value="'.$zeile[1].'"></td>
	<td width="260">'.$zeile[2].'</td>
	<td width="40">CHF</td>
	<td width="60">'.$zeile[3].'</td>
	<td width="30"><input type="text" size="4" name="anzahl" value="1"></td>
	<td width="140"><input type="submit" value="In Warenkorb legen"></td>
  </tr>
</table>
<input type="hidden" name="artikel" size="8" value="'.$zeile[1].'">
</form>
');

// Ende der Ausgabe
}

mysql_close();
?>
 
Erst einmal werden Datenbanken abgefragt und nicht ausgelesen. Daher heißt es auch „Datenbankabfrage“ und nicht „Datenbankauslese“.


Probier mal Folgendes:
PHP:
<?php

	$db = "database";
	$link = mysql_connect( "server", "user", "pass" );
	mysql_select_db( $db );

	$offset = ( isset($_REQUEST['offset']) && intval($_REQUEST['offset']) >= 0 )
		?	intval($_REQUEST['offset'])
		:	0;
	$row_count = ( isset($_REQUEST['row_count']) && intval($_REQUEST['row_count']) > 0 )
		?	intval($_REQUEST['offset'])
		:	5;

	$query = "
		SELECT
		        COUNT(*) as `row_count_total`,
		        `spalte1`,
		        `spalte2`,
		        `spalte3`
		  FROM
		        `produkte`
		  LIMIT
		        ".$offset.", ".$row_count."
		";

	$result = mysql_query($query);

	while( $zeile = mysql_fetch_array($result, MYSQL_ASSOC) ) {

	// Tabelle ausgeben mit Formular

?>
	<form action="reg_cart.php" method="post">
		<table width="600" border="0">
			<tr>
				<td width="70"><input type="text" name="artikelnummer" size="8" disabled value="<?php echo $zeile['spalte1']; ?>"></td>
				<td width="260"><?php echo $zeile['spalte2']; ?></td>
				<td width="40">CHF</td>
				<td width="60"><?php echo $zeile['spalte3']; ?></td>
				<td width="30"><input type="text" size="4" name="anzahl" value="1"></td>
				<td width="140"><input type="submit" value="In Warenkorb legen"></td>
			</tr>
		</table>
		<input type="hidden" name="artikel" size="8" value="<?php echo $zeile['spalte1']; ?>">
	</form>
<?php
	// Ende der Ausgabe
	}

	if( $offset-$row_count >= 0 ) {
		echo '<a href="?offset='.($offset-$row_count).'">? vorherigen '.$row_count.' Einträge</a>';
	}
	if( $offset+$row_count <= $row_count_total ) {
		echo '<a href="?offset='.($offset+$row_count).'">nächsten '.$row_count.' Einträge ?</a>';
	}

	mysql_close();

?>
 
Zuletzt bearbeitet:
Außerdem solltest du dir im Klaren darüber sein, dass die Indizes eines numerischen Arrays nicht bei 1 sondern bei 0 beginnen.
 
Tim Comanns hat gesagt.:
Außerdem solltest du dir im Klaren darüber sein, dass die Indizes eines numerischen Arrays nicht bei 1 sondern bei 0 beginnen.

Ja danke. Das war ich mir schon im klaren. Du meinst wohl, weil ich nicht alle Datensätze aus einer Zeile auslesen bräuchte. Oder?!
 
@ GUMBO....

Danke für deine Hilfe. Habe noch einige Parse Fehler gefunden, aber trotzdem herzlichen Dank. Der Grundgedanke stimmt so, aber das Problem ist doch jetzt, wenn ich mehr als nur 10 Einträge habe. Wenn ich nur 10 darstellen muss geht das super, aber ich müsste zu 100% flexibel sein, also wenn ich x Datensätze habe, muss ich ja uf der 2. Seite die möglichkeit haben entweder die letzten y datensätze zu betrachten, oder eben allenfalls wieder die nächsten y. Also in dem Beispiel mit 5 Dazensätzen pro Seite würde das auf der 2. Seite heissen ich möchte Datensatz 10 - 15 betrachten. Kannst du mir da eventuell nochmals helfen
 
Danke gumbo. Aber es hatte noch einen Fehler drin. Das mit dem
PHP:
 count(*) as 'row_count_total'
hat nicht funktioniert. Ich habe es jetzt mit mysql_count_rows gemacht in einer eigenen Abfrage.
PHP:
 $query2 = mysql_query("SELECT * FROM produkte", $link);
$row_count_total = mysql_num_rows($query2);
Jetzt gehts es tadellos.
Aber danke für deine mithilfe. Wäre sonst nicht so weit gekommen. :-)
 
Wie du's notiert hast, ist es auch kein Wunder, dass es nicht funktioniert. Ersetze mal das * durch den Bezeichner des Primärschlüssels.
 
Gumbo hat gesagt.:
Wie du's notiert hast, ist es auch kein Wunder, dass es nicht funktioniert. Ersetze mal das * durch den Bezeichner des Primärschlüssels.

hmmm...

ohne das jetzt getestet zu haben, ich glaube nicht, dass der Count() min() max() ohne group by in diesem Statement funkionieren, zumindest nicht bei meiner Version. :( Und group by macht ja keinen Sinn. :)
 
Zurück