Yadgar: PHP: Variablen nehmen falsche Werte an

Beitrag lesen

Hi(gh)!

Folgendes Problem: Auf einer Eingabeseite für eine Datenbanktabelle will ich eine Art vereinfachte phpmyadmin-Anzeige für die enthaltenen Datensätze (siehe angehängten Screenshot) programmieren.

Man soll sowohl mit explizit über ein HTML-Formular eingegebenen Start- und Endwerten für die Datensatznummern blättern können als auch mittel vier Links, die per GET Startwerte übergeben.

Der erste dieser Links setzt den Startwert ("offset") auf 0, der zweite zieht 10 (bzw. soviele, wie möglich sind, ohne dass der Startwert negativ wird) vom aktuellen Startwert ab, der dritte addiert 10 dazu, der vierte ermittelt die Gesamtzahl der Datensätze und zieht davon 10 ab, so dass die letzten 10 Datensätze in der Tabelle angezeigt werden.

Link Nr. 1 und 4 funktionieren einwandfrei, Link 2 und 3 aber bewirken immer nur -10 (was natürlich zu einer Fehlermeldung führt) bzw. 10 als Startwert. Aus irgendeinem Grund ist der Startwert bei jedem neuen Aufruf wieder 0! Wie kann ich der Seite beibringen, dass sie sich den letzten Wert merkt - geht das nur über eine externe Textdatei?

Hier ist der Code:

    <div style="position:absolute; width:74%; height:40%; top:0%; left:26%; padding-left:5px; background-color:#99ff99">
<?php
  if (!isset($_GET["listpos"]) || !isset($_POST["liststart"]) || !isset($_POST["listend"]))
  {
    $offset = 0;
    $range = 10;
  }
  else
  {
    if ($_POST["liststart"] < 0 || $_POST["listend"] - $_POST["liststart"] < 1)
    {
      echo "<p class='error'>Fehler: erste Datensatznummer kleiner als 1 oder größer als letzte Datensatzummer!</p>";
    }
    else
    {
      $offset = trim(htmlspecialchars($_POST["liststart"]));
      $range = trim(htmlspecialchars($_POST["listend"])) - $offset;
    }
  }
  if (isset($_GET["listpos"]))
  {
    $sql = "SELECT COUNT(*) FROM land";
    $res = $db->query($sql);
    $zeile = $res->fetch_array();
    $all = $zeile[0];
    $range == 10;
    switch ($_GET["listpos"])
    {
      case "first10":
	$offset = 0;
	break;
      case "previous10":
	$offset = $offset-10;
	echo $offset;
	break;
      case "next10":
	$offset = $offset+10;
	echo $offset;
	break;
      case "last10":
	$offset = $all-10;
	echo $offset;
	break;
    }
  }
  if ($offset < 0)
  {
    echo "Fehler: erste Datensatznummer kleiner als 1!";
  }
  else
  {
    $sql = "SELECT * FROM land LIMIT 0".$offset.", ".$range.";";
    $res = $db->query($sql);
    echo "<table>\n";
    echo "  <tr>\n";
    echo "    <th>Operationen</th>\n";
    echo "    <th>id</th>\n";
    echo "    <th>name</th>\n";
    echo "  </tr>\n"; 
    while ($zeile = $res->fetch_array())
    {
      echo "  <tr>\n";
      echo "    <td>&nbsp;</td>\n";
      echo "    <td>{$zeile['id']}</td>\n";
      echo "    <td>{$zeile['name']}</td>\n";
      echo "  </tr>\n";
    }
    echo "</table>\n";
  }
?>
      
      <form style="position:absolute; top:70%" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="POST">
	Datensätze von Nr.
	<input type="text" size="2" maxlength="2" name="liststart"> bis
	<input type="text" size="2" maxlength="2" name="listend">
	<input type="submit" value="anzeigen">
      </form>
      <p style="position:absolute; top:80%">
	<a href="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>?listpos=first10">Erste 10</a> | 
	<a href="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>?listpos=previous10">vorige 10</a> | 
	<a href="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>?listpos=next10">nächste 10</a> | 
	<a href="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>?listpos=last10">letzte 10 Datensätze</a>
      <p>
    </div>

Eingabe Tabelle land Der Screenshot: