kostenloser Webspace werbefrei: lima-city


Datenbankabfragen verlinken

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    webdesignerin

    Kostenloser Webspace von webdesignerin

    webdesignerin hat kostenlosen Webspace.

    Hallo zusammen! :wave:

    Ich bastle gerade an einem Mini-Nachschlagewerk für Fachbegriffe und brauche Eure Hilfe. Und zwar habe ich die Begriffe samt der Erklärungen in einer Datenbank und möchte, dass diese verlinkt werden. Man soll also beim Klick auf den Begriff auf eine neue Seite kommen und da wird der Begriff dann näher erklärt. Der Seitenname soll übrigens den Begriffnamen haben.

    Kurfassung:
    In meiner Datenbank gibt es zwei Spalten: Begriff und Erklärung. Auf der Seite, wo alle Begriffe aufgelistet werden (bei mir: uebersicht.html), sollen die entsprechenden Begriffe mit ihrem Eigennamen verlinkt werden.

    Beispiel: Der Begriff heißt "Spam". Der Link zur Erklärungsseite soll dann "spam.html" lauten. Und auf dieser Seite (spam.html) steht dann die Erklärung. Es soll also virtuell eine neue Seite angelegt werden mit dem Inhalt der Erklärung aus der Datenbank.

    Das einzigen Problem ist, dass ich keine Ahnung habe, wie ich das anstellen soll! Und um diese Uhrzeit bin ich damit auch total überfordert. :biggrin:

    Wäre also nett, wenn sich Jemand meiner erbarmt und mir hilft.Vielen Dank im Vorraus dafür! :thumb:


    Gruß,
    webdesignerin :angel:
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Genau das wird hier als Beispiel erklärt.

    Edit: Naja, fast. Einfach das "seite_" aus der RewriteRule streichen, dann klappt das.

    Beitrag zuletzt geändert: 16.6.2011 20:56:51 von drafed-map
  4. Leider kann ich dir nicht sagen wie du dein Problem lösen kannst aber ich vermute es geht mit .htaccess.

    Aber warum versuchst du es nicht so:

    Anstatt für jeden Begriff eine neue "Seite" erstellen zu lassen, übergibst du den Begriff einfach per Anhang an die URL und ließt dann auf der neuen Seite den enstprechenden Eintrag aus der Datenbank aus.

    Also in etwa so (Quick & dirty):
    Startseite:
    <a href="detail.php?query=spam">Spam</a>

    Detailseite:
    <?php
    $sql = mysql_query("SELECT erklärung FROM tabelle WHERE begriff = '".$_GET['query']."'");
    ?>


    //edit: da war wohl mal wieder jemand schneller :biggrin:

    Beitrag zuletzt geändert: 16.6.2011 20:58:15 von alfr3d
  5. Autor dieses Themas

    webdesignerin

    Kostenloser Webspace von webdesignerin

    webdesignerin hat kostenlosen Webspace.

    Hallo alfr3d! :wave:

    Ich habe es jetzt per Anhang bzw. mit nem Query gemacht. Soweit alles Bestens. Das einzige Problem (oder besser gesagt: zwei) ist, dass ich jetzt noch den Seitentitel und die Seitenurl dynamisch anpassen lassen muss.

    Im Moment sieht der Link bei mir so aus: uebersicht.html?Begriff=Spam - und ich möchte ja, dass er entweder so: begriff_spam.html oder so aussieht: spam.html

    Mit dem Link und Vorschlag von drafed-map bin ich leider nicht weitergekommen, weil dieser Rewrite nur für Datenbankeinträge mit ID ist. In meiner Datenbank gibt es aber keine IDs. Und da ich nicht weiß, wie man das ggf. an die Tabellespalte "Begriffe" anpasst... kam ich eben nicht weiter.:wink:

    Und der Seitentitel (<title></title>) ist im Moment leider noch Bedeutung und nicht Spam oder Begriff: Spam. Bitte um Hilfe!


    Gruß,
    webdesignerin :angel:
  6. Hallo, ich denke wenn Du eine Datenbank hast wirst Du mit php vertraut sein:

    Seitentitel einstellen geht so, der Seitentitel steht hier in der Spalte Name des Datensatzes:

    <?php
    echo "<title>"htmlentities($row["name"])."</title>";
    ?>
  7. Autor dieses Themas

    webdesignerin

    Kostenloser Webspace von webdesignerin

    webdesignerin hat kostenlosen Webspace.

    rlippold schrieb:
    Hallo, ich denke wenn Du eine Datenbank hast wirst Du mit php vertraut sein:

    Seitentitel einstellen geht so, der Seitentitel steht hier in der Spalte Name des Datensatzes:

    <?php
    echo "<title>"htmlentities($row["name"])."</title>";
    ?>


    Hallo rlippold! :wave:

    Mit PHP bin ich schon ein wenig vertraut, aber das Problem bei Deinem Vorschlag ist doch, das nur ein zufälliger bzw. der erste Begriff in der Datenbank als Titel angegezigt wird und nicht unbedingt der, der auf der Seite eigentlich erklärt wird. Außerdem sind ja ein paar " zu viel und ich weiß nicht wo ' hinmüssen bzw. ein Slash vor den ". Vielleicht verräts mir Jemand? :wink:


    Gruß,
    webdesignerin :angel:
  8. Das mit dem Titel ist ganz easy,
    Du übergibst den Begriffname ja mit GET, also z.B.
    xxx.html?begriff=spam

    Also setzt du zwischen <title>$_GET['begriff']</title> und schon haste zumindest den aktuellen Titel zum Begriff.
    Wie das mit der URL funzt kann ich dir aber leider nicht sagen.


    Beitrag zuletzt geändert: 17.6.2011 10:18:54 von trickdieb
  9. Die Lösung von Trickdieb schein mir die bessere zu sein, da Du den Seitennamen ja nicht in der Datenbank speicherst, sonder mit GET übergiebst.
  10. Also das mit dem Titel hat trickdieb ja erklärt, einfach mit $_GET übernehmen.

    Wegen der .htaccess und den RewriteRule, ich kenne mich nicht wirklich damit aus aber es stand da ja:
    RewriteEngine on 
    RewriteRule ^seite_([0-9]+).html$ seite.php?id=$1

    Was macht der Server?
    Die Anfrage wird nach "seite_ZAHL.html" untersucht. Die gefundene ZAHL wird in der Variablen $ gespeichert. Nun wird die Anfrage intern auf "seite.php?id=ZAHL" geleitet. Die URL-Leiste im Browser (Client) bleibt dabei unverändert.

    Also wenn ich den kleinen Text verstanden hab müsste es evtl so aussehen:
    RewriteEngine on 
    RewriteRule ^([a-c]+).html$ detail.php?query=$1

    -> Die Anfrage wird nach "TEXT.html" untersucht. Der gefundene TEXT wird in der Variablen $ gespiechert. Nun wird die Anfrage intern auf "detail.php?query=TEXT" geleitet. Die URL-Leiste im Browser (Client) bleibt dabei unverändert.

    Vielleicht kann jemand der sich richtig damit auskennt noch was dazu sagen...

    Beitrag zuletzt geändert: 17.6.2011 10:36:17 von alfr3d
  11. Naja, so ähnlich... Wir wollen aber doch nicht nur die Buchstaben a, b und c zulassen, oder? Das dürfte funktionieren:
    RewriteEngine on 
    RewriteRule ^(.*).html$ seite.php?begriff=$1
  12. Autor dieses Themas

    webdesignerin

    Kostenloser Webspace von webdesignerin

    webdesignerin hat kostenlosen Webspace.

    Hallo zusammen! :wave:

    @ trickdieb & rlippold: Danke, ich habe den Titel wie folgt erfolgreich hinbekommen: :thumb:

    $Begriff=& $_GET['Begriff'];
    echo $_GET['Begriff'];



    @ drafed-map: Inwiefern muss ich dann die Links auf in der Übersicht anpassen? Im Moment sehen die bei mir so aus:

    <a href='bedeutung.html?Begriff=".$row->Begriff."'>$row->Begriff</a>



    Gruß,
    webdesignerin :angel:

  13. Auch wenn ich nicht angesprochen bin:
    <a href="bedeutung.html?begriff=spam">Spam</a>
    <a href="bedeutung.html?begriff=offtopic">Offtopic</a>
    usw...

    Wenn jetzt jemand einen Link klickt:

    $begriff = $_GET['begriff'];
    $erklaerung = "SELECT * FROM tabellenbezeichnung WHERE begriff='$begriff'' ";
    $lesen = mysql_query($erklaerung);

    das ganze speicherst dir in einem Array (mysql_fetch_array) und kannst es dann ausgeben.
    ist zwar ziemlich kurz geschrieben, aber sollte veranschaulichen worauf ich hinaus will.

    edit:
    ich sehe gerade es geht ja um den Link in der URL Leiste der sich ändern soll? Dann ist das ot, sorry. Ich lasse es mal stehen vielleicht ist es ja doch noch hilfreich für dich.

    Beitrag zuletzt geändert: 17.6.2011 11:47:56 von trickdieb
  14. Autor dieses Themas

    webdesignerin

    Kostenloser Webspace von webdesignerin

    webdesignerin hat kostenlosen Webspace.

    drafed-map schrieb:
    Naja, so ähnlich... Wir wollen aber doch nicht nur die Buchstaben a, b und c zulassen, oder? Das dürfte funktionieren:
    RewriteEngine on 
    RewriteRule ^(.*).html$ seite.php?begriff=$1


    Das klappt irgendwie nicht. Wie soll denn die Seiten URL mit dieser Rewrite Rule am Ende lauten? Ich habe alles Mögliche ausprobiert, aber immer einen 404-er bekommen!? :confused:


    Gruß,
    webdesignerin :angel:
  15. Wenn du meinen Code nimmst und jemand die Seite spam.html aufruft, dann ist das wie, wenn jemand die Seite seite.php?begriff=spam aufrufen würde. Du musst also seite.php in den Namen deines PHP-Scripts ändern, den Code in die .htaccess speichern und die Get-Variable $_GET['begriff'] (nicht $_GET['Begriff']) im PHP-Script verwenden.
  16. Autor dieses Themas

    webdesignerin

    Kostenloser Webspace von webdesignerin

    webdesignerin hat kostenlosen Webspace.

    Hallo! :wave:

    @ drafed-map: Es geht zwar, aber das Problem war bzw. ist, dass ich noch folgende Rewrite Rule davor hatte:

    RewriteRule ^(.*)\.html$ $1.php [L]


    Dein Code geht zwar, sorgt jedoch dafür, dass die anderen .php Seiten (die eigentlich auch .html sein sollten) nicht erreichbar sind (es erscheint: Unbekannter Name). Wie verbinde ich beide Rewrite Rules (Deine und meine Alte)?


    Gruß,
    webdesignerin :angel:
  17. Das geht logischerweise nicht. Immer merken: EIn Computer ist dumm und alles, das er falsch verstehen kann, wird er auch falsch verstehen.

    Wenn du den Begriff 'spam' nachschlägst, lautet die Adresse: http://deine-seite.tld/spam.html
    Wenn du das PHP-Script 'spam.php' öffnest, lautet die Adresse: http://deine-seite.tld/spam.html

    Merkst du was?
  18. Autor dieses Themas

    webdesignerin

    Kostenloser Webspace von webdesignerin

    webdesignerin hat kostenlosen Webspace.

    drafed-map schrieb:

    Wenn du den Begriff 'spam' nachschlägst, lautet die Adresse: http://deine-seite.tld/spam.html
    Wenn du das PHP-Script 'spam.php' öffnest, lautet die Adresse: http://deine-seite.tld/spam.html

    Merkst du was?



    Ne sorry, das verstehe ich gerade wirklich nicht. Heißt das, ich muss mir was Anderes einfalles lassen, weil jetzt die anderen Seiten mit der neuen Rewrite Rule (auch mit beiden) nicht mehr gehen und die ganze, bisherige Arbeit war umsonst?


    Gruß,
    webdesignerin :angel:
  19. Okay..

    RewriteEngine on 
    RewriteRule ^(.*).html$ seite.php?begriff=$1


    Dadurch passiert folgendes:

    Du rufst spam.html auf, der Server leitet auf seite.php?begriff=spam um

    Das ist genau das, was du suchst :)

    Was du zusätzlich tun kannst ist, spezielle Seiten/Dateien auszuschließen:

    RewriteEngine on
    RewriteRule ^(wurst.html|kaese.html) - [L]
    RewriteRule ^(.*).html$ seite.php?begriff=$1


    Dadurch werden wurst.html und kaese.html aus den Rewriterules entfernt. Das ist zum Beispiel dann wichtig, wenn die Dateien wurst.html und/oder kaese.html tatsächlich vorhanden sind.

    Ohne diese Rule würden auch diese Seiten auf seite.php?begriff=x leiten, was ja nicht im Sinne des Erfinders ist :)

    Wenn du einen Prefix oder einen Suffix verwendest, wärst du ein wenig freier in der Gestaltung deiner Rules:

    RewriteEngine on
    RewriteRule ^begriff_(.*).html$ seite.php?begriff=$1


    Dadurch müsste man begriff_spam.html aufrufen, um auf seite.php?begriff=spam geleitet zu werden. Alle existierenden .html Seiten ohne den Suffix begriff_ sind also von der Rule gänzlich ausgeschlossen.

    EDIT:

    Ich hab dir mal ein Beispiel fertig gemacht -> http://fabo.lima-city.de/work/rewrite/spam.html

    Hier wird XXX.html umgeleitet zu index.php?begriff=XXX, wobei wurst.html und kaese.html nicht inbegriffen sind, da diese Dateien tatsächlicj existieren und dementsprechend nicht umgeschrieben werden sollen:

    http://fabo.lima-city.de/work/rewrite/wurst.html
    http://fabo.lima-city.de/work/rewrite/kaese.html

    Bei Verwendung von ^(.*).html$ kannst du KEINE weitere Rewriterule dieser Art in diesem Verzeichnis nutzen (logischerweise). Das sorgt, wie du bereits selbst bemerkt hast, für Fehler. Dementsprechend musst du einen Prefix oder einen Suffix nutzen, damit sich die beiden Rules nicht überschneiden. Oder halt exkludieren, wenn es nicht all zu viele Dateien sind.

    EDIT:

    Es geht auch anders. Du könntest mittels file_exists() in der PHP-Datei prüfen, ob die aufgerufene Datei existiert, oder nicht. Wenn ja, wird diese mittels include eingebunden und wenn nicht, lässt du deine Datenbankabfragen sausen.

    Dadurch würdest du dir einiges an Tipparbeit sparen (bei den Excludes).

    Beitrag zuletzt geändert: 17.6.2011 18:58:50 von fabo
  20. Autor dieses Themas

    webdesignerin

    Kostenloser Webspace von webdesignerin

    webdesignerin hat kostenlosen Webspace.

    Hallo fabo! :wave:

    Vielen Dank für die Erklärung! :thumb:

    Verstehe, dann sind beide Rewrite Rules aufeinmal einfach doppelt gemoppelt bzw. kommen sich absolut in die Quere, sodass der Computer nicht wissen kann, wie er auf diese unklare und unsinnige Regel reagieren soll. Jetzt habe auch ich's verstanden. :biggrin:

    Für mich käme dann wohl (leider) eher der Umweg über das Prä- oder Suffix in Frage. Ich werd's gleich mal ausprobieren. Was das Ausschließen von Dateien angeht, so hätte ich noch eine Rückfrage zu Deinem Wurst und Käse Sandwich: Was ist, wenn die Dateien, die wirklich exisitieren, keine .html, sondern eine .php Endung haben und nach .html konvertiert werden sollen. Dann bringt doch die Ausschlussregel nichts, oder? :confused:


    Gruß,
    webdesignerin :angel:
  21. Ich habe meinen obigen Beitrag bearbeitet :) Das könnte dir helfen.

    Zu deiner Frage: Ich bin grundsätzlich davon ausgegangen, dass es sich um PHP-Dateien handelt, die in Html-Dateien umgeschrieben werden sollen.

    Durch den Filter kannst du also bewirken, dass spam.html nicht an seite.php?begriff=spam weitergeleitet wird bzw. diese Seite (ob existent, oder nicht) nicht durch mod_rewrite genutzt wird.

    Ist spam.html nicht vorhanden, würde natürlich die Rule greifen und die Anfrage würde an seite.php?begriff=spam weitergeleitet werden. Durch diese Pseudo-Exclude-Anweisung wird spam.html komplett ignoriert.

    Ich hoffe, du verstehst, was ich meine. Ich steige nämlich gerade selber nicht mehr durch :D

    Mit der vorgeschlagenen file_exists PHP-Variante würde jede Anfrage an seite.php?begriff=XXX weitergeleitet werden (die Pseudo-Exclude-Anweisung aus der .htaccess entfernen) und du könntest irgendetwas damit machen (zum Beispiel includen):

    if(file_exists($_GET['begriff'].'.php')) {
    	include $_GET['begriff'].'.php';
    	exit();
    }
    else {
    	echo 'Die aufgerufene Datei existiert nicht.'
    	// Datenbankabfragen, blabla...
    }


    Beitrag zuletzt geändert: 17.6.2011 19:16:02 von fabo
  22. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!