Seiten mit Inhalten aus einer Datenbank auslesen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Seiten mit Inhalten aus einer Datenbank auslesen

    Guten Tag liebe Community,
    ich habe mal wieder eine Frage/ein Problem.

    Auf einer Seite, werden die einzelnen Inhaltsseiten per Array in der index.php eingebunden.

    In der index.php sieht dies dann so aus:

    PHP-Quellcode: index.php

    1. <div class="content">
    2. <?php system::page() ?>
    3. </div>


    In einer anderen Datei system.php sieht das Array dann so aus:

    Quellcode

    1. class system{
    2. static function page(){
    3. $pages = array();
    4. // System Pages
    5. $pages['index'] = "./index.php";
    6. $pages['login'] = "./login.php";
    7. $pages['signup'] = "./signup.php";
    8. $pages['admin'] = "./admin/index.php";
    9. // NavigationMenu
    10. $pages['homepage'] = "system/content/homepage.php";
    11. if(isset($_GET['page']) AND isset($pages[$_GET['page']])) {
    12. //Überprüfen ob Datei vorhanden ist. Wenn vorhanden wird ausgeführt
    13. if(!file_exists($pages[$_GET['page']])) echo "Die Datei wurde nicht gefunden.";
    14. include $pages[$_GET['page']];
    15. } else {
    16. include $pages['homepage'];
    17. }
    18. }
    19. }
    Alles anzeigen

    Ich möchte aber die Seiten nicht mehr so einbinden. Aus diesem Grund habe ich in einem abgesicherten Verzeichnis (per .htaccess und .htpasswd) eine Datei mit der ich Daten in meine folgende Datenbank eintragen kann:

    page_idpage_urlpage_titlepage_authorpage_created_datepage_contentpage_status
    1homepageHomepage"wenn das Feld leer ist, wird es nicht anzeigen""wenn das Feld leer ist, wird es nicht anzeigen""der Inhalt der Seite Text/Source""soll die Seite betretbar sein oder nicht"
    2loginLogin"wenn das Feld leer ist, wird es nicht anzeigen""wenn das Feld leer ist, wird es nicht anzeigen""der Inhalt der Seite Text/Source""soll die Seite betretbar sein oder nicht"
    3signupSignup"wenn das Feld leer ist, wird es nicht anzeigen""wenn das Feld leer ist, wird es nicht anzeigen""der Inhalt der Seite Text/Source""soll die Seite betretbar sein oder nicht"



    Ich habe jetzt so etwas probiert:

    Quellcode: homepage.php

    1. <?PHP
    2. $db_ergebnis = mysql_query("SELECT * FROM pages WHERE page_id=1");
    3. if ( ! $db_ergebnis )
    4. {
    5. die('Ungültige Abfrage: ' . mysql_error());
    6. }
    7. while ($output = mysql_fetch_array( $db_ergebnis))
    8. {
    9. ?>
    10. <article>
    11. <header class="page_header">
    12. <h1><a href="<?PHP echo "" .$output['page_url'] .""; ?>"><?PHP echo "" .$output['page_title'] .""; ?></a></h1>
    13. </header>
    14. <div id="page_content">
    15. <p><?PHP echo "" .$output['page_content'] .""; ?></p>
    16. </div>
    17. <footer>
    18. <span class="page_page_author"> Erstellt von <?PHP echo "" .$output['page_author'] .""; ?>, </span>
    19. <span class="page_created_date">am <?PHP echo "" .$output['page_created_date'] .""; ?></span>
    20. </footer>
    21. </article>
    22. <?PHP
    23. }
    24. ?>
    Alles anzeigen


    Aber mir will einfach nicht einfallen, wie ich beides zusammenbringen kann.

    Kann mir da jemand helfen?
  • bYemma schrieb:

    DestinatioN schrieb:

    Aber mir will einfach nicht einfallen, wie ich beides zusammenbringen kann.
    Was genau willst du zusammenbringen? Was funktioniert nicht?
    Ich möchte meine homepage.php und die anderen Inhaltsseiten, die momentan Als fest geschriebener Text vorlesen, alle per MYSQL-Datenbank anfertigen lassen.
    Dazu habe ich ja die oben gezeigte Tabelle, weil ich momentan für jede Inhaltsseite eine extra "Seite.php" habe.
    Und dies muss ich ja irgendwie mit dem Array in der system.php, welches per URL Parameter die Inhaltsseite auswählt verbinden. Aber das klappt nicht so.
  • Das Problem an sich verstehe ich natürlich, nur meine Frage ist, was genau nicht klappt, wo tritt ein Fehler auf, wo kommst du nicht weiter?

    Ich vermute mal zu erraten, wo es Probleme geben könnte. Wenn du per GET-Parameter die Id der Seite übergibst, sollte deine Query so aussehen:

    PHP-Quellcode

    1. $page_id = intval($_GET['key']);
    2. $db_ergebnis = mysql_query("SELECT * FROM `pages` WHERE `page_id` = '".$page_id."' LIMIT 1");

    Wenn du die page_url übergibst, wie in deinem bisherigen Zustand mit Dateien, sieht das eigentlich entsprechend aus, nur dass du dabei aufpassen musst, dass niemand kritische Zeichen einschleusen kann. Denn sonst kann deine Datenbank gehackt werden. Stichwort SQL Injection

    PHP-Quellcode

    1. $page_url = eine_escape_function($_GET['page']);
    2. $db_ergebnis = mysql_query("SELECT * FROM `pages` WHERE `page_url` = '".mysql_real_escape_string($page_url)."' LIMIT 1");
    3. eine_escape_function($url) {
    4. ... z.B. entferne alle Zeichen, die keine Kleinbuchstaben sind
    5. return $url;
    6. }
    Die while-Schleife kannst du, glaub ich, weglassen, wenn du nur den ersten Eintrag abfrägst. Und du solltest noch prüfen, ob die Query keinen Eintrag gefunden hat.