Ankündigung

Einklappen
Keine Ankündigung bisher.

Wie mache ich index.php?page=kontakt

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Wie mache ich index.php?page=kontakt

    Hallo,

    ich möchte eine Webseite erstellen, die auf einer Index Datei basieren soll.

    Die Links Sollen dann so aussehen:

    index.php?page=index
    index.php?page=kontakt
    usw.

    Leider bin ich ein Anfänger in PHP und weiß nicht wie das geht. Kann mir da bitte jemand helfen?

    Ich danke euch im Vorraus.

    Mit freundlichen Grüßen
    Pit910


  • #2
    Es gibt zwar x Tutorials für solche Dinge, viele davon zeigen aber größere Sicherheitsschwächen auf, aus diesem Grund hier ein kleines funktionales Beispiel, wie man soetwas umsetzen könnte:

    index.php
    PHP-Code:
    <?php

    /**
     *  available pages
     **/

    $pages = array(
        
    'index' => 'pages/home.php',
        
    'about' => 'pages/about.php',
        
    'news' => 'pages/news.php',
        
    'error-404' => 'pages/errors/404.php',
    );

    /**
     *  defaults
     **/
     
    $config = array(
        
    # The default Page
        
    'defaultPage' => 'index',
        
        
    # The error Page for inexisting pages
        
    'errorPage' => 'error-404',
        
        
    # Page aren't reachable by web requests
        
    'unavailablePages' => array('error-404'),
        
        
    # GET-/POST- Request Field
        
    'requestField' => 'page',
        
        
    # current request type
        
    'request' => $_SERVER['REQUEST_METHOD'],
        
        
    /**
         *  optional
         **/
            
            # current request type is ajax call
            
    'ajax' => 
                isset(
    $_SERVER['X_HTTP_REQUESTED_WITH']) && 
                
    $_SERVER['X_HTTP_REQUESTED_WITH'] == 'xmlhttprequest',
    );

    /**
     *  prepare inbound requests
     **/
     
    $requestedPage false;
    $inboundData = array();

    # Detect Inbound data...

    if ( strtoupper($config['request']) === 'GET' ) {
        
    $inboundData $_GET;
    }
    elseif ( 
    strtoupper($config['request']) === 'POST' ) {
        
    $inboundData $_POST;
    }

    # Detect Requested Page

    if ( isset($inboundData$config['requestField'] ]) ) {
        
        
    # field is set, analyze them
        
        
    if ( 
            isset( 
    $pages$inboundData$config['requestField'] ] ] ) 
        ) {
            if ( 
                !
    in_array(
                    
    $inboundData$config['requestField'] ],
                    
    $config['unavailablePages']
                )
            ) {
                
    $requestedPage $pages$inboundData$config['requestField'] ] ];
            }
            else {
                echo 
    'Application Error: requested Page is not for public usage'.PHP_EOL;
            }
        }
        elseif ( 
            isset( 
    $pages$config['errorPage'] ] )
        ) {
            
    $requestedPage $pages$config['errorPage'] ];
        }
        
    }
    else {

        
    # field is not set, fallback to default if exist
        
        
    if ( isset( $pages$config['defaultPage'] ] ) ) {
            
    $requestedPage $pages$config['defaultPage'] ];
        }
        elseif ( isset( 
    $pages$config['errorPage'] ] ) ) {
            
    $requestedPage $pages$config['errorPage'] ];
        }

    }

    /**
     *  execute Page Request, or throw application errors
     **/

    if ( $requestedPage ) {
        
        if ( 
    is_readable($requestedPage) ) {
            include 
    $requestedPage;
        }
        else {
            echo 
    'Application Error: Page Request points to not existing file';
        }

    }
    else {
        echo 
    'Application Error: Page Request failed ( 500 )';
    }
    inhalt von...
    • pages/home.php
    • pages/about.php
    • pages/news.php
    PHP-Code:
    <?php

    echo 'I am '.basename(__FILE__);
    inhalt von
    • pages/error/404.php
    PHP-Code:
    <?php

    echo 'Sorry, the requested page "'.
        
    $inboundData['page'].
        
    '" requested over '.
        
    $config['request'].
        
    ' was not found. ('.basename(__FILE__).')';
    Tests:
    • index.php
    • index.php?page=home
      Code:
      I am home.php
    • index.php?page=about
      Code:
      I am about.php
    • index.php?page=news
      Code:
      I am news.php
    • index.php?page=what-the-hell
      Code:
      Sorry, the requested page "test" requested over GET was not found. (404.php)
    • index.php?page=error-404
      Code:
      Application Error: requested Page is not for public usage 
      Application Error: Page Request failed ( 500 )

    That's all. No magic so far.
    PHP.de Gitter.im Chat - Meine öffentlichen Bookmarks ← Ich habe dir geholfen ? Beschenk mich.

    Kommentar


    • #3
      Vielen Dank erstmal.

      Aber kann man es nicht so machen das alle Quelltexte der Seiten in der index.php abgespeichert werden? Und dann an einer bestimmten stelle mit einem Echo ausgegeben werden wenn man den entsprechenden Link aufruft?

      Kommentar


      • #4
        Ja kann man, allerdings erschwert alles in einer Datei ungemein die Wartbarkeit.
        PHP.de Gitter.im Chat - Meine öffentlichen Bookmarks ← Ich habe dir geholfen ? Beschenk mich.

        Kommentar


        • #5
          Hast du denn auch davon einen Code? Würde es gerne ausprbieren


          Danke im Vorraus.

          Kommentar


          • #6
            Das wäre z.B. ein Ansatz. Jedoch alles andere als leicht wartbar.

            PHP-Code:
            <?php

            //..

            switch($_GET['page']) {
              case 
            'home':
                
            //Quelltext für die Startseite
                
            break;
              case 
            'news':
                
            //Quelltext neuigkeiten
                
            break;
              case default:
                
            //Quelltext 404
                
            break;
            }
            ?>
            Crashkurs zum Thema Grammatik: die Standart (der Standart)

            Kommentar


            • #7
              Zitat von Pit910 Beitrag anzeigen
              Hast du denn auch davon einen Code? Würde es gerne ausprbieren


              Danke im Vorraus.
              Nein, ich demonstriere kein fail design.
              PHP.de Gitter.im Chat - Meine öffentlichen Bookmarks ← Ich habe dir geholfen ? Beschenk mich.

              Kommentar


              • #8
                Der Ansatz von Darky ist definitiv nicht empfehlenswert sammt der Idee, eine Webapplication so zu strukturieren.

                Kommentar


                • #9
                  So arg unterscheidet sich das aber alles gar nicht. Ist im Grunde nur eine weitere Abstraktionsebene.

                  PHP-Code:
                  <?php

                  function includeFile($path)
                  {
                      
                  ob_start();
                      include 
                  __DIR__ '/pages/' $path '.php';
                      return 
                  ob_get_clean();
                  }

                  $content '';

                  $page = isset($_GET['page']) ? (string) $_GET['page'] : 'home';

                  switch(
                  $page) {
                      case 
                  'home':
                          
                  //Quelltext für die Startseite
                          
                  $content includeFile('home');
                          break;
                      case 
                  'news':
                          
                  //Quelltext neuigkeiten
                          
                  $content includeFile('news');
                          break;
                      default:
                          
                  //Quelltext 404
                          
                  $content includeFile('error');
                          break;
                  }

                  include 
                  __DIR__ '/pages/layout.php';
                  layout.php:

                  PHP-Code:
                  <!DOCTYPE html>

                  <html lang="en">

                      <head>
                          <meta charset="UTF-8" />
                          <title>title</title>
                      </head>

                      <body>

                          <!-- wiederkehrende Elemente hier einfügen -->

                          <?= $content ?>

                      </body>

                  </html>
                  PHP-Wissenssammlung Composer Awesome Awesomeness PHP: The Right Way @mermshaus

                  Kommentar


                  • #10
                    Ein Aufruf einer Error-Page bei normalem Seitenaufruf halte ich für diskussionsbedürftig.

                    Kommentar


                    • #11
                      die kompletten Seiten in der index zu includen ist eh Käse,
                      dann kannst gleich auf news.php, contact.php usw. verlinken.

                      Das macht nur Sinn wenn Du Code der auf allen Seiten gleich
                      (oder ähnlich) ist in der index includest, wie z.B. Navi, header, footer.
                      Und die einzelnen Inhalte des Contenbereichs bestimmt dann eben der GET-Parameter.
                      Eine if-else-Abfrage nimmt, ordentlich geschrieben eine Menge Platz weg. Platzsparend geht es mit einem ternären Operator.

                      Kommentar


                      • #12
                        Ich würde die Array Liste in einer eigenen Datei auslagern. Das macht das ganze übersichtlicher. So als Konfiguration Datei. Damit hat man gleich einen besseren Überblick.

                        Weiters sollte verhindert werden das ein und die selbe Datei 2 mal oder mehrmals eingebunden wird.
                        zb. include_once();

                        Mfg Splasch

                        Kommentar


                        • #13
                          Habe oben noch mal editiert. Es nimmt leider kaum ein Ende, so was zu erklären, wenn man mehr und mehr Eventualitäten und Anforderungen berücksichtigt. Da baut man schnell Silex oder so[1] nach.


                          1: Eher noch eine Nummer größer, denn so was wie Layout-Dateien kennt Silex von Haus aus auch nicht beziehungsweise liegen bei Silex nicht im Fokus. Dafür bietet es aber zumindest schon mal parametrisierte Routen an. Ist eine gute Wahl für solche Anwendungszwecke, wie wir ihn hier haben.
                          PHP-Wissenssammlung Composer Awesome Awesomeness PHP: The Right Way @mermshaus

                          Kommentar


                          • #14
                            Ich würde die Array Liste in einer eigenen Datei auslagern. Das macht das ganze übersichtlicher. So als Konfiguration Datei. Damit hat man gleich einen besseren Überblick.
                            Wir reden hier doch von "Friseursalon Maier"
                            und nicht von einer umfangreichen Applikation.

                            Wenn das Ding recht groß wird,
                            dann empfiehlt sich doch eh Joomla, Typo3, Flow3 und Konsorten
                            oder auch das neue ZF 2 wenn man objektorientiert programmieren will.
                            Eine if-else-Abfrage nimmt, ordentlich geschrieben eine Menge Platz weg. Platzsparend geht es mit einem ternären Operator.

                            Kommentar


                            • #15
                              Zitat von splasch Beitrag anzeigen
                              Weiters sollte verhindert werden das ein und die selbe Datei 2 mal oder mehrmals eingebunden wird.
                              zb. include_once();
                              Wobei die Idee hier auch die Nutzung von PHP als Template-Engine sein könnte. Dann wäre es sinnvoll, include zu nutzen, um nicht unnötig einzuschränken.

                              Zitat von Chris.
                              Ein Aufruf einer Error-Page bei normalem Seitenaufruf halte ich für diskussionsbedürftig.
                              Was ist denn ein normaler Seitenaufruf?




                              pages/_article.php:

                              PHP-Code:
                              <?php

                              $article
                              ['title'] = escape($article['title']);

                              if (
                              $addLink) {
                                  
                              $article['title'] = '<a href="./?page=news/' escape($article['id']) . '">'
                                          
                              $article['title'] . '</a>';
                              }

                              ?>

                              <article>
                                  <h1><?=$article['title']?></h1>
                                  <?=$article['content']?>
                              </article>
                              pages/index.php:

                              PHP-Code:
                              <h1>Willkommen</h1>

                              <p>Einige Neuigkeiten:</p>

                              <?php foreach ($articles as $article) : ?>
                                  <?=render('_article', array('article' => $article'addLink' => true))?>
                              <?php 
                              endforeach; ?>
                              pages/layout.php:

                              PHP-Code:
                              <?php

                              $title 
                              = isset($title) ? $title 'Untitled';
                              $title .= ' - My Web';

                              ?><!DOCTYPE html>

                              <html lang="en">

                                  <head>
                                      <meta charset="UTF-8" />
                                      <title><?= $title ?></title>
                                  </head>

                                  <body>

                                      <?= $content ?>

                                  </body>

                              </html>
                              pages/news-id.php:

                              PHP-Code:
                              <p><a href="./">Zurück</a></p>

                              <?= render('_article', array(
                                  
                              'article' => $article,
                                  
                              'addLink' => false
                              )); ?>
                              index.php:

                              PHP-Code:
                              <?php

                              error_reporting
                              (-1);
                              ini_set('display_errors'1);

                              ////////////////////////////////////////////////////////////////////////////////
                              //
                              // Template functions (system)
                              //

                              function escape($s)
                              {
                                  return 
                              htmlspecialchars($sENT_QUOTES'UTF-8');
                              }

                              function 
                              render($template, array $vars = array())
                              {
                                  
                              ob_start();
                                  
                              extract($vars);
                                  include 
                              __DIR__ '/pages/' $template '.php';
                                  return 
                              ob_get_clean();
                              }

                              ////////////////////////////////////////////////////////////////////////////////
                              //
                              // Model functions (user)
                              //

                              function model_news_loadArticlesFromSomewhereStub()
                              {
                                  return array(
                                      array(
                                          
                              'id' => 12,
                                          
                              'title' => 'Deutschland schlägt die Färöer-Inseln',
                                          
                              'content' => '<p>Die Tore erzielten Götze und zweimal Özil.</p>'
                                      
                              ),
                                      array(
                                          
                              'id' => 47,
                                          
                              'title' => 'Unfaire Autofahrer',
                                          
                              'content' => '<p>Studien ergeben, dass die schlimmsten Autofahrer
                                                       schwarze BMWs fahren und aus NRW stammen.'
                                      
                              )
                                  );
                              }

                              function 
                              model_news_getArticleById($id)
                              {
                                  
                              $article null;
                                  
                              $articles model_news_loadArticlesFromSomewhereStub();

                                  foreach (
                              $articles as $tmp) {
                                      if (
                              $tmp['id'] === $id) {
                                          
                              $article $tmp;
                                          break;
                                      }
                                  }

                                  return 
                              $article;
                              }

                              ////////////////////////////////////////////////////////////////////////////////
                              //
                              // Initialization of application context (system)
                              //

                              $app = array(
                                  
                              'get'     => $_GET,
                                  
                              'post'    => $_POST,
                                  
                              'cookie'  => $_COOKIE,
                                  
                              'page'    => isset($_GET['page']) ? (string) $_GET['page'] : 'index',
                                  
                              'httpHeaders' => array(
                                      
                              'Content-Type' => 'text/html; charset=UTF-8'
                                  
                              ),
                                  
                              'httpStatusCode' => 200,
                                  
                              'routes' => array()
                              );

                              ////////////////////////////////////////////////////////////////////////////////
                              //
                              // Routes and actions (user)
                              //

                              $app['routes']['index'] = function () {
                                  return 
                              render(
                                      
                              'layout',
                                      array(
                                          
                              'content' => render(
                                              
                              'index',
                                              array(
                                                  
                              'articles' => model_news_loadArticlesFromSomewhereStub()
                                              )
                                          ),
                                          
                              'title' => 'Startseite'
                                      
                              )
                                  );
                              };

                              $app['routes']['news/(\d+)'] = function ($articleId) use (&$app) {
                                  
                              $articleId = (int) $articleId;
                                  
                              $article model_news_getArticleById($articleId);

                                  if (
                              $article === null) {
                                      
                              $app['httpStatusCode'] = 404;
                                      return 
                              sprintf('<p>Article with ID %s not found</p>'$articleId);
                                  }

                                  return 
                              render(
                                      
                              'layout',
                                      array(
                                          
                              'content' => render(
                                              
                              'news-id',
                                              array(
                                                  
                              'article' => $article
                                              
                              )
                                          ),
                                          
                              'title' => escape($article['title'])
                                      )
                                  );
                              };

                              ////////////////////////////////////////////////////////////////////////////////
                              //
                              // Run (system)
                              //

                              $responseBody '';

                              // Router

                              $match false;

                              foreach (
                              $app['routes'] as $route => $func) {
                                  
                              $matches = array();
                                  if (
                              === preg_match('#^' $route '$#'$app['page'], $matches)) {
                                      
                              array_shift($matches);
                                      
                              $responseBody call_user_func_array($func$matches);
                                      
                              $match true;
                                      break;
                                  }
                              }

                              if (
                              false === $match) {
                                  
                              $app['httpStatusCode'] = 404;
                                  
                              $responseBody sprintf("Route '%s' does not exist\n"$app['page']);
                              }

                              // Generate and send headers.

                              $statusDescs = array(
                                  
                              200 => 'OK',
                                  
                              404 => 'Not Found'
                                  
                              // ...
                              );

                              header('Status: ' $app['httpStatusCode'] . ' '
                                                
                              $statusDescs[$app['httpStatusCode']]);

                              foreach (
                              $app['httpHeaders'] as $name => $content) {
                                  
                              header($name ': ' $content);
                              }

                              echo 
                              $responseBody;
                              Aber das kapiert mit Sicherheit kein Anfänger. Und wie gesagt: Silex ist so was in gut. Leichter zu durchblicken ist aber vielleicht ein echtes Full-Stack-Framework (Zend, APF, Symfony, …). Diese Micro-Frameworks basieren irgendwie auch darauf, dass man Strategien parat hat, Leerstellen zu füllen (Stichwort Model-Organisation).
                              PHP-Wissenssammlung Composer Awesome Awesomeness PHP: The Right Way @mermshaus

                              Kommentar

                              Lädt...
                              X