• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

header-Probleme

TZP

Neues Mitglied
N´abend.
Ich hab n Problem mit der header()-Funktion. Mein Code ist eigentlich recht simpel...einmal die index.php
PHP:
<?php
include "main_blog.php";
include "admin_login.php";
?>
Dann die main_blog.php
PHP:
<?php
//include "connectToServer.inc";
    /*
    myConnection();
    $result = mysql_query("SELECT * FROM eintraege") 
    or die(mysql_error());
    $anzahl = mysql_num_rows($result);
    */
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
    <head>
    <title>MainBlog</title>
    <style type="text/css">
        body{
            background-color:#4090BB;
            margin-left:20%;
            margin-right:auto;
            font-family:"Arial";
            font-size:16px;
            color:black;
        }
        .leftside{
            float:left;
            width:500px;
            background-color:#10BB10;
            border:groove;
        }
        
    </style>
    </head>

    <body>
        <div class="leftside">
            a
        </div>
    </body>
</html>
und die admin_log.php
PHP:
<?php
include "connectToServer.inc";
if($_REQUEST["form_login"] == "admin" && $_REQUEST["form_pass"] == "admin"){
    myConnection();
    header("Location:new_blog_entry.php");
    die;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
    <head>
    <title></title>
    <style type="text/css">
        body{
            background-color:#4090BB;
            margin-left:20%;
            margin-right:auto;
            font-family:"Arial";
            font-size:16px;
            color:black;
        }
        .rightside{
            margin-left:510px;
            width:200px;
            border:groove;
            height:auto;
            font-size:12px;
        }
    </style>
    </head>
    <body>
        <div class="rightside">
            <form method="post">
                <table>
                    <tr>
                        <td>Login:</td>
                        <td><input name="form_login" type="text" size="5" maxlength="10"></td>
                        <td>Pass:</td>
                        <td><input name="form_pass" type="text" size="5" maxlength="10"></td>
                    </tr>
                    <tr>
                        <td colspan=4 align="right"><input type="submit" value="Login"></td>
                    </tr>
                </table>
            </form>
        </div>    
    </body>
</html>
Das Problem: Wenn ich die admin-admin-Geschichte eingebe und auf Login klicke, kriege ich diese Meldung

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\meinBlog\main_blog.php:2) in C:\xampp\htdocs\meinBlog\admin_login.php on line 6

Jetzt hab ich mir sagen lassen, dass man auf Leerzeichen achten soll aber im PHP-Code ist nix mehr, soweit ich das beurteilen kann. Hab ich irgendwas verplant oder bin ich einfach nur zu doof? Das ist mein erstes PHP-Projekt aber ich glaube, mir fehlt noch irgendwas. ^^
Und wer noch Zeit hat um den Code an sich zu beurteilen, der sei herzlich willkommen. Ich will ja was lernen. :)

-bedank-
TZP
 
die header-aufforderungen muss noch vor includes und sogar kommentaren stehen, sonst wirds unwirksam.

Nils aka XraYSoLo
 
Aber er soll doch erst die Seite aufrufen, wenn das Login-feld richtig ausgefüllt wurde und wenn ich den header gleich als erste Zeile setze...wie fang ich dann die If ab?
 
Aber er soll doch erst die Seite aufrufen, wenn das Login-feld richtig ausgefüllt wurde und wenn ich den header gleich als erste Zeile setze...wie fang ich dann die If ab?
Das ist nicht ganz richtig.
Der Headder muss nur vor der ersten Ausgabe kommen. Du kannst also 1000 Abfragen vorher machen, aber vor der allerersten Ausgabe muss die header-Funktion kommen.
 
Da fehlt mir dann noch etwas Grundwissen, denn ich peil´s nich. :/ Ich hab vorher keine Ausgabe oder bezieht sich das auf die main-php? Wenn ja, wäre das doof.

Wenn ich die header gleich in die Main.php an erste Stelle setze, springt er automatisch auf die richtige Seite...das zwar ok aber nur bedingt richtig, weil der ganze Anmelde-kram fehlt. ^^
 
Da fehlt mir dann noch etwas Grundwissen, denn ich peil´s nich. :/ Ich hab vorher keine Ausgabe oder bezieht sich das auf die main-php? Wenn ja, wäre das doof.
Du bindest ja den Loginform in der index.php ein, oder? Wenn ja, dann führt dein POST auch zur index.php (weil action fehlt). Also müsstest du diese Abfrage ganz oben in der index.php setzen.

Oder du definierst action im form-tag auf eine Zwischenseite, wo denn die Benutzerdaten verifiziert und authentifiziert werden in zb. einer Session. Und du dann damit arbeitest.

Mfg
 
Ah...ich glaube, ich hab´s.

Jede Datei hat erst mal ein session_start() als Erstes bekommen. Dann hab ich der admin_login eine "action.." verpasst:

PHP:
<?php
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
    <head>
    <title></title>
    <style type="text/css">
        body{
            background-color:#4090BB;
            margin-left:20%;
            margin-right:auto;
            font-family:"Arial";
            font-size:16px;
            color:black;
        }
        .rightside{
            margin-left:510px;
            width:200px;
            border:groove;
            height:auto;
            font-size:12px;
        }
    </style>
    </head>
    <body>
        <div class="rightside">
            <form action="verify_admin.php" method="post">
                <table>
                    <tr>
                        <td>Login:</td>
                        <td><input name="form_login" type="text" size="5" maxlength="10"></td>
                        <td>Pass:</td>
                        <td><input name="form_pass" type="text" size="5" maxlength="10"></td>
                    </tr>
                    <tr>
                        <td colspan=4 align="right"><input type="submit" value="Login"></td>
                    </tr>
                </table>
            </form>
        </div>    
    </body>
</html>
und die landet dann in der verify_admin.php:

PHP:
<?php
session_start();
if($_REQUEST["form_login"] == "admin" && $_REQUEST["form_pass"] == "admin"){
    header("Location:new_blog_entry.php");
    die;
}
?>
und wenn das stimmt, komme ich -endlich- zum new_blog...sehr schön.
Zwei Fragen als Newbie...geht das auch kürzer oder ist das so?
Und warum brauch ich in der verify die Vars $_REQUEST anstatt $_SESSION? Liegt das daran, dass bei einem method="post" die Werte in $_REQUEST landen? Mir fehlt da noch ein wenig der Zusammenhang.
 
Und warum brauch ich in der verify die Vars $_REQUEST anstatt $_SESSION? Liegt das daran, dass bei einem method="post" die Werte in $_REQUEST landen? Mir fehlt da noch ein wenig der Zusammenhang.
$_REQUEST, bzw $_POST enthalten die vom method POST enthaltenden Daten in diesem Array.

$_SESSION ist ein Array, welches nur für die aktuelle Session aktiv ist. Diese kannst auch auch selbst setzen.
Einfaches Beispiel: if(loginok) { $_SESSION['eingelogt'] = "ja"; }
Damit ist die Var $_SESSION['eingelogt'] für die aktuelle Session gesetzt.

Mfg
 
Ah...dann lag ich ja gar nich falsch damit. :) Also könnte man theoretisch die REQUESTS in SESSION speichern aber das wäre doppelter Aufwand und daher unnötig. Gutgut...wieder was gelernt.

-bedank-
TZP
 
Noch ein Tipp. Du brauchst den Head Teil nur einmal, und zwar im von dir als erstes includierten File (hier die main_blog.php). Da kannst du auch das </body> und </html> weglassen und startest in der admin_login.php gleich mit dem Inhalt (lässt also den Headteil und <html> und <body> weg.)

Die beiden Seiten werden nämlich auf der index.php zusammengesetzt, und dann hast du quasi 2 mal das gleiche übereinander, nur mit anderem Inhalt.

Wenn du in der ersten includierten Seite im Headteil einen Style definierst, wird er für die restlichen includierten Seiten übernommen.

Hoffe, ich konnte dir bissel helfen.

Timmer
 
Geil..Zim, der Timmäh ruft. Das hab ich noch nie gesehen. :D
Dein Ansatz ist berechtigt. Allerdings kommt da noch Content rein, der aber erst funzt, wenn ich das mit dem new_blog habe. Trotzdem meinen Dank für deinen Blick in den Code!
 
Zurück
Oben