Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
header - Probleme [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
header - Probleme


 
Tannim
18-08-2006, 06:17 
 
Ich habe folgendes Problem.
Ich generiere eine komplette Index-Seite.
Wenn man nun auf einen der vielen Links klickt, genannt "Login",
ist es dem Benutzer möglich, sich in einen gesicherten Bereich einzuloggen.
Wenn die Daten geprüft wurden und alles okay ist, wird der Nutzer reingelassen.

Nun habe ich mein Script so veranlasst, dass es, bei korrektem Login, einen header() sendet.

Dabei bin ich nun aber auf diese unschöne Fehlermeldung gestoßen:
Warning: Cannot modify header information - headers already sent by (output started at /srv/www/web8/html/misc/game/index.php:5) in /srv/www/web8/html/misc/game/index.php on line 90

Hab mich also ein bissl kundig gemacht und weiß nun, wieso und warum ich diesen Fehler bekomme.
Weil ich ja durch das generieren der Seite bereits Daten wie z.b. html, head oder div gesendet habe, was sich also mit meiner header Location beißt.

Jetzt frage ich mich, wie ich dieses Problem lösen kann OHNE zu vermeiden, VOR der header() Geschichte schon etwas zu senden.
Gibt es da eine Möglichkeit
Vlt einen zusätzlichen Parameter, oder eine andere Funktion, die im selben Fenster eine neue Seite bei korrekte Login läd oder ähnliches.

Für den schnellen Leser:
Ich habe eine Seite "index.php", die als Menupunkt u.a. Login hat. Bei korrektem Login die Seite main.php laden soll. Beide Seiten haben einen unterschiedlichen html Kopf, was bei korrektem Login die Funktion header() ausschließt. Wie kann ich einen Login im selben Fenster wie realisieren?

Danke im voraus.

Tannim

 
garyx7de
18-08-2006, 06:28 
 
@Für den schnellen Leser: danke ist hilfreich ^^


ob_start() in die erste zeile schreiben :) sollte helfen

 
Daniela
18-08-2006, 07:56 
 
mit ob_start startest du die bufferung, die aber auch irgendwann wieder entleert werden muss ;)


<?php
ob_start();
?>

// HTML Ausgabe

<?php

if ($wl_ziel) {header ("Location: index.php?content=$wl_ziel");}

ob_end_flush();

?>

 
hhcm
18-08-2006, 07:57 
 
Hilft sicherlich, ist aber für sowas nicht gedacht.

Ein Login Formular kann man doch per POST an ein Script versenden.
In diesem muss keinerlei ausgabe gemacht werden.

Einfach nur das Login in dem Script prüfen und dann mit header weiterleiten.

 
garyx7de
18-08-2006, 15:22 
 
Original geschrieben von Daniela
mit ob_start startest du die bufferung, die aber auch irgendwann wieder entleert werden muss ;)

macht php automatisch :)

 
Tannim
18-08-2006, 16:43 
 
Okay, vilen dank für die antworten.
hab s jetzt so eingerichtet, dass der header() sofern er aufgerufen wird, das erste ist, was passiert. und das funzt es auch.

daraus ergibt sich leider noch ein problem:
nun ruft er nach erfolgreichem login zwar die neue php seite auf (main.php), allerdings, ist diese, obwohl ich echo '<head'>; usw. völlig headerlos, sprich sie beginnt mit dem ersten tag nach <body>.
was auch den unschönen nachteil hat, dass die css-datein, die im header teil der html seite steht, nicht geladen wird. :(

hb schonmal ein bissl im php handbuch geschmökert, hab da etwas gefunden, wenn man als zweiten parameter im header() false übergibt ... aber irgendwie tut sich da leider nix.

Tannim

 
wahsaga
18-08-2006, 16:46 
 
Irgendwie scheinst du die Begriffe durcheinanderzuwerfen.

HTTP-Header, wie sie von header() ausgelöst werden, haben mit dem <head>-Bereich eines HTML-Dokumentes herzlich wenig zu tun. Und letzteren solltest du natürlich nach wie vor ausgeben, wenn du deine HTML-Daten ausgibst - aber natürlich erst nach eventuellen header()-Aufrufen.

 
jahlives
18-08-2006, 16:52 
 
Erstmal: header() !== <head>

Das eine ist ne PHP Fkt das andere ein HTML Tag
Bau dir ne php Datei (nenn sie von mir aus head.php) und speichere dort drin alles von <head> bis </head> in einen String. Diese Datei inkludierst du in die fragliche Datei. Somit musst du in den einzelnen PHP Seiten nur noch den Code von <body> -und mit </html> schreiben.
In dieser Include Datei machst du am besten als erstes alle header()-Sachen, aber da eh alle Daten auf den String gespeichert werden erzeugt die Datei keine Ausgabe

//deine_seite.php
include('header.php');
echo $str;
?>
<body>
Rest des Codes
</body>
</html>

Gruss

tobi

 
Tannim
18-08-2006, 17:05 
 
vlt ließt es sich so, als würde ich das verwechseln, das liegt aber auch daran, dass er mit der header() funktion mir eben den header teil der html seite unterschlägt und ich weiß nicht wieso.

mein source code sieht nach erfolgreichem login und aufruf der header() funktion so aus:


<?php
session_start();
include "inc/config.php";
include "inc/functions.php";
select_user();
//initialize
$user = select_user(); // SPIELER SELEKTIEREN
$date = date_time_now();
if (!logged_in())
{
echo 'Du bist nicht oder nicht mehr eingeloggt! Versuche es auf der
<a href="index.php?site=login">Index-Seite</a> erneut.';
}
else
{
echo '<html>'."\n";
echo ' <head>'."\n";
echo ' <title>Game</title>'."\n";
echo ' <link rel="stylesheet" type="text/css" href="inc/main.css">'."\n";
echo ' <script src="inc/main.js" type="text/javascript"></script>'."\n";
echo ' </head>'."\n";
echo ' <body>'."\n";
echo ' <div id="root">'."\n";
echo ' <div id="header">'."\n";
include 'inc/header.php';
echo ' </div>'."\n";
echo ' <div id="main">'."\n";
include 'inc/main.php';
echo ' </div>'."\n";
echo ' <div id="footer">'."\n";
include 'inc/footer.php';
echo ' </div>'."\n";
echo ' </div>'."\n";
echo ' </body>'."\n";
echo '</html>'."\n";
}
?>


diesen teil:

echo '<html>'."\n";
echo ' <head>'."\n";
echo ' <title>Game</title>'."\n";
echo ' <link rel="stylesheet" type="text/css" href="inc/main.css">'."\n";
echo ' <script src="inc/main.js" type="text/javascript"></script>'."\n";
echo ' </head>'."\n";
echo ' <body>'."\n";


läst er einfach beim erzeugen der seite weg.

Tannim

 
jahlives
18-08-2006, 17:13 
 
error_reporting(E_ALL);

?

Gruss

tobi

 
Tannim
18-08-2006, 17:18 
 
okay, hab ich jetzt drinne ... jetzt geht es und er sendet auch die html head daten mit ... aber wieso?
was hat das senden der html head daten mit

error_reporting(E_ALL);

zutun?

bitte um kurze erklärung. danke!

Tannim

 
hall
18-08-2006, 17:22 
 
was hat das senden der html head daten mit error_reporting(E_ALL); zutun?

nix

http://de2.php.net/manual/de/function.error-reporting.php

php.net sollte dein freund werden

 
Tannim
18-08-2006, 17:26 
 
eben ...
es wird aber nach dem einfügen dieser code-zeile keine fehlermeldung ausgespcukt, sondern stattdessen, der html header einwandfrei geladen, ohne jede fehlermeldung.
hau ich die codezeile wieder raus, verschwindet der html header aber wieder ... ich bin :confused: :confused: :confused:

Tannim


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:15 Uhr.