1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Bedingte Weiterleitung im Skript realisieren

  • osiris
  • 2. April 2008 um 11:05
  • Unerledigt
  • osiris
    8
    osiris
    Mitglied
    Punkte
    695
    Beiträge
    109
    • 2. April 2008 um 11:05
    • #1

    Hallo,

    kann mir hier irgendjemand verraten, wie man innerhalb eines PHP-Skriptes eine bedingte Weiterleitung erzeugt?

    Bis zu

    PHP
    if($redirect == true)
    {
    header("Location: next.php");
    }

    bin ich auch schon gekommen, aber header ist ja etwas eigenwillig. Das heißt, es darf nichts ausgeben werden, bevor ich diese Funktion verwende.

    Und hier liegt das Problem. Ich möchte in einem Login-Skript eine Weiterleitung haben, wenn alle Eingaben erfolgreich abgeglichen wurden. Das heißt, dass da eine ganze Menge Quelltext vor header steht.

    Gibt es da noch eine andere Möglichkeit (in PHP).
    Ansonsten: Gibt es in PHP nicht die Möglichkeit, eine "Bedinungsvariable" an den Anfamg eines Skriptes zu setzen, ihr erst später einen Wert zuzuweisen und sie trotzdem am Anfang zu nutzen - quasi eine Art goto.
    Das ist natürlich nicht sonderlich elegant, aber wie soll's anders gehen?

    Komischerweise habe ich im Netz ein Skript gefunden, in dem die header-Funktion scheinbar erfolgreich irgendwo im Quelltext aufgerufen wird.

  • Paulchen
    1
    Paulchen
    Gast
    • 2. April 2008 um 11:10
    • #2
    Zitat von osiris

    Und hier liegt das Problem. Ich möchte in einem Login-Skript eine Weiterleitung haben, wenn alle Eingaben erfolgreich abgeglichen wurden. Das heißt, dass da eine ganze Menge Quelltext vor header steht.

    Quelltext vor header() stört ja nicht - solange nichts ausgegeben wird.

  • osiris
    8
    osiris
    Mitglied
    Punkte
    695
    Beiträge
    109
    • 2. April 2008 um 11:25
    • #3

    Das Problem ist, dass recht viele HTML-Tags vor header stehen.

    Da muss ich dans ganze wohl von einander trennen.
    Na das wird ein Spaß. :frowning_face:

  • spinball
    11
    spinball
    Mitglied
    Reaktionen
    67
    Punkte
    1.192
    Beiträge
    223
    • 2. April 2008 um 11:40
    • #4

    Was du brauchst, ist Output Buffering!

    http://at2.php.net/manual/en/function.ob-start.php

    PHP
    ob_start();
    
    
    echo "superduper";
    
    
    if($redirect) {
        header("Location: next.php");
        exit();
    }
    
    
    echo "schlabberdabber";
    Alles anzeigen
  • osiris
    8
    osiris
    Mitglied
    Punkte
    695
    Beiträge
    109
    • 2. April 2008 um 11:47
    • #5

    O ja!
    Vielen Dank! :wave:

  • Stefan Kögl
    10
    Stefan Kögl
    Mitglied
    Reaktionen
    10
    Punkte
    1.010
    Beiträge
    199
    • 2. April 2008 um 12:53
    • #6

    Warum so kompliziert. Teil das ganze auf einzelne Dateien, jede mit einer eigenen Aufgabe, auf.
    Auf der ersten Seite gibt er Benutzer seine Zugangsdaten ein. Das Forumular führ zum Skript, das die Eingaben prüft und entsprechend Redirectet. Je nachdem, ob die Eingaben gepasst haben, gehts zu einer Seite für einen erfolgreichen bzw fehlgeschlagenen Login.

    Oder hab ich was falsch verstanden?

  • bjelli
    3
    bjelli
    Mitglied
    Punkte
    80
    Beiträge
    15
    • 2. April 2008 um 15:16
    • #7
    Zitat von osiris

    kann mir hier irgendjemand verraten, wie man innerhalb eines PHP-Skriptes eine bedingte Weiterleitung erzeugt?

    Bis zu

    PHP
    if($redirect == true)
    {
    header("Location: next.php");
    }

    Für favascript-fähige Browser könnt man Javascript verwenden

    PHP
    echo "<script>document.location='next.php';</script>";

    und für die anderen (ohne javascript) noch einen link anbieten:

    PHP
    echo "<a href='next.php'>weiter gehts hier</a>";

    aber output-buffering ist natürlich auch sehr schick.

    Brigitte Jellinek - http://multimediatechnology.at/web-communities/
    Ich unterrichte in einem Medieninformatik-Studium (BSc, MSc) mit Schwerpunkt Web Development
    Meine Themen: Ruby on Rails, Javascript, SCRUM, git, Test Driven Development,...

  • beefy
    13
    beefy
    Mitglied
    Reaktionen
    18
    Punkte
    1.683
    Beiträge
    304
    • 2. April 2008 um 15:36
    • #8
    Zitat von Stefan Kögl

    Warum so kompliziert. Teil das ganze auf einzelne Dateien, jede mit einer eigenen Aufgabe, auf.

    Sehe ich auch so. Muessen auch nicht unterschiedliche Dateien sein, kannst ja auch was in dieser Art machen:

    PHP
    <?php
    
    
    // Datei index.php
    
    
    session_start();
    mysql_connect(...);
    
    
    function login_ok() {
      // eine Moeglichkeit; ich gehe von einer Usertabelle mit MD5-gehashten Passwoertern aus
    
    
      if (isset($_SESSION['username']) && isset($_SESSION['password'])) {
        $res = mysql_query("SELECT * FROM users WHERE username='" . mysql_escape_string($_SESSION['username']) . "' AND password='" . mysql_escape_string($_SESSION['password']) . "'");
        if (mysql_num_rows($res) == 1) return true;
      }
      return false;
    }
    
    
    if (!isset($_REQUEST['action'])) $_REQUEST['action'] = null;
    switch($_REQUEST['action']) {
      case 'login':
        echo '<form action="index.php" method="post">';
        echo '<input type="hidden" name="action" value="check_login" />';
        echo 'Username: <input type="text" name="username" />';
        echo 'Password: <input type="password" name="password" />';
        echo '<input type="submit" />';
        echo '</form>';
        break;
    
    
      case 'check_login':
        $_SESSION['username'] = $_REQUEST['username'];
        $_SESSION['password'] = md5($_REQUEST['password']);
        if (login_ok()) header('Location: index.php?action=mainpage'); else echo 'Login falsch!';
        break;
    
    
      default:
      case 'mainpage':
        if (login_ok()) {
          echo '(... Seiteninhalt ...)';
        } else {
          header('Location: index.php?action=login');
        }
        break;
    }
    
    
    ?>
    Alles anzeigen

    Der Code ist natuerlich schnell hingefetzt und vielleicht fehlerhaft.

  • maciek
    16
    maciek
    Mitglied
    Punkte
    2.805
    Beiträge
    434
    • 2. April 2008 um 17:02
    • #9
    Zitat von bjelli

    Für favascript-fähige Browser könnt man Javascript verwenden

    PHP
    echo "<script>document.location='next.php';</script>";

    und für die anderen (ohne javascript) noch einen link anbieten:

    PHP
    echo "<a href='next.php'>weiter gehts hier</a>";

    aber output-buffering ist natürlich auch sehr schick.


    also ich würde empfehlen, für solche Sachen nicht JavaScript zu empfehlen. Dafür gibt es das hier:

    http://de.selfhtml.org/html/kopfdaten/meta.htm#weiterleitung

    Code
    <meta http-equiv="refresh" content="5; URL=http://de.selfhtml.org/">


    man kann die Zeit natürlich auf 0 setzen und dann wird der redirect sofort gemacht.

    *** Make it idiot proof, and someone will build a better idiot. ***

  • osiris
    8
    osiris
    Mitglied
    Punkte
    695
    Beiträge
    109
    • 4. April 2008 um 10:56
    • #10

    Javascript verwende ich eigentlich grundsätzlich nicht, weil es nicht serverseitig ist und Sicherheitsrisiken birgt, die sich wohl durch die Benutzung von PHP vermeiden lassen.

    Außerdem gibt es eine Menge Menschen, die Javascript in ihrem Browser generell ausgeschalten haben.

  • bjelli
    3
    bjelli
    Mitglied
    Punkte
    80
    Beiträge
    15
    • 4. April 2008 um 11:37
    • #11
    Zitat von osiris

    Javascript verwende ich eigentlich grundsätzlich nicht, weil es nicht serverseitig ist und Sicherheitsrisiken birgt, die sich wohl durch die Benutzung von PHP vermeiden lassen.

    Außerdem gibt es eine Menge Menschen, die Javascript in ihrem Browser generell ausgeschalten haben.

    Natürlich sollte man Webseiten möglichst so gestalten dass sie "gracefully degraden" - dass sie auch ohne javascript und flash und css noch benutzbar sind. allein schon wegen der barrierefreiheit.
    siehe z.B. http://www.anybrowser.org/campaign/abdesign.html
    oder das Buch von Dan Cederholm: Bulletproof Webdesign. Addison-Wesley, München. ISBN 3827326230.

    Deswegen ganz auf Javascript zu verzichten find ich übertrieben asketisch. Grade Javascript und AJAX sind die Chance dass offene Standards sich gegen die proprietäre Konkurrenz (Flash, Silverlight) behaupten können.


    "eine Menge Menschen, die Javascript in ihrem Browser generell ausgeschalten haben" sind laut http://thecounter.com derzeit 5%:


    Zitat


    JavaScript Stats

    Fri Feb 1 00:01:02 2008 - Mon Mar 31 23:58:01 2008 60.0 Days

    Javascript 1.2+: 11424104 (94%)
    Javascript <1.2: 20014 (0%)
    Javascript false: 699789 (5%)

    Brigitte Jellinek - http://multimediatechnology.at/web-communities/
    Ich unterrichte in einem Medieninformatik-Studium (BSc, MSc) mit Schwerpunkt Web Development
    Meine Themen: Ruby on Rails, Javascript, SCRUM, git, Test Driven Development,...

  • Maximilian Rupp 27. Dezember 2024 um 12:04

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

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

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung