Suchfeld im Header

  • Hallo,


    ich habe auf jeder Seite/Unterseite meiner Seite oben einen Header mit einem Texteingabefeld und einem "Los"-Button.

    Code
    1. <input type="text" id="textfeld" class="eaneingabeelement" value="" placeholder="EAN eingeben..." size="60">
    2. <button id="losbutton" class="eaneingabeelement eaneingabebutton"" value="Los">Los</button>


    Gibt man in das Texteingabefeld etwas ein und drückt auf den "Los"-Button, soll zur Hauptseite index.php gewechselt, falls die Hauptseite noch nicht angezeigt wird, und sollen zu der Eingabe passende Informationen aus einer Datenbank angezeigt werden.


    Dafür habe ich das folgende Javascript geschrieben (eingebunden am Ende der Header-Datei):



    Dieses speichert zunächst die Eingabe aus dem Texteingabefeld und führt die Datei sessionvariablenspeichern.php aus, in der die Sessionvariable "ausgabe" gesetzt wird:


    PHP
    1. <?php
    2. session_start();
    3. if (isset($_POST['ausgabe'])) {
    4. $_SESSION['ausgabe'] = $_POST['ausgabe'];
    5. }
    6. ?>


    Dann wird die Hauptseite index.php geladen (da zuvor die Sessionvariable "ausgabe" gesetzt wurde, wird nicht die Begrüßung, sondern das div ausgabe_container geladen):



    Zuletzt werden die Informationen aus der Datenbank, die in filmaktualisieren.php abgefragt werden, in das div "film" der Hauptseite geladen (diese werden "nachgeladen", da beim laden der Hauptseite "losButtonGedrueckt" nicht gesetzt war und die Informationen entsprechend nicht aus der Datenbank abgefragt wurden)):



    Es klingt alles ein bisschen kompliziert und ich glaube auch, ich habe mich ein bisschen verhaspelt. Folgendes ist das Problem: Bei Klick auf den "Los"-Button werden, sofern das div "ausgabe_container" nicht bereits angezeigt wird, die Informationen aus der Datenbank nicht ausgegeben (sondern das div "leererfilm_container") und wenn das div "ausgabe_container" bereits geladen ist, werden die Informationen aus der Datenbank "des aktuellen Klicks auf den "Los"-Button" beim darauffolgenden Klick auf den "Los"-Button geladen und die Informationen aus der Datenbank des darauffolgenden Klicks beim wiederum darauf folgenden Klick geladen. Wie erhalte ich das gewünschte Verhalten?


    P.S.: An alle, die bereits meine vorherigen Posts gelesen haben: Ich habe die Struktur der Seite seit dem deutlich verändert. Die alten Posts sind also zu großen Teilen nicht mehr aktuell.

  • Wie ich das verstehe ,ist das alles umständlich.

    bei den LOS Button , würde ich ein POST request zu der index.php senden.

    Dann mit PHP den POST auslesen und deine Datenbank abfrage machen.


    Der ganze kram mit den Session speichern würde dann weg fallen.

    Vieleicht verwechsel ich gerade was, weil du nee menge Text geschrieben hast .

    Hast du das schon online zum testen ?

  • Code
    1. bei den LOS Button , würde ich ein POST request zu der index.php senden.
    2. Dann mit PHP den POST auslesen und deine Datenbank abfrage machen.


    Ich weiß nicht, ob ich dich richtig verstehe. Wie könnte das codetechnisch aussehen?


    Code
    1. Hast du das schon online zum testen ?


    Noch nicht. Und dauert auch noch etwas.


    Code
    1. Der ganze kram mit den Session speichern würde dann weg fallen.


    Das mit der Sessionvariable speichern ist auch dafür gedacht, dass bei Aktualisierung mit z.B. F5 weiterhin die Filminformationen angezeigt werden (und nicht die Begrüßung).


  • Das mit der Sessionvariable speichern ist auch dafür gedacht, dass bei Aktualisierung mit z.B. F5 weiterhin die Filminformationen angezeigt werden (und nicht die Begrüßung).

    Soll die begrüßung immer angezeigt werden und wenn man die Suche benutzt dann nicht mehr ?

    Wie auch immer , die eine Session ergibt dann ja noch ein sinn , aber das andere alle finde ich zu umständlich.

    Deine suche

    Code
    1. <form method='POST' action='index.php'>
    2. <input type="text" name="textfeld" id="textfeld" class="eaneingabeelement" value="" placeholder="EAN eingeben..." size="60">
    3. <button id="losbutton" class="eaneingabeelement eaneingabebutton" type="submit">Los</button>
    4. </form>

    Dann deine Javascript WEG

    sessionvariablenspeichern.php WEG

    index.php


    Was dann in der filmaktualisiern.php alles gemacht wird , mit dem ganzen Sessions blicke ich gerade nicht durch.


    Ich meine aber , wenn die Session ausgabe gesetzt ist , reicht das eigentlich um einen Datenbank abfrage zu machen.


    Das ist meine Meinung / mein Weg.

    Ob das besser ist ???

    Aber einfacher.

  • Zitat

    Soll die begrüßung immer angezeigt werden und wenn man die Suche benutzt dann nicht mehr ?


    Nachdem man die Suche das erste mal benutzt hat, soll die Begrüßung nicht mehr angezeigt werden. Also die Seite mit den Informationen aus der Datenbank soll immer angezeigt werden, nachdem man das erste Mal die Suche benutzt hat.


    Zitat


    Ich nehme mal an, du meinst Folgendes:



    Anders macht das für mich erstmal keinen Sinn, aber korrigier mich.


    Aber was, wenn die Seite einfach nur aktualisiert wird (z. B. F5)? Dann ist $_POST['textfeld'] nicht gesetzt und es wird fälschlicherweise die Begrüßung statt der Informationen aus der Datenbank angezeigt.


    Zitat

    Was dann in der filmaktualisiern.php alles gemacht wird , mit dem ganzen Sessions blicke ich gerade nicht durch.


    Noch kurz zu filmaktualisieren.php: Wenn der LOS-Button gedrückt wird, werden die der Textfeldeingabe entsprechenden Informationen aus der Datenbank abgerufen und in Sessionvaraiblen gespeichert. (Das geschieht nur, wenn der LOS-Button gedrückt wird.) Anschließend werden, falls vorhanden, die Informationen und falls nicht, eine Nachricht, dass keine Informationen vorhanden sind, ausgegeben. (Wird der LOS-Button nicht gedrückt, ist das das Einzige, was passiert. (z. B. bei F5)).

  • Aber was, wenn die Seite einfach nur aktualisiert wird (z. B. F5)? Dann ist $_POST['textfeld'] nicht gesetzt und es wird fälschlicherweise die Begrüßung statt der Informationen aus der Datenbank angezeigt.

    Nach der ersten Suche ist doch die Session gesetzt.

    Code
    1. $_SESSION['ausgabe']=htmlspecialchars($_POST['textfeld']);

    Solange du die nicht löscht ist sie noch da.

    Auch ein reload de Seite löscht sie nicht von alleine.


    Hat man noch keine Suche benutzt , ist die Session ja noch nicht da und die Begrüßung kommt.

    Solte in mein Code und in dein Code eigentlich so sein.

  • Wenn es nur um die f5 Taste geht , würde ich die Funktion der Taste unterbinden, und den reload selber ausführen.

    Das geht mit JS.

    Ich verstehe nur nicht warum meine F Tasten im Browser nicht funktionieren .

    Deswegen kann ich das auch nicht testen.

    Psydo Code:

    Code
    1. document.addEventListener("keydown",function(event){
    2. switch (event.keyCode) {
    3. case 116 : // 'F5'
    4. evnte.preventDefault();// dies
    5. // event.returnValue = false;// oder das
    6. location.reload();
    7. break;
    8. }
    9. })
  • Es gebe auch noch eine möglichkeit mit Php.

    Da kommen zwar gleich wieder blöde Kommentare , aber was solls.

    Einfach einmal auf der gleiche Seite umleiten.

    Code
    1. if(isset($_POST['textfeld'])){// existiert ja nur wenn man suche benutzt hat
    2. $_SESSION['ausgabe']=htmlspecialchars($_POST['textfeld']);
    3. header("location:index.php");
    4. }
  • Es gebe auch noch eine möglichkeit mit Php.

    Da kommen zwar gleich wieder blöde Kommentare , aber was solls.

    Einfach einmal auf der gleiche Seite umleiten.

    Die Idee ist durch auch ok, gleich GET zu verwenden ist aber imho sinnvoller: die Abfrage verändert keine Daten, damit ist GET die Methode der Wahl - es wird schon seinen Grund haben dass Google (andere aber auch) GET-URLs verwenden.

    $_SESSION['ausgabe']=htmlspecialchars($_POST['textfeld']);

    *das* aber ist auch Käse: das Speichern des Wertes in der Session ist kein Kontextwechsel (einer nach HTML schon gleich garnicht) womit htmlspecialchars() hier falsch ist - die Funktion darf erst verwendet werden wenn der Wert tatsächlich im HTML an den Browser geschickt wird.

  • die Funktion darf erst verwendet werden wenn der Wert tatsächlich im HTML an den Browser geschickt wird.

    Ok , das wußte ich auch noch nicht,danke.


    Wenn man diesen Code

    PHP
    1. if(isset($_POST['textfeld'])){
    2. $_SESSION['ausgabe']=htmlspecialchars($_POST['textfeld']);
    3. }
    4. if(isset($_SESSION['ausgabe'])){
    5. // mach was mit $_SESSION['ausgabe']
    6. }

    so machen würde

    PHP
    1. if(isset($_POST['textfeld'])){
    2. $variable=$_POST['textfeld'];
    3. $_SESSION['ausgabe']='true';
    4. }
    5. if(isset($_SESSION['ausgabe']) and $_SESSION['ausgabe']=='true'){
    6. // mach was mit $variable
    7. }

    der bessere Weg

  • Wenn man diesen Code … so machen würde … der bessere Weg

    Nein. $variable existiert nur wenn das Formular abgeschickt wurde, die Daten sollen aber ja auch bei späteren Aufrufen der Seite noch existieren weswegen die erste Variante schon richtig ist, nur eben ohne htmlspecialchars (bzw. erst im zweiten if-Block bei der Ausgabe).

    Und warum eigentlich $_SESSION['ausgabe']='true'; und nicht $_SESSION['ausgabe']=true;?