Weiterleitung funzt nicht



  • <form method="post" action="<? echo $PHP_SELF ?>">
    <table>
    <tr>
    <td>Name:</td>
    </tr>
    <tr>
    <td><input name="nickname" type="text"> </td>
    </tr>
    <tr>
    <td>Passwort:</td>
    </tr>
    <tr>
    <td><input name="password" type="password"> </td>
    </tr>
    </table>
    <br>
    <input name="login" type="submit" value="Login">

    </form>

    <?
    if(login) { Login(nickname, $password);
    }
    ?>

    <?
    function Login($nickname, $password)
    {

    $db = mysql_connect("127.0.0.1", "", "");
    mysql_select_db("Administration", $db);

    abfrage="SELECTFROMAdministrators";abfrage = "SELECT * FROM Administrators"; ergebnis = mysql_query($abfrage, $db);

    while(myrow=mysql_fetch_row(myrow = mysql\_fetch\_row(ergebnis))
    {
    if($myrow[0] == $nickname && $myrow[1] == $password)
    {
    echo "dat funzt schon mal";
    header("Location: administration.php");
    }
    }
    echo mysql_error();
    mysql_close();
    return 1;

    }

    ?>

    Warum funktioniert die Weiterleitung nicht und wie müsste ich es richtig machen?


  • Mod

    es darf kein header gesendet werden - sonst funktioniert header() logischerweise nicht mehr 😉

    lass das echo also weg



  • Alle echos? Auch das bei der action-funktion des Formulars?


  • Mod

    Original erstellt von Tobsen:
    Alle echos? Auch das bei der action-funktion des Formulars?

    denk mal scharf nach:
    header() sendet header informationen zum client!

    wann kann man nur header informationen zum client senden?
    wenn man noch keinen vollstaendigen header geschickt hat!

    kann man eine echo machen, bevor der header vollstaendig gesendet wird?
    nein, kann man nicht. ein echo schliesst den header ab.

    warum funktioniert
    echo " ";
    header();
    nicht?
    rate mal 🙂

    du koenntest auch das PHP Manual lesen:

    Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. It is a very common error to read code with include(), or require(), functions, or another file access function, and have spaces or empty lines that are output before header() is called. The same problem exists when using a single PHP/HTML file.



  • ehrlich gesagt, bin ich ein völliger newbie und weiß gar nicht, was ein header in dem Zusammenhang ist. Ich kenn header bisher nur aus c++. Aus deiner Antwort schließe ich, dass ich vor dem header-aufruf kein echo machen darf, also auch nicht im Formular (versteh allerdings nicht, warum ein echo den header abschließt. Kannst du mir vielleicht en link zu 'ner Seite schicken, wo das mit dem Header erklärt wird (vor allem auch was das genau ist. Danke aber für deine Antwort.
    MfG

    Tobsen



  • eine Ausgabe in deinem Script (zB. per echo, printf, fehler) sendet automatisch einen Header, wenn noch keiner gesendet wurde.
    Da immer nur ein Header (so einer Art Datenbeschreibung an den Browser, was er jetzt für Daten zugeschickt bekommt) gesendet werden darf schlägt dein Aufruf von header() dann natürlich fehl!

    Du solltest also auch dafür sorgen, dass auch PHP Befehle keine Fehlermeldungen ausgeben (bevor du header() aufrufst) (durch voranstellen von @)!

    [ Dieser Beitrag wurde am 30.11.2002 um 19:24 Uhr von flenders editiert. ]



  • ok, danke!



  • Ich bekomms einfach nicht hin! Könnt ihr es mir vielleicht mal an meinem Beispiel zeigen, wie es aussehen müsste!? Ich habe alle echos weggemacht und trotzdem bekomme ich folgende Fehlermeldung:

    Warning: Cannot add header information - headers already sent by (output started at C:\FoxServ\www\admin_login.php:4) in C:\FoxServ\www\tt_homepage\administration\admin_login.txt on line 46

    MfG

    Tobsen



  • Du musst eigentlich nur den PHP-Code vor deinem HTML-Formular plazieren!
    Damit sollte es eigentlich funktionieren 🙂



  • Ich weiß, dass ihr mich jetzt für doof haltet, aber daran kann ich nichts ändern... es funzt immer noch nicht. Also hier der Code:

    <?
    function Login($nickname, $password)
    {

    $db = mysql_connect("127.0.0.1", "", "");
    mysql_select_db("Administration", $db);

    abfrage="SELECTFROMAdministrators";abfrage = "SELECT * FROM Administrators"; ergebnis = mysql_query($abfrage, $db);

    while(myrow=mysql_fetch_row(myrow = mysql\_fetch\_row(ergebnis))
    {
    if($myrow[0] == $nickname && $myrow[1] == $password)
    {
    header("Location: administration.php");
    }
    // else { echo "<p class='warning'>ACHTUNG: Passwort oder Benutzername sind falsch. Mit diesem
    // Passwort bzw. Benutzernamen sind Sie nicht berechtig diese Seite zu betreten.</p>";
    // }

    }
    // echo mysql_error();
    mysql_close();
    return 1;

    }

    ?>
    <?
    if(login) { Login(nickname, $password);
    }
    ?>
    <form method="post" action="admin_login.php">
    <p class="warning">Achtung diese Seite ist ausschließlich den Administratoren vorbehalten!</p>
    <table>
    <tr>
    <td>Name:</td>
    </tr>
    <tr>
    <td><input name="nickname" type="text"> </td>
    </tr>
    <tr>
    <td>Passwort:</td>
    </tr>
    <tr>
    <td><input name="password" type="password"> </td>
    </tr>
    </table>

    <span class="normal"><a href="">Passwort vergessen?</a></span><br><br>
    <input name="login" type="submit" value="Login">

    </form>

    Fehlermeldung:

    Warning: Cannot add header information - headers already sent by (output started at C:\FoxServ\www\admin_login.php:4) in C:\FoxServ\www\tt_homepage\administration\admin_login.txt on line 18



  • Vielleicht darf sich dein header() nicht in einer Schleife befinden 🙄
    Ansonsten find ich jetzt grad auch nichts


  • Mod

    zeig mal zeile 4 aus admin_login.php



  • Das ganze sieht jetzt folgendermaßen aus:

    <?
     function Login($nickname, $password)
    {
     $db = mysql_connect("127.0.0.1", "**", "**");
     mysql_select_db("Administration", $db);
    
     $abfrage = "SELECT * FROM Administrators";
     $ergebnis = mysql_query($abfrage, $db);
    
     while($myrow = mysql_fetch_row($ergebnis))
     {
      if($myrow[0] == $nickname && $myrow[1] == $password)
     {
      header("Location: administration.php");
    }
     else { echo "<p class='warning'>ACHTUNG: Passwort oder Benutzername sind falsch. Mit diesem
     Passwort bzw. Benutzernamen sind Sie nicht berechtig diese Seite zu betreten.</p>";
     } 
    
    } 
    // echo mysql_error();
    mysql_close();
    return 1;
    
    }
    
    ?>
    
    <?
    if($submit) 
    {
    Login($nickname, $password);
    }
    ?>
    
    <html>
     <head><title></title>
      <link rel="stylesheet" type="text/css" href="tt_homepage/general_usage/formate.css">
      <script src="tt_homepage/general_usage/functions.js" type="text/javascript"></script>
     </head>
      <body>
          <? include ('tt_homepage/general_usage/divs.txt') ?>
    
        <div style="position:absolute; top:22px; left:0px; width:100%; height:100%; background-color:lightgrey; 
                    border-width:2px; border-color:darkblue; border-style:solid; border-top:none;">
          <br> 
          <? include('tt_homepage/general_usage/men_adv.txt') ?>
        </div>
    
         <div style="position:absolute; top:22px; left:20%; height:99%; background-color:lightgrey; z-index:1; overflow:auto;">
           <br> 
    
              <form method="post" action="admin_login.php">
              <p class="warning">Achtung diese Seite ist ausschließlich den Administratoren vorbehalten!</p>
              <table>
                <tr>
                <td>Name:</td>
                </tr>
                 <tr>
                <td><input name="nickname" type="text"> </td>
               </tr>
                <tr>
                <td>Passwort:</td>
               </tr>
                <tr>
                 <td><input name="password" type="password"> </td>
                </tr>
               </table> 
    
                 <span class="normal"><a href="">Passwort vergessen?</a></span><br><br>
                <input name="submit" type="submit" value="Login">
    
                     </form>
    
         </div>
    
     </body>
    </html>
    

    Bekomme jetzt auch keine Fehlermeldungen mehr aber es tut sich auch nichts, absolut gar nichts.



  • while(myrow=mysql_fetch_row(myrow = mysql\_fetch\_row(ergebnis))
    {
    if($myrow[0] == $nickname && $myrow[1] == $password)
    {
    header("Location: administration.php");
    }
    else
    {
    echo "<p class='warning'>ACHTUNG: Passwort oder Benutzername sind falsch. Mit diesem Passwort bzw. Benutzernamen sind Sie nicht berechtig diese Seite zu betreten.</p>";
    }
    }

    Das kann ja nicht gut gehen:
    Wenn deine Login-Daten nicht gleich die ersten aus der Tabelle sind wird etwas ausgegeben!
    Mach doch die Bedingung einfach mit in die SQL Abfrage mit rein und werte die dann aus!



  • stimmt, du hast recht, aber in diesem Fall sind es wirklich die ersten und es funktionier trotzdem nichts. Weder Fehlermeldung noch Weiterleitung



  • <?php
      // laut www.php.net/header solltest du möglichst immer einen absoluten Pfad angeben (nach HTTP/1.1 erforderlich)
      header("Location: http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/administration.php");
      // und dafür sorgen, dass das restliche Script nicht mehr ausgeführt wird
      exit;
    ?>
    

    Also im Zusammenhang irgendwie so:

    <?
      $abfrage = "SELECT * FROM Administrators WHERE user = $nickname";
      $ergebnis = mysql_query($abfrage, $db);
    
      if ($userdata = mysql_fetch_row($ergebnis))
      {
        if($userdate['pass'] == $password)
        {
          header("Location: http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/administration.php");
          exit;
        }
        else echo "<p class='warning'>ACHTUNG: Passwort falsch. Mit diesem Passwort sind Sie nicht berechtig diese Seite zu betreten.</p>";
      }
      else echo "<p class='warning'>ACHTUNG: Benutzername falsch. Sie sind nicht berechtig diese Seite zu betreten.</p>";
    ?>
    


  • Hey vielen Dank! Wenn ich jetzt auf den submit-button drücke öffnet sich eine neue Seite, allerdings nur für 1 Sekunde (oder noch kürzer) und ich kann darauf 2 mysql-fehlermeldungen erkennen. Ich müsste es irgendwie schaffen, dass sich die Seite nicht wieder sofort schließt, dann kann euch auch die Fehlermeldungen sagen. Gibts dafür vielleicht auch 'nen Tipp?
    MfG

    Tobsen

    Ps: Vielen Dank für deine Hilfe flenders!!!!



  • nimm einfach kurz die weiterleitung (header ) raus .. auskommentieren, und les dir die fehlermeldungen durch.
    hast du den mysql server an? sind daten in der tabelle? ist die query richtig? kommt also ein result zurück und enthält er daten?
    sowas einfach mal nachschaun 🙂



  • Ok, habe ich soweit gemacht. @elise danke für den Hinweis. Hatte es in der Zwischenzeit schon mittels screenshot 🙄 gemacht und die Fehler behoben. Aber nun bekomme ich folgenden Fehler:

    Parse error: parse error, unexpected T_ELSE in C:\FoxServ\www\admin_login.php on line 20

    Line 20 ist folgende:
    else echo "<p class='warning'>ACHTUNG: Passwort falsch. Mit diesem Passwort sind Sie nicht berechtig diese Seite zu betreten.</p>";
    ...

    (siehe flenders post). Ich bin euch wirklich dankbar für die Hilfe!
    MfG

    Tobsen

    [ Dieser Beitrag wurde am 01.12.2002 um 10:45 Uhr von Tobsen editiert. ]



  • das sieht nach irgendeinem klammerfehler aus...

    zählen 🙂

    oder mehr code zeigen... also die gesamte if() ... else...


Anmelden zum Antworten