murraene: blättern in Ergebnisliste

Das leidige Thema, ich wiess, aber ich komm einfach nicht weiter...

---------search.php----------ANFANG

<html>
  <body>
    <form action="search.php" method="post">

<?php

include "config.xxx";

if(isset($_POST['submit']) && $submit="Suchen")
{
  $erg=mysql_query(SELECT ...);
}
else
{
?>
<------Formular------>
<input type=text name=text>
<input type=submit>

<?php
}
?>

</form>
  </body>
</html
---------search.php----------ENDE

So, jetzt meine Frage:
Ich habe selbstverstaendlich mehrere Ergebnisse, moechte aber eines nach dem anderen anzeigen (vorheriges bzw. naechstes)
ABER WIE???

Vielen Dank im Vorraus fuer eure Hilfe

  1. echo $begrüßung;

    Ich habe selbstverstaendlich mehrere Ergebnisse, moechte aber eines nach dem anderen anzeigen (vorheriges bzw. naechstes)
    ABER WIE???

    Da HTTP ein zustandsloses Protokoll ist, hast du also mehrere Requests abzuarbeiten. Jeder Request fragt dabei einen Ausschnitt aus der Ergebnismenge ab. Du müsstest also dem Request mit auf den Weg geben, welcher Ausschnitt gefragt ist. Da du immer genau einen Datensaz haben möchtest, kannst du diese Angabe ohne weitere Berechnung in die LIMIT-Klausel des MySQL-Statements einfließen lassen (vorher prüfen, ob der übergebenen Wert eine Zahl ist, oder dies mit intval() sicherstellen).

    echo "$verabschiedung $name";

    1. Hello,

      Da HTTP ein zustandsloses Protokoll ist, hast du also mehrere Requests abzuarbeiten. Jeder Request fragt dabei einen Ausschnitt aus der Ergebnismenge ab.

      Wenn er nicht darauf achtet, fragt jeder Request sogar eine neue Ergebnismenge ab!

      Du müsstest also dem Request mit auf den Weg geben, welcher Ausschnitt gefragt ist. Da du immer genau einen Datensaz haben möchtest, kannst du diese Angabe ohne weitere Berechnung in die LIMIT-Klausel des MySQL-Statements einfließen lassen (vorher prüfen, ob der übergebenen Wert eine Zahl ist, oder dies mit intval() sicherstellen).

      Harzliche Grüße vom Berg
      http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau

      1. echo $begrüßung;

        Da HTTP ein zustandsloses Protokoll ist, hast du also mehrere Requests abzuarbeiten. Jeder Request fragt dabei einen Ausschnitt aus der Ergebnismenge ab.
        Wenn er nicht darauf achtet, fragt jeder Request sogar eine neue Ergebnismenge ab!

        Ja, das ist dabei einkalkuliert.

        Wenn man die Ergebnismenge ohne LIMIT abfragt und zwischenspeichert, hat man möglicherweise viele Daten im Zwischenspeicher, und der Aufbau desselben braucht gegebenenfalls eine lange Zeit. Dem Anwender vergeht nach der zweiten Seite die Lust, sich durch die Ergebnismenge zu wühlen, und diese bleibt ungenutzt im Sessionspeicher liegen, ganz zu schweigen vom unnötig großen Abfrageaufwand.

        Limitiert man die Ergebnismenge schon bei der Abfrage, so könnte sich zwischen zwei Abfragen die (unlimitierte) Menge aufgrund paralleler Bearbeitung durch andere Zugriffsberechtigte ändern. Man sieht also Datensätze bei Einfügungen doppelt oder bei Löschungen gar nicht, wenn diese Vorgänge zwischen Datenanfang (sprich: kleinster Wert einer sortierten Mengen) und aktuellem Ausschnitt passieren.

        Beide Varianten muss man im Einzelfall gegeneinander abwägen.

        echo "$verabschiedung $name";

  2. Hello,

    So, jetzt meine Frage:
    Ich habe selbstverstaendlich mehrere Ergebnisse, moechte aber eines nach dem anderen anzeigen (vorheriges bzw. naechstes)

    siehe z.B. http://selfhtml.bitworks.de --> Benutzerzähler nach IPs sortiert

    Das ist ein Beispiel für Blättern.

    Gegenfrage:
    Woraus besteht denn Deine Ergebnisliste?
    Ist es eine SQL-Abfrage?
    Dann musst Due ggf. erst einen Snapshot in der Session ablegen und kannst dann darin sowiel blättern, wie in der Datei vom Beispiel.

    Es gibt unterscheidliche Abrage-Arten

    • der vollständige Snapshot
        er friert die gesamte Ergebnismenge nebst Abfrage und allen Ergebnissen
        zum Zeitpunkt der Abfrage ein

    • der relative Snapshot
        er friert die IDs der Erbnisse nebst Abrage zum Zeitpunkt der Abfrage ein
        die Datensätze können aber ihren Inhalt noch ändern oder sogar gelöscht werden

    • die dynamische Abfrage
        sie führt die Abfrage bei jedem Request (oder Blättern) erneut durch und
        stellt durch zusätzliche Maßnahmen beim Blättern fest, welches der "vorige"
        oder der "nächste" Datensatz der Ergebnismenge bezogen auf den zuletzt angezeigten
        sein müsste. Das ist in dynamischen Datenbeständen nicht ganz leicht.

    In der Praxis mischt man daher zwei Abragetypen miteinander

    1. Übersichtsliste als vollständiger Snapshot
    2. aus der Übersichtsliste können dann die Detaildaten angefordert werden
       mit dem Status der Anforderung. Sie können daher bis zur Anforderung auch
       schon verändert oder gelöscht sein

    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau