Patrick: weiterleitung funktioniert nicht

Hallo

ich möchte das wenn einer eine seite betritt die aus dem user bereich ist eine alert.box kommt und nach klicken auf ok der jenige dann zur login seite kommt. leider funktioniert die php weiterleitung nicht. die alert box erscheint aber.

per java oder html wollte ich es nicht machen weil es doch nicht jeder browser unterstützt! oder??

der code sieht so aus:

session_start();

if (!session_is_registered('user'))
{
die("<SCRIPT LANGUAGE="JAVASCRIPT">alert('Du musst dich erst einloggen!')</SCRIPT>");
header("Location: index.php");
}

wie kann ich es machen das es klappt?

vielen dank schonmal im voraus!

mfg,
patrick

  1. Hi
    Ja was ist denn die Fehlermeldung?
    Ne quatsch du Kriegst wohl nur den alert angezeigt und dann passiert nix, oder?

    if (!session_is_registered('user'))
    {
    die("<SCRIPT LANGUAGE="JAVASCRIPT">alert('Du musst dich erst einloggen!')</SCRIPT>");
    header("Location: index.php");
    }

    das die() beendet das php-script, so dass die Zeile mit header.. schon gar nicht mehr aufgerufen wird.
    aber wenn du es mit echo "<script ...> machst, dann wird es wohl eine fehlermeldung output already started geben.
    ich würde das ganze nicht mit einem alert machen, sondern mit ner einfachen html ausgabe "keine rechte blabla" und dann einen link zum start oder dann mit einem <meta > nach 5 sekuden automatisch weiterleiten.
    gruss uli

    1. schreib doch einfach per echo in den head:

      <meta http-equiv="refresh" content="1; URL=http://deineseite.de">

  2. Hallo Patrick,

    die("<SCRIPT LANGUAGE="JAVASCRIPT">alert('Du musst dich erst einloggen!')</SCRIPT>");
    header("Location: index.php");

    die(...) bewirkt, dass der Text, den Du der Funktion übergibst, ausgegeben wird und dann das Programm *sofort* beendet wird. Zum Location-Header kommt er gar nicht. Der Location-Header ist desweiteren nicht korrekt geformt, es _muss_ immer eine Absolute URL drin stehen, bei Dir steht nur index.php. Außerdem _kannst_ Du _vor_ dem Header _keinen_ Inhalt ausgeben, das geht einfach nicht. Zuerst kommt immer der Header, danach der Inhalt. Du kannst auf diese Weise keine Meldung ausgeben.

    Also:

    Entweder, Du leitest einfach so weiter:

    $dir = dirname ($_SERVER['PHP_SELF']);
    if ($dir{strlen($dir)-1} != '/') {
      $dir .= '/';
    }
    header ('Location: http://'.$_SERVER['HTTP_HOST'].$dir.'index.php');

    Oder Du gibst einfach eine Fehlermeldungsseite mit einem Link aus:

    echo 'Fehler - erst einloggen....';
    echo '<a href="index.php">Zur Startseite</a>';
    exit;

    Beides zusammen geht nicht.

    Viele Grüße,
    Christian

    --
    Ich bin ein Bandbreitenverschwender. Meine Signatur tut mir leid. Ehrlich!
    1. Hi,

      Der Location-Header ist desweiteren nicht korrekt geformt, es _muss_ immer eine Absolute URL drin stehen, bei Dir steht nur index.php.

      Meiner Meinung nach nicht korrekt!! Ich habe auch eine einfach umleitungsdatei in der NUR index.php drin steht:

      <?php
      header("Location: index.php");
      ?>

      Und das funktioniert!

      Christian

      1. Hallo Christian,

        Und das funktioniert!

        Funktionieren heißt nicht, dass es korrekt ist. Der offizielle Standard schreibt vor, dass das eine absolute URI sein _muss_: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.30

        Jeder Browser, der trotzdem eine relative akzeptiert, ist zu lasch. Die Tatsache, dass das in den meisten Browsern funktioniert, heißt noch lange nicht, dass es überall funktionieren muss, es gibt durchaus HTTP-Clients, die das nicht akzeptieren. (Wenn Du mit PHP über fopen() eine solche HTTP-Resource einlesen willst, funktioniert es nicht mehr; bei einer absoluten URI kannst Du mit PHP dagegen den Inhalt der Seite auslesen, auf die weitergeleitet wird)

        Viele Grüße,
        Christian

        --
        Ich bin ein Bandbreitenverschwender. Meine Signatur tut mir leid. Ehrlich!
  3. Hallo

    danke für die schnelle antwort.

    ich habe es jetzt doch mit java gemacht ...

    session_start();

    if (!session_is_registered('user'))
    {
    die("<SCRIPT LANGUAGE="JAVASCRIPT">alert('Du musst dich erst einloggen!');self.location.href="index.php"</SCRIPT>");
    }

    1. Hallo Patrick,

      ich habe es jetzt doch mit java gemacht ...

      nein, du hast es mit java_script_ gemacht.

      die("<SCRIPT LANGUAGE="JAVASCRIPT">

      hier fehlt das Attribut type.

      self.location.href="index.php"</SCRIPT>");

      was ist, wenn der User kein js (aktiviert) hat?

      Grüße aus Nürnberg
      Tobias

      --
      Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
      1. die("<SCRIPT LANGUAGE="JAVASCRIPT">
        hier fehlt das Attribut type.

        was fehlt?? kenn mich nicht so aus.

        self.location.href="index.php"</SCRIPT>");
        was ist, wenn der User kein js (aktiviert) hat?

        was kann ich denn sonst machen??

        mfg,
        patrick

        1. Hallo Patrick,

          die("<SCRIPT LANGUAGE="JAVASCRIPT">
          hier fehlt das Attribut type.
          was fehlt?? kenn mich nicht so aus.

          das Attribut type:

          <script type="text/javascript" language="JavaScript">

          das language kannst Du auch weglassen, es schaded nicht, aber es bringt auch nichts, also:

          <script type="text/javascript">

          self.location.href="index.php"</SCRIPT>");
          was ist, wenn der User kein js (aktiviert) hat?
          was kann ich denn sonst machen??

          Die Meldung normal in die HTML-Seite reinschreiben und ein Link auf die Startseite daneben setzen.

          Viele Grüße,
          Christian

          --
          Ich bin ein Bandbreitenverschwender. Meine Signatur tut mir leid. Ehrlich!