Tutorials von Thomas Frei-Herrmann

[Start] [MySQL] [Connector] [Iterator] [Navigator] [Beschriftung] [Datum] [Bild] [Link] [IF] [Hinzugefügt] [Hinzufügen] [Geändert] [Ändern] [Gelöscht] [Löschen] [Mail] [Suchen] [Ergebnis]
[Drucken]

Datenbank NOF-PHP

Ergebnisse der Suche nach Datensätzen

 

Unten mal zunächst die Seiten-Ansicht meiner Ergebnis-Seite result.php.

... nun klicken wir auf den Connector und erstellen unter "Datensatzgruppe" eine neue Gruppe, die ich hier mitgliedsuchen genannt habe und klicken anschließend auf den Button Bearbeiten. Der Iterator dieser Seite sowie sämtliche Felder müssen auf dieser Ergebnis-Seite nun der neuen Datensatzgruppe mitgliedsuchen zugeordnet sein. Hierfür alle Felder anklicken und im Eigenschaften-Editor diese Datensatzgruppe auswählen.

... nun müssen wir noch die Variablen gründen nach denen die Datenbank durchsucht werden soll und die wir auf der Seite Suchen mit dem Werkzeuge-Formular eingegeben hatten.

Da hier über die gesamte Datenbank gesucht werden soll, verwenden wir also die Option "Form" und hängen den Variable-Namen hinten dran. Dabei müssen diese Variable-Namen exakt so geschrieben werden wie das Eingabefeld auf der Seite Suchen heißt (auch auf Groß- und Kleinschreibung achten).

Anschließend wählen wir die so gegründeten benutzerdefinierten Variablen und schieben sie durch Klick auf das Plus-Zeichen in das rechte Feld des Datensatzguppen-Fensters. Also z.B.:

Vorname ist gleich Form.Vorname

heißt dann soviel wie:

Das Feld Vorname aus der Seite Suchen wurde an die Ergebnis-Seite "result.php" übergeben und wird nun mit dem Datensatz-Feld Vorname über die gesamte Datenbank verglichen.

Kommt es zu einer Übereinstimmung, dann wird ein Datensatz gefunden. Die Verbindung mit der Option ODER bewirkt, dass z.B. nur der Vorname ODER der Name ODER der Ort usw. auf der Seite Suchen eingegeben werden kann oder eben auch alles kombiniert. Je nachdem welche Kriterien bei der Eingabe relevant für die Suche sein sollen.

An dieser Stelle könnte man z.B. auch anstelle von der Option "ist gleich" dann "enhält" (like) verwenden, um nur Teile eines Feld-Inhaltes zu suchen. Dazu ist aber Voraussetzung, dass bei der Eingabe auf der Seite Suchen auch sämtliche Felder beschrieben werden. Würde ein Feld leer bleiben, dann würde die Suche alle Datensätze der Datenbank finden und anzeigen.

Jetzt wollte ich noch eine gesonderte Anzeige auf meiner Ergebnis Seite falls kein Datensatz gefunden
wird. Daher musste ich das Ergebnis der Suche in eine IF Bedingung legen, wie oben im Foto der Seiten -
Ansicht zu sehen ist.

Die IF Bedingung lautet wie folgt und ist unten im Foto zu erkennen.

mitgliedsuchen.Name ist nicht leer Form.Name

das bedeutet, dass die Varibale Name der Gruppe mitgliedsuchen nicht leer (also beschrieben ist) im gefundenen Datenbank Feld Name ist.

Falls es jemanden interessiert, wie ich auf meiner Ergebnis Seite oben die Benutzer Eingabe der Felder von der Suchen Seite anzeige, hier noch eine kurze Erklärung.

Ich habe ein Textfeld für jedes Eingabe-Feld aufgezogen und dort in den Code-Editor (siehe Bild unten) folgenden PHP-Code eingetragen, der mit einer IF-Bedingung überprüft, ob überhaupt eine Eingabe stattgefunden hatte.

<?php
          if (isset($_POST['Name']) && trim($_POST['Name'])<>"")
         {
               $name = $_POST['Name'];
               echo "<font color='#0000FF'>$name</font>";
         } else {
               echo "<font color='#FF0000'>keine Eingabe</font>";
         }
?>

... jetzt wollt ich noch ausschließen, dass jemand bei der Eingabe auf der Suchen Seite vielleicht versehentlich ein oder mehrere Leerzeichen vor einer Eingabe schreibt und dann auf den gesamten String, inklusive Leerzeichen, in der Datenbank gesucht wird und natürlich dann nichts gefunden wird.

Also habe ich die POST Variablen noch mit dem Befehl TRIM versehen um diese Variablen umzusetzen und den gesamten Code ganz vorne auf meiner Ergebnis Seite kopiert.
Achtet darauf, dass da keine Leerzeile vor dem Code ist.

> Auf das Layout klicken > Fenster Layout Eigenschaften > Button HTML > Beginn der Seite einfügen

<?php
          $_POST['Name']=trim($_POST['Name']);
          $_POST['Vorname']=trim($_POST['Vorname']);
          $_POST['Strasse']=trim($_POST['Strasse']);
          $_POST['Ort']=trim($_POST['Ort']);
          $_POST['Land']=trim($_POST['Land']);
?>

nach oben

 

Ergebnis auf mehreren Seiten anzeigen:

Solltet Ihr die Suchergebnisse auf eine bestimmte Anzahl pro Seite beschränken wollen, dann müsst Ihr anstelle der POST-Variablen SESSION-Variablen auf der Ergebnis-Seite gründen, warum habe ich bereits auf der Tutorial-Seite “Suchen” erklärt.

Daher fügt Ihr anstelle des Codes (oben) diesen Code hier im > Beginn der Seite ein, mit dem ich die POST-Variablen in SESSION-Variablen umwandele.

Dafür habe ich auch das “verdeckte Feld” “action” im Formular erstellt, um hier mit einer IF-Bedingung festzustellen, ob dieser Aufruf direkt vom Formular kommt oder nicht, denn nur dann sollen die
SESSION-Variablen auch neu gegründet werden, sonst sollen sie erhalten bleiben.

<?php

  // SESSION öffnen

  session_start();

  // SESSION-Variablen nur ändern, wenn der Aufruf dieser Seite
  // vom Suchen-Formular kommt, was durch das verdeckte Feld "action"
  // erkannt wird.

  if (isset($_POST['action']) && ($_POST['action']=='send'))
    {


      // mittels "trim" Befehl eventuelle Leerzeichen entfernen

      $_POST['Name']=trim($_POST['Name']);
      $_POST['Vorname']=trim($_POST['Vorname']);
      $_POST['Strasse']=trim($_POST['Strasse']);
      $_POST['Ort']=trim($_POST['Ort']);
      $_POST['Land']=trim($_POST['Land']);

      // Umsetzen der SESSION-Variablen
      // mit den Feldinhalten des Suchen-Formulars

      $_SESSION['Name']=$_POST['Name'];     
      $_SESSION['Vorname']=$_POST['Vorname'];
      $_SESSION['Strasse']=$_POST['Strasse'];
      $_SESSION['Ort']=$_POST['Ort'];
      $_SESSION['Land']=$_POST['Land']; 
  
    }
 
?>

... nun brauchen wir natürlich, um auf die neuen SESSION-Variablen zurückgreifen zu können, eine neue Datensatzgruppe (hier “mitgliedsuchseite”), in der wir zunächst sämtliche SESSION-Variablen gründen.

Dazu fügen wir in diese neue Datensatzgruppe wieder die Felder unserer Datenbank ein und gründen bei “Benutzerdefinierte Variable ...” alle unsere SESSION-Variablen, wie im Bild unten zu erkennen.

Also für jeden, für die Suche relevanten, Feld-Namen eine SESSION-Variable, die ich dann für die Suche wieder mit einer “ODER” Bedingung verknüpft und hier auf “ist gleich” gesetzt habe, also der Eingabe Begriff im Feld meines Suchen-Formulars muss exakt gleich mit dem Datensatzfeld meiner Datenbank sein.

nach oben

 

Suchen auf enthält:

bei meiner “Suchen-Option 3”, lasse ich in der Datenbank nach Eingaben aus dem Suchen-Formular suchen, die nur einen Teil des korrekten Namens finden, also z.B. könnte man beim Feld “Stadt” lediglich
“lin” anstatt “Berlin” eingeben und alle Datensätze mit der Stadt “Berlin” würden dennoch gefunden.

Daher fügt Ihr dann (anstelle der anderen gezeigten Codes oben) diesen Code hier im > Beginn der Seite ein, mit dem ich die POST-Variablen in SESSION-Variablen umwandele. Lest bitte auch unten im Code meine Kommentare für ein besseres Verständnis.

<?php

  // SESSION öffnen

  session_start();

  // SESSION-Variablen nur ändern, wenn der Aufruf dieser Seite
  // vom Suchen-Formular kommt, was durch das verdeckte Feld "action"
  // erkannt wird.

  if (isset($_POST['action']) && ($_POST['action']=='send'))
    {

      // mittels "trim" Befehl eventuelle Leerzeichen entfernen

      $_POST['Name']=trim($_POST['Name']);
      $_POST['Vorname']=trim($_POST['Vorname']);
      $_POST['Strasse']=trim($_POST['Strasse']);
      $_POST['Ort']=trim($_POST['Ort']);
      $_POST['Land']=trim($_POST['Land']);

      // SESSION Variablen gründen für Abfrage mit "enthält" ("LIKE")
      // damit diese einen Wert erhalten, den es nicht gibt, habe ich diese
      // "emptyemptyempty" genannt

      $_SESSION['Name']='emptyemptyempty';
      $_SESSION['Vorname']='emptyemptyempty';
      $_SESSION['Strasse']='emptyemptyempty';
      $_SESSION['Ort']='emptyemptyempty';
      $_SESSION['Land']='emptyemptyempty';

      // Umsetzen der SESSION-Variablen
      // mit den Feldinhalten des Suchen-Formulars

      if(!empty($_POST['Name'])) $_SESSION['Name']=$_POST['Name'];
      if(!empty($_POST['Vorname'])) $_SESSION['Vorname']=$_POST['Vorname'];
      if(!empty($_POST['Strasse'])) $_SESSION['Strasse']=$_POST['Strasse'];
      if(!empty($_POST['Ort'])) $_SESSION['Ort']=$_POST['Ort'];
      if(!empty($_POST['Land'])) $_SESSION['Land']=$_POST['Land'];
     
    }
 
?>

... nun brauchen wir auch hier wieder eine neue Datensatzgruppe, um auf die SESSION-Variablen zurückgreifen zu können, in der wir zunächst sämtliche SESSION-Variablen gründen.

Dazu fügen wir in diese neue Datensatzgruppe wieder die Felder unserer Datenbank ein und gründen bei “Benutzerdefinierte Variable ...” alle unsere SESSION-Variablen (falls noch nicht geschehen).

Also für jeden, für die Suche relevanten, Feld-Namen eine SESSION-Variable, die ich dann für die Suche wieder mit einer “ODER” Bedingung verknüpft und hier im Gegensatz zu dem letzten Beispiel oben,
enthält” gesetzt habe, also der Eingabe Begriff im Feld meines Suchen-Formulars muss nicht exakt gleich mit dem Datensatzfeld meiner Datenbank sein, sondern es genügt wenn nur Teile des Begriffs im jeweiligen Datensatzfeld enthalten sind.

like

... zum Schluss müssen wir natürlich darauf achten, dass dann sämtliche Objekte, wie z.B. die “Iteratoren”, “Beschriftungen”, “IF-Bedingungen”, “Fotos” oder was auch immer dieserDatensatzgruppe” zugeordnet sind und eben alle verwendeten Objekte auf diese Datensatzgruppe verweisen.

nach oben

 

Zählen von Datensätzen:

Nun wollte ich noch auf verschieden Art und Weise die gefundenen Datensätze zählen. Ich habe hier drei verschiedene Zähler eingesetzt:

1.) eine Variable, die ich “$mzaehler” genannt habe, um sämtliche Datensätze zu zählen,
die innerhalb desIterators” auf jeder Seite erscheinen (siehe die beiden folgenden Bilder unten).

2.) Eine neue Datensatzgruppe “Counter” gegründet, der ich lediglich über den “Experten Modus” den unten stehenden “count” (zähl) Befehl gegeben habe, um alle Datensätze meiner gesamten Datenbank zu
zählen. Hier auf das Datenfeld “ID” in eine Variable, die ich “ANZAHL” genannt habe.

SELECT count(ID) as ANZAHL FROM Mitglieder

3.) Jeweils noch eine neue Datensatzgruppe gegründet für die beiden “Suchen-Ergebnisse”, die auf mehreren Seiten angezeigt werden sollen, für die Anzahl der gesamt gefundenen Ergebnisse auf allen angezeigten Seiten. Hier muss ich dann zunächst wieder die gleichen Such-Optionen, im Bild unten sind das “ODER” und “enthält”, angeben wie bei der Suche selbst, denn nur diese (gefundenen) Datensätze solle ja gezählt werden.

... nachdem ich die Suchen-Optionen (wie oben im Bild) eingestellt habe, wechsele ich in den
“Experten-Modus” um diese SQL-Befehle mit meinem “Count-Befehl” zu verbinden (siehe Bild unten).

Zunächst steht dort am Beginn des Codes noch ...

SELECT  FROM

... was ich dann mit meinem “Count-Befehl” ergänze, wobei der * für alle Datensätze steht. Hier also auf alle Datensätze in eine Variable, die ich “ANZAHLLIKE” genannt habe.

SELECT count(*) as ANZAHLLIKE FROM

count005

Nun muss ich nur noch ein “Beschriftungs-Objekt” an der Stelle einsetzen, wo die Zahl der gefundenen Datensätze erscheinen soll und dort als Datenfeld die Variable, auf die ich gezählt habe, auswählen.

nach oben

Viel Erfolg!

<< zurück zu “Suchen”

weiter zu “Drucken” >>

diese Seite weiter empfehlen



Counter Statistik