Ankündigung

Einklappen
Keine Ankündigung bisher.

Header Probleme!

Einklappen

Neue Werbung 2019

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

  • Header Probleme!

    Hej!

    Ich hab andauernd Probleme mit Header-Weiterleitungen. Das eine mal funktioniert ein MySQL-Query nur ohne anschließenden Header, die andere tausendmal funktioniert eine Weiterleitung nicht, die in einer if-schleife drin steht. Das Ganze sieht so aus und ist mir schon so oft passiert:
    Code:
    if(mysql_num_rows(mysql_query("SELECT * FROM forum_themen WHERE Thema='".$_POST["titel"]."'"))!=0){Header("Location: new_topic.php?error=2");}
    Ich kann hier nirgends ein Fehler finden und wenn ich das ganze aus dem Script rausnehme und in eine neue Datei schreibe geht's, daher das script vorher.

    Code:
    session_start();
     include("../../sql.php");
     include("check.php"); 
     if(isset($_GET["sid"]) && isset($_GET["sname"])){
      $session="&sid=".$_GET["sid"]."&sname=".$_GET["sname"];
     }
     else{$session="";}
     if(isset($_GET["action"]) && $_GET["action"]=="save"){
      if($_POST["titel"]==""){Header("Location: new_topic.php?error=1".$session."");}
    der Header hier geht im übrigen auch nicht, es werden aber auch keine fehler angezeigt, sondern das Script ganz normal ausgeführt, als ob es diesen Header gar nicht gäbe.

    Wenn ich jetzt allerdings ein die() hinter die beiden Header setzte dann funktioniert's plötzlich! D.h. wenn ein die() da ist führt er die Header die min. 1 zeile zuvor ausgeführt hätten werden sollen, anstatt des die()'s aus.........!!??!?!?

    Ich verstehe es echt nicht.

    kann mir jmd. helfen?

    DANKE!

    Calexico


  • #2
    Hi, bei header gibts immer son paar sachen zu beachten.

    Du darfst vorm Header keine Ausgabe machen.

    Bei dem Beispiel Hier wird er dir eine Fehlermeldung ausgeben.

    Code:
    Zeile 1: <?php
    Zeile 2:
    Zeile 3: echo "Dies wird nicht gehen";
    Zeile 4: header(......);
    Zeile 5:
    Zeile 6: ?>
    Bei dem folgendem Beispiel gibts keine Fehlermeldung.

    Code:
    Zeile 1: <?php
    Zeile 2:
    Zeile 3: header(......);
    Zeile 4: echo "Dies wird gehen";
    Zeile 5:
    Zeile 6: ?>

    Es gibt auch eine Fehlermeldung wenn du diese hier machst.
    In diesem Fall gilt das html was über dem php script steht schon als Ausgabe und es gibt nen Fehler.

    Code:
    Zeile 1: <html>
    Zeile 2: <?php
    Zeile 3: header(......);
    Zeile 4: echo "Dies wird nicht gehen";
    Zeile 5:
    Zeile 6: ?>
    Auch der Folgende Text wird einen Fehler ausgeben.
    In diesem Fall ist das Leerzeichen in der ersten zeile schon eine Ausgabe und php gibt wieder ne Fehlermeldung.

    Code:
    Zeile 1: 
    Zeile 2: <?php
    Zeile 3: header(......);
    Zeile 4: echo "Dies wird nicht gehen";
    Zeile 5:
    Zeile 6: ?>

    Eigenlich ist das ganz leicht wenn man sich an die Punkte Hält:

    - keine html ausgabe vor dem Header
    - keine leerzeichen ausgeben vor dem Header
    - keine echo`s oder print`s vor dem Header

    Natürlich dürfen in Datein die man mit include läd auch keine ausgaben stattfinden.

    Schau mal deine Datein durch ich vermute das du irgenwo schon eine Ausgabe drin hast.

    Schau dir auch diesen Befehl mal an

    Code:
    ob_start();
    Der sollte irgenwo am anfang der Datei stehe wo auch die Session gestartet wird.


    mfg


    Nils F.

    Kommentar


    • #3
      hmmmm.........das war mir eigentlich fast alles klar.

      aber ich konnte keine ausgabe in diesem sinne finden

      mein komplettes script bis zu den beiden headern sieht so aus:
      Code:
      <?php
       session_start();
       include("../../sql.php");
       include("check.php"); 
       if(isset($_GET["sid"]) && isset($_GET["sname"])){
        $session="&sid=".$_GET["sid"]."&sname=".$_GET["sname"];
       }
       else{$session="";}
       if(isset($_GET["action"]) && $_GET["action"]=="save"){
        if($_POST["titel"]==""){Header("Location: new_topic.php?error=1".$session."");}
        if(mysql_num_rows(mysql_query("SELECT * FROM forum_themen WHERE Thema='".$_POST["titel"]."'"))!=0){Header("Location: new_topic.php?error=2");}
      sql.php:
      Code:
      <?php
      $server="localhost"; // MySQL-Host angeben
      $username="root"; // MySQL-User angeben
      $password=""; // Passwort angeben
      $database_name="minis"; // Gewuenschte Datenbank angeben
      
      $connection=mysql_connect($server, $username, $password) or die("Verbindungsversuch fehlgeschlagen");
      
      mysql_select_db($database_name, $connection) or die("Konnte die Datenbank nicht waehlen.");
      
      ?>
      und check.php:
      Code:
      <?php
      if(isset($_GET["sid"]) && isset($_GET["sname"])){
       $sqlxy="SELECT * FROM forum_session WHERE id = '".$_GET["sid"]."' AND name = '".$_GET["sname"]."'";
       $resultxy=mysql_query($sqlxy);
       if(mysql_num_rows($resultxy)==0){session_destroy(); $user="no";}
       while($row=mysql_fetch_array($resultxy)){
        if(time()<$row["next"]){
         $next=time() + 7200;
         $sqlxyz="UPDATE forum_session SET time = '".time()."' AND next = '".$next."' WHERE name = '".$_GET["sname"]."' AND ID = '".$_GET["sid"]."'";
         $resultxyz=mysql_query($sqlxyz);
         $user="yes";
        }
       }
       }
       else{$user="no";}
      ?>
      ich finde hier keine ausgabe! oder zählt als ausgabe auch eine leerzeile zur besseren übersicht innerhalb des scripts??

      Kommentar


      • #4
        Re: Header Probleme!

        Zitat von Calexico
        Code:
        if (mysql_num_rows(mysql_query("SELECT * FROM forum_themen WHERE Thema='".$_POST["titel"]."'"))!=0)
        {
          Header("Location: new_topic.php?error=2");
        }
        Ich kann hier nirgends ein Fehler finden
        Ich schon. http://de.php.net/header

        Wenn ich jetzt allerdings ein die() hinter die beiden Header setzte dann funktioniert's plötzlich!
        Wenn Du den Client mit header('Location') wegschickst, mußt Du auch das Script mit exit beenden.

        Sowas ist ganz schlecht:
        Code:
         if(isset($_GET["sid"]) && isset($_GET["sname"])){ 
          $session="&sid=".$_GET["sid"]."&sname=".$_GET["sname"]; 
        #...
        if(isset($_GET["action"]) && $_GET["action"]=="save"){ 
          if($_POST["titel"]=="")
        {
          Header("Location: new_topic.php?error=1".$session."");
        }
        Falscher Session_name
        falscher URL
        das Schreiben des Session File wird nicht forciert
        fehlendes exit nach header('Location')

        Kommentar


        • #5
          okay dann liegt's wohl am exit gleich ausprobieren!!

          zu den sessions, die sind gar keine. ich benutze nur die sessionid, die mit dem in der db gespeichertem verglichen wird, damit ich weiß wer eingeloggt ist und wer nicht usw.

          Kommentar


          • #6
            Zitat von Calexico
            okay dann liegt's wohl am exit gleich ausprobieren!!
            Das http://de.php.net/header solltest Du ebenfalls durchlesen:

            Zitat von Handbuch
            Anmerkung: HTTP/1.1 verlangt einen absoluten URI inkl. dem Schema, Hostnamen und absoluten Pfad als Argument von Location:, aber manche Clients akzeptieren auch relative URIs. Gewöhnlich können Sie mittels $_SERVER['HTTP_HOST'], $_SERVER['PHP_SELF'] und dirname() aus einem relativen Link einen absoluten URI selbst erstellen:

            Kommentar


            • #7
              hab's zwar immer noch nicht ausprobiert aber die header die ich bisher immer ohne exit; gemacht habe, die am Ende eines php-scripts stehen funktioniern. liegt dann wahrscheinlich daran, dass nichts mehr folgt, ne??

              Kommentar


              • #8
                Zitat von Calexico
                liegt dann wahrscheinlich daran, dass nichts mehr folgt?
                Ich habe mir den restlichen Quelltext nicht angeguckt. Weitere semantische Fehler sind nicht ausgeschlossen.

                Prinzipiell isses so, daß der Client bei header('Location') ja weggeschickt wird. Damit hat sich dann die restliche Bearbeitung des Scriptes erledigt.

                Kommentar

                Lädt...
                X