Suche erstellen, Probleme mit $_GET und template system

  • Hallo liebe Leute,


    Seit ungefähr 2 1/2 Monaten beschäftige ich mit dem Erstellen meiner eigener Website. Allgemein bringe ich mir alles selbst bei. Aus diesem Grund fehlt mir oftmals das richtige verständnis für Abläufe und Ähnliches.
    Mein jetziges Problem ist, dass ich eine "Suche" für meine Website erstellen möchte. Ich möchte aber nicht meine komplette Website nach Inhalten durchsuchen. Ich möchte auf einer meiner Seiten einen Suchbegriff eingeben lassen und möchte im Prinzip die gleiche Seite ([Design etc.] Muss aber nicht die gleiche HTML-Seite sein) mit den jeweiligen Inhalten des Begriffs ausgeben lassen. Es geht bei diesen Inhalten um Grammatik-Inhalten. Also der User such nach einem Wort und es erscheinen die Inhalte die zugehörig zu diesem Wort sind. Die sollte sich mit einem Formular und der Methode $_GET realisieren lassen. Mir wäre es auch recht, das mit $_POST zu machen.
    Nun zu meinem Verständnisproblem:
    Ich benutze für meine Website ein template-System. Eine Index.php regelt, was für Inhalte in die template.html "eingetragen" werden und gibt die jeweilige HTML aus (URL sieht so aus: http://simon-no-japan.de/?p=japanisch_grammatik). Nun weiß ich nicht, wie ich diese Suche gestalten soll, da ich überall lese, dass man die Daten die vom Formular aus mit $_GET gesendet werden an eine weiter PHP senden muss, z.B. suche.php. Somit verlasse ich aber mein Template-System, oder? Irgendwie fehlt es mir in dieser Hinsicht an dem Verständnis wie hier gearbeitet werden sollte.


    Vielen Dank schonmal im Vorraus!
    Liebe Grüße,
    Simon P.

  • Nun weiß ich nicht, wie ich diese Suche gestalten soll, da ich überall lese, dass man die Daten die vom Formular aus mit $_GET gesendet werden an eine weiter PHP senden muss, z.B. suche.php. Somit verlasse ich aber mein Template-System, oder? Irgendwie fehlt es mir in dieser Hinsicht an dem Verständnis wie hier gearbeitet werden sollte.


    Du kannst eine andere PHP-Datei ansprechen, musst es aber nicht.


    Du nutzt ja (logisch) ein Formular (<form>).
    Und bei diesem Element gibtst Du ein attribute "action" an.

    HTML
    <forum name="" action="" >
    </form>


    Hier ist action leer. Also würde das Formular sich selbst aufrufen.


    Angenommen die Anfrage kommt über die index.php,
    dann:

    HTML
    <forum name="" action="" > <!-- ruft beim absenden auf sich selbst auf (also index.php) -->
    </form>
    
    
    
    
    <forum name="" action="auswertung.php" > <!-- ruft beim absenden auf auswertung.php -->
    </form>


    Wenn Du nun alles über die index.php laufen lassen möchtest, dann nutzt Du einfach diese.
    Bei Dir wird wohl das Routing über ?p= erledigt.
    Wenn Du also eine Suche auswerten möchtest, könnte der Link zur Auswertung in etwa so aussehen: http://simon-no-japan.de/?p=suche

  • Danke dir schonmal für deine Antwort. Leider hat es mir nicht viel weitergeholfen. Ich bin noch am rumprobieren und eine Frage flammte in mir auf. Wie ist der Ablauf von PHP? Wenn ich mir meine Index.php so anschaue dürfte sie fast nicht richtig funktionieren, wenn PHP bei jeder Anfrage den Quelltext nur einmal von oben nach unten abläuft.

  • Dafür müssten wir dann die index.php sehen.
    Aber im Grunde läuft das von oben nach unten, ja. Allerdings kann sich "Code selber aufrufen" und daher auch "gesprungen" werden. Bestes Beispiel: Funktionsdefinition in Zeile 5. Funktionasaufruf in Zeile 20. Ablauf springt von 20 nach 5, läuft durch die Funktion und sprongt zurück zu 20.

  • Okay, ich lege mal die Karten auf den Tisch:



    Bei der Verzweigung (if array_key_exists ...) dürfte die "else" nicht wirklich sinnvol sein, bzw. funktionieren, weil er ja nichts in die Variablen $contents, $nav, $head einfügt oder? Außer er springt im Quellcode.


    Naja aber mal zurück zu meinem Problem... ich habe einfach keine Ahnung, wie ich mein Problem mit der Suche jetzt gestalten soll. Ich weiß nicht, wie ich meine Inhalte nun auf meiner Seite (http://simon-no-japan.de/index.php?p=japanisch_grammatik) dort einfügen kann. Ich hatte auch teilweise Hilfe bei der index.php, aber habe den Ablauf verstanden.
    Mein Problem ist, die $_GET Methode. Irgendwie hats da noch nicht klick gemacht. Ich stehe dort total auf dem Schlauch. Jemand ein Tipp, wie ich die Suche aufbauen könnte?



    Grüße,
    Simon P.

  • So wie ich das sehe:
    gibt es in der url (also in $_GET) eien Schlüssel "p" und existiert der Schlüssel im array $pages,
    dann wird der Wert - die Datei - eingebunden.


    PHP
    $pages = array(
        'kontakt' => 'kontakt.html',
        // ... usw usw
        // neue seite dazu:
        'neue_seite' => 'datei_zu_neuer_seite.html'
    );


    Die Datei dürfte dann wohl als Template genutzt werden.


    Das Problem: es werden nur .html genutzt.
    Selbst Wenn Du eine .php Datei nutzen würdest - PHP würde nicht ausgeführt werden.
    Das System lädt die Dateien (Seiten) "als Text", und nicht als ausführbaren code.


    Man könnte jetzt:
    array erweitern (nur dort, wo auch eine .php gebraucht wird)

    PHP
    $pages = array(
        'kontakt' => 'kontakt.html',
        // ... usw usw
        // neue seite "suche" dazu:
        'neue_seite' => array(
            'require' => 'suche.php',
            'template' => 'suche.html',
        )
    );


    und weiter unten:


    Natülich ungetestet, da ich nicht weißm wieso hier mehrmals die gleichen .html Dateien gelesen werden und ich auch nicht weiß was da drin steht.


    BTW:

    Zitat

    // Bei jeder Anfrage wir die if-Schleife überprüft.


    If ist keine Schleife =)

  • Okay, danke dir. Muss ich jetzt erstmal nachvollziehen.


    Zitat


    Natülich ungetestet, da ich nicht weißm wieso hier mehrmals die gleichen .html Dateien gelesen werden und ich auch nicht weiß was da drin steht.


    Mehrmals eingelesen wird die HTML Datei, weil sie "beschnitten wird". Damit in jeder Variable $nav, $head, $contents das steht, was aus der HTML Datei, die vorher eingelesen wurde, vom auschneiden ürbig bleibt. Dazu dient dieser Quelltext.



    in einer HTML steht dann z.B. sowas:



    So, ich muss deine Antwort erstmal mit dem Array nachvollziehen, so auf dem ersten Blick hab ich einen Knoten im Kopf.


    Danke vielmals für die Mühe!

  • Alles klar.
    also hast Du da drin - also zB in der kontakt.html - mehrere Templates in einem,
    aber das eigtl Template - das grundgerüst - liegt in './pages/template.html' (?)


    Ist denn zw <!-- MAINaf --> und <!-- MAINe --> immer der Seiteninhalt?
    Ich glaube, was ich Dir heschrieben hab ist zu "umständlich". Wenn ichs richtig verstanden hab, dann geht es auch einfacher.
    Wenn Du willst schreib ichs mal um =)

  • Ja, das Grundgerüst ist die "template.html" in die werden dann die "beschnittenen" Inhalte eingesetzt. Ich habe meine Suche jetzt ... hinbekommen... ob das so schön ist, weiß ich selbst noch nicht, jedenfalls wird es ziemlich voll in meiner Index.php, wenn ich das weiterhin so mache, die Sieht jetzt dann so aus.



    Wirklich gefallen tut es mir nicht, aber es erfüllt seinen Zweck. Ich lads gleich mal auf meiner Website hoch. Du kannst es dann mit den Suchbegriffen "aru" und "da" dann mal testen, wenn du möchtest. Aber so richtig als Lösung finde ich das zu... schlecht, irgendwie. Wie gesagt, ich habe da irre Probleme, das in meine Logik, immer mein Template-System dazwischen funkt.


    Edit: Ja, zwischen <!-- MAINaf --> und <!-- MAINe --> ist immer der Seiteninhalt. Zwischen <!-- NAVaf --> und <!-- NAVe --> ist immer die linke Navigation und zwischen <!-- HEADaf --> und <!-- HEADe --> ist immer der Head mit den <meta> Inhalten, ich weiß nicht ob ne Suchmaschine das so verarbeiten kann, aber von den <meta> hab ich bis jetzt noch keine Ahnung, da muss ich mich noch zu einlesen.

  • Du brauchst ja kein extra array.
    Du kannst ja neue Seiten in dem $pages array anlegen.
    Allerdings sind das alles .html Dateien. Heißt: es wird kein PHP ausgeführt, wenn es auf dem Server nicht anderes eingerichtet ist.


    Ich weiß ja nicht was oder wie Du suchen möchtest. aber sobald Du PHP nutzen möchtest, sollte die einzubindende Datei eine .php Datei sein und mit include oder require eingebunden werden.
    Ich guck mir das morgen nochmal an.

  • PHP
    $pages = array(
            'suche' => 'suchfunktion.php',
            [...]


    In der Suchhfunktion.php müsstest du dann als Seiten durchsuchen, schaluer wäre es sowas hier zu haben

    PHP
    $keywords = array(
        'kontakt' => '#kontakt#benachrichtigen',
        'home'    => '#startseite#keyword',
        'animes'  => '#anime#sth
       //Und so weiter
    );


    Und dann in der Suchfunktion dieses Array nach dem gesuchten Wort zu durchsuchen und dann die dazugehörige Seite zeigen

  • Vielen Dank für die zahlreichen Antworten!


    Leider glaube ich, dass ich mich wiedermals (-_-) nicht richtig ausgedrückt habe, weswegen es zu missverständnissen kam. Ich möchte keine Suche auf meiner Website, die nach einem Wort auf meiner gesamten Website sucht und dann die jenige HTML-Seite aufruft, sondern ich möchte nur eine Suche, so wie sie hier ist ( http://simon-no-japan.de/?p=japanisch_grammatik ). Problem an der Sache ist, dass die Suche relativ schlecht ist. Gibt der Benutzer nicht -exakt- das Wort ein, was ich in meinem Array...



    ...als Schlüssel definiert habe. In wie weit eine externe PHP von Vorteil wäre weiß ich nicht. Ich hätte halt gerne eine Seite, die "ähnliche" Suchergebnisse anzeigt (ähnlich zu dem, was er eingegeben hat). Leider stellt sich bei mir, in der Logik, auch das Problem, dass wenn ich den Besucher auf eine andere PHP leite, dass doch das ganze Design mit template-System, sozusagen, nicht mehr vorhanden ist. Somit müsste ich in die neue PHP, mein Template-System auch wieder integrieren oder? Ander ist das natürlich, wenn ich eine PHP includiere.
    Kurze Frage nebenbei: Gibt es eine Möglichkeit, einem Wert einem Array (siehe oben z.B. aru!arimasu.html) mehrere Schlüssel zuzuweisen ohne jeden einzelnen, so wie oben, zuweisen zu müssen? (Mit einer Klammer oder so, hat bei mir bis jetzte nicht funktioniert)


    Grüße,
    Simon P.

  • Du kannst mit php die ähnlichkeit eines englischen wortlautes mit einem anderen vergleichen...
    Martin und Marion sind zu einem gewissen % teil ähnlich.. allerdings wirst du nicht um deine Keywords heruumkommen

    Zitat

    Kurze Frage nebenbei: Gibt es eine Möglichkeit, einem Wert einem Array (siehe oben z.B. aru!arimasu.html) mehrere Schlüssel zuzuweisen ohne jeden einzelnen, so wie oben, zuweisen zu müssen? (Mit einer Klammer oder so, hat bei mir bis jetzte nicht funktioniert)

    Ja wenn du mein Besipiel Array anschauen würest, würdets du sehen das sie einzelnen schlüsselworte durch # bzw @ getrennt da drin stehen..? ^^

    Das kommt beides aufs gleiche hinaus


    Dann benötigst du Zwei foreach schleifen ineinander die immer das erray der Seite durchsuchen und bei jedem Keyword achauen ob der suchbegriff übereinstimmt


    EDIT:
    Die Suche liegt bei mir schon copy&paste fertig aber du sollst selbermachen ;) -wenn du was nicht vertshst kann man dir ja helfen :)
    EDIT2:
    http://wolf.wolfgang-m.de/beispiele/japanisch-suche.php
    EDIT3:

  • Vielen Dank für die Super antworten. Ich werde mir das alles mal genauer anschauen. Ich war den ganzen Tag unterwegs, weswegen ich erst jetzt antworte.


    Vielen Dank nochmal


    Gürße,
    Simon P.
    Okay, man kann also nicht alle die ausgeben, die z.B. 3 der selben Buchstaben im Suchwort besitzen? Da ich ja japanische Grammatik verwende, lohnt sich dann sowas nicht für mich. Ist der PHP-Qulltext, den du gepostet hast, die komplette Suche? Nicht oder? Und wie binde ich so eine PHP nun in meine Website ein? Sobald ich die index.php ja nicht mehr ausführe "verschwindet" ja meine komplette Website...


    Grüße,
    Simon P.

  • puhh.. also endweder habe ich einen totalen denkfehler... oder ich weiß auch nicht.
    Jetzt mal in "dummie-Sprache" für mich:
    Wenn ich jetzt meine Website aufrufe und in der URL das zu stehen habe "simon-no-japan.de/index.php?p=japanisch-grammatik" und ich dann die suche aufrufe und dann sowas in der URL zu stehen habe "simon-no-japan.de/suche.php?p=suchseite" dann ist mein gesamtes Design doch weg? Immerhin habe ich ja das gesamte Template-System in meiner Index.php "abgespeichert". Rufe ich diese index.php nicht mehr auf, dürfte das Design etc. weg sein.
    Oder wo liegt mein Denkfehler?

  • Prinzip: index.php



    Das ist das Prinzip deines Systems.
    Wie in der suche.html nun eine Suche ausgeführt wird, ist erstmal zweitens =)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!