Header-Location-Frames geht net

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

  • Header-Location-Frames geht net

    Hi zusammen,

    Problem:

    Hab ne Seite mit Frames, welche Passwort geschützt sind.
    Frames: Oben, Unten, Links und Main.

    So, nun hab ich ne Seite, welche mir Daten aus ner Tabelle liest und diese ausgibt.
    Nun hab ich nen Button "Export" hinzugefügt, der mir die gesamte Tabelle als Text-Datei mit Semikolon-Trennzeichen zum download anbietet. Dazu les ich alle Tabellendaten aus der Datenbank formatiert in nen String ein und will den dann an die Datei "download.php" übergeben, wo die Datei erzeugt wird, downgeloaded wird und anschließend wieder gelöscht wird.

    Aber die Weiterleitung zu "download.php" funktioniert nicht. Der macht nix.


    PHP-Code:
    <?php
    session_start
    ();

    if(!
    session_is_registered('user')) {
        
    header("location:../login.php"); // Hier klappt das Weiterleiten
        
    die();
    }

    include(
    '../functions.php');
    include(
    '../configuration.php');
    ?>

    .
    .
    .

    <?php

      
    if(!connect()) {
        echo 
    "Verbindung zur Datenbank fehlgeschlagen!<br>";
      }

    ?>         
     

     <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
    <table>

    // Hier wird die Tabelle aufgebaut nach nem mySQL-Query


    </table>

    <?php

        
    if(isset($_POST['action']) && $_POST['action'] == 'exportiert') {

                
    $result mysql_query("SELECT *
                                    FROM "
    .MYSQL_TABLE."
                                    ORDER BY 'user_id' ASC;"
    );
           
            if (!
    $result) {
            echo 
    "- Ung&uuml;ltige Abfrage: " mysql_error(). "<br/>";
          }
          else {

            while (
    $row mysql_fetch_object($result)) {
              
    $file_line .= $row->user_id.";".
              
    $row->user_anrede.";".
              
    $row->user_vorname.";".
              
    $row->user_titel.";".
              
    $row->user_firma."\n"// sind noch mehr, aber egal
            
    }
     
             
    $_SESSION["download_data"] = $file_line;
         
    header("Location: http://www.google.com/");
            
    //header('refresh: 3; url=/download.php');   

            // geht beides nicht.                 
      
    }
    }
    ?>

    .
    .
    .

      <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
            <table>
              <tr>
              <td><input class="FORMbutton" name="senden" type="submit" value="Exportieren" style="width:100px;" size="1">
                      <input type="hidden" name="action" value="exportiert"></td>
          <tr>
        </table>
      </form>

    Wie im Quelltext geschrieben, funktioniert die Weiterleitung oben, wo ich den Login-Abfrage. Aber hier unten macht er gar nicht. Er reagiert gar nicht.

    Ist das ein Frame-Problem? Hab ich irgendwas falsch gemacht?

    Bin für jeden Tipp dankbar.



    Gruß Side

  • #2
    Re: Header-Location-Frames geht net

    RTFM!
    http://www.php.net/manual/de/function.header.php
    Beachten Sie, dass header() aufgerufen werden muss, bevor eine Ausgabe gesendet wurde, egal ob normale HTML Tags, leere Zeilen in einer Datei oder von PHP.
    (Es sei denn, du hättest zufälligerweise das output buffering auf on, was aber vermutlich nicht der Fall sein dürfte.)
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Hmm, also so hab ich das schonmal gemacht und das funktionierte damals auch:

      PHP-Code:
                  if(strcmp($hash_sha512$encrypted) == 0) {
                      if(
      $mode == 1) {
                          if(
      $handling == 'extract') {     
                        
      $sec 3;
                            echo 
      "- Die Daten wurden extrahiert.<br/>";
                            echo 
      "- Der Download der Datei beginnt in " $sec " Sekunden!"."<br>";
                        
      header('refresh: ' $sec '; url=/upload/download.php'); 
                      }
                      else {
                        
      unlink(DIR_TEMP.session_id()."_file.tmp");
                      }
                    } 
      Wie kann ich das dann lösen?

      Kommentar


      • #4
        Re: Re: Header-Location-Frames geht net

        Original geschrieben von wahsaga
        RTFM!
        http://www.php.net/manual/de/function.header.php


        (Es sei denn, du hättest zufälligerweise das output buffering auf on, was aber vermutlich nicht der Fall sein dürfte.)

        Shit, kann es sein, dass das "output buffering" beim XAMPP immer standardmässig auf on ist? Da geht es nämlich....

        Dat ist ja mal ne Sche....


        Und jetzt? Wie löst man das am besten? Über nen ganz normalen Link?

        Hätte halt schon gerne, dass ich beim Drücken des Buttons der Download (bzw. das Download-Skript) automatisch startet.

        Kommentar


        • #5
          Zum Einen: Beschäftige Dich mal mit dem Unterschied zwischen HTTP und HTML ... und mach' Dir klar das header() zu HTTP gehört ...

          Zum Anderen: Wenn Du Output Buffering verwenden willst ... warum setzt Du nicht vor das session_start() noch ein ob_start() ... !
          carpe noctem

          [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
          [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

          Kommentar


          • #6
            Original geschrieben von goth
            Zum Einen: Beschäftige Dich mal mit dem Unterschied zwischen HTTP und HTML ... und mach' Dir klar das header() zu HTTP gehört ...
            Sollte das jetzt nen Witz sein? Der Unterschied ist ja wohl mehr als klar, nur wusste ich die funktionsweise der Funktion header() nicht genau.


            Original geschrieben von goth
            Zum Anderen: Wenn Du Output Buffering verwenden willst ... warum setzt Du nicht vor das session_start() noch ein ob_start() ... !
            Vielleicht weil ich bis eben noch nicht wusste, dass es so etwas wie Output Buffering gibt bzw. es für sowas nötig ist? Jetzt da ich es weiß, werde ich es gerne mal ausprobieren.
            Und genau um solche Dinge herauszufinden habe ich diesen Beitrag ins forum gestellt, damit mir ein "erfahrener User" einen solchen Ratschlag geben kann.

            Kommentar


            • #7
              Original geschrieben von The Sidewinder
              Vielleicht weil ich bis eben noch nicht wusste, dass es so etwas wie Output Buffering gibt bzw. es für sowas nötig ist? Jetzt da ich es weiß, werde ich es gerne mal ausprobieren.
              Das solltest du m.E. aber eher nicht tun.

              output buffering kostet u.U. vermehrt Speicher, und ist für solche Fälle wie deinen eigentlich nicht gedacht.

              Dein Problem löst du besser mit einer sauberen Struktur - also erst mal die Eingabedaten verarbeiten und schauen, ob per Location-Header irgendwohin umgeleitet werden soll.
              Wenn nicht, dann erst danach im weiteren Scriptverlauf mit Ausgaben anfangen.
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                Original geschrieben von The Sidewinder
                Sollte das jetzt nen Witz sein? Der Unterschied ist ja wohl mehr als klar
                header('refresh: 3; url=/download.php'); klar

                Kommentar


                • #9
                  Wenn Du denn Slash meinst, der ist da so reingerutscht...der gehört da natürlich nicht hin. (ist beim Quelltext reinkopieren/anpassen passiert)

                  Kommentar


                  • #10
                    Ähm, ja. [COLOR=silver]der slash ist nicht so falsch, wie die tatsache, dass du einen "meta-befehl" verwendest! [/COLOR]

                    Kommentar


                    • #11
                      Ok ok, ich gebs zu, dann hab ich hier ne Wissenslücke :-)

                      Wo genau ist den das Problem? Klär mich bitte auf.
                      Meinst Du, dass der Befehl header() an dieser Stelle verwendet wird? Das war wie gesagt eine Unwissenheit meinerseits, da ich dachte, der Befehl header() hat ne andere funktionsweise.

                      Oder meinst Du das refresh oder url?

                      Zumindest funktioniert das jetzt so wie es will auch ohne "ob", indem ich die if-Anweisung ganz nach oben nach der Login-Überprüfung, so das keine Ausgabe vorher passiert.


                      Ich dachte immer, dass beim erzeugen von HTML-Seiten mittels PHP der Befehl header überall angewendet werden kann und dann bei der Generierung eben in den Header zu den anderen Meta-Daten geschrieben wird (mal jetzt ganz laienhaft ausgedrückt). Also das so ne Art Preprozessor des erledigt. Das dem nicht so ist, weiß ich ja jetzt.

                      Kommentar


                      • #12
                        Original geschrieben von TobiaZ
                        der slash ist nicht so falsch, wie die tatsache, dass du einen "meta-befehl" verwendest!

                        Kommentar

                        Lädt...
                        X