Fehlermeldung bei Login

Hi,
ich hab einen eigenen Login gecodet, nun kommt aber immer folgender Fehler wenn ich mich eingeloggt habe:

Code:

[code]<?php
session_start();
?>

<?php include("db.php"); $username = $_POST["email"]; $passwort = $_POST["password"]; $abfrage = "SELECT id, email, passwort, vorname, nachname FROM login WHERE email LIKE '$username' LIMIT 1"; $ergebnis = mysql_query($abfrage); $row = mysql_fetch_object($ergebnis); $name1 = $row->vorname; $name2 = $row->nachname; $user = "$name1 $name2"; $uid = $row->id; if($row->passwort == $passwort) { $_SESSION["username"] = $user; $_SESSION["uid"] = $uid; header ("Location: index/index.php"); } else { header ("Location: index.php?fehler=login"); } ?> [/code]

Was kann ich dagegen tun?

MfG

Hi,

wenn du das wirklich selbst gecodet hast solltest du die Fehlermeldung eignetlich deuten und beheben können :wink:

Hier findet schlichtweg einfach vor dem Header bereits eine Ausgabe statt, etwa die Leerzeile zwischen den 2 PHP-Parts, die dafür sorgt dass im Nachhinein die Header-Weiterleitungen nicht funktionieren.

Ich hab es bereits auf einem anderen Webspace (Funpic) getestet und dort hatte es einwandfrei funktioniert!?

Welche 2 PHP-Parts meinst du?

Vielen Dank schonmal für die Hilfe.

MfG

In der Nähe von Zeile 5…

Dort wo ?> endet und <?php beginnt.

[quote=“user123”]Ich hab es bereits auf einem anderen Webspace (Funpic) getestet und dort hatte es einwandfrei funktioniert!?[/quote] Ich habe festgestellt, dass einige Hoster eine nachträgliche Umleitung noch nach bereits getätigter Ausgabe ermöglichen - ob das nun sinnvoll ist oder nicht, da kann man sich drüber streiten…

Ich hab die Leerzeile weggegeben, funktioniert aber trotzdem nicht!

Jetzt steht statt “output started at xxx/www/xxx/login.php:5” “output started at xxx/www/xxx/login.php:4”

Der selbe Fehler nur eine Zeile weiter oben.

An der Stelle… [code]?>

<?php[/code] ...liegt auch schon ein Zeilenumbruch vor. Die beiden Tags müssen direkt aneinander anschließen, wobei sich mir da der Sinn nicht ganz erschließt, denn du kannst den schließenden sowie den öffnenden auch ganz wegnehmen.

Ok, das funktioniert jetzt. Danke!

Allerding habe ich jetzt im Geschützen Bereich den selben Fehler.

Zuerst steht folgender Code:


<?php 
session_start(); 

if(!isset($_SESSION["username"])) 
   { 
   header ("Location: ../index.php");
   exit; 
   } 

/* Includes */

include("functions/profil_image.php");

?>
<html>
<head>

Dann ist das Design und dann steht auf Zeile 31 ein Begrüßungstext:


Hallo <?php echo $_SESSION["username"] ?>

und es kommt diese Fehlermeldung:

Warning: Cannot modify header information - headers already sent by (output started at /users/spirit-board/www/ordner0143/index/index.php:31) in /users/spirit-board/www/ordner0143/index/pages.php on line 20

Wo ist hier das Problem?

hallo,

funpic verwendet offenbar standardmäßig output buffering, offenbar deswegen, damit die Werbung (seltsamerweise über diese Methode) eingebunden werden kann.

Dass das bei bplaced - und bei sonst eigentlich anderen hostern - auch nicht funktioniert, ist keine Überraschung. Konkret einfach gesagt, bevor Du session_start() oder header() ausführst, darf keinerlei andere Ausgabe erfolgt sein. Ob das nun ein Leerzeichen, ein Zeilenumbruch oder “Hallo” ist, ist nicht wichtig.

Der Hintergrund ist der, dass solche Informationen (session_start, header(), etc.) im HTTP-Header drinstehen, quasi noch vor jeglicher textueller Ausgabe. Wenn 1x bereits die Textausgabe angefangen hat, dann wird dies nicht mehr als HTTP-Header gewertet, sondern als Inhalt der Seite. Aber der Browser kann nur dann umleiten oder Header empfangen, wenn noch keine Textausgabe erfolgte …

Daher einfach jegliche Textausgabe vor dem Aufruf von header() unterbinden, dann wird das auch funktionieren. Du könntest auch output buffering aktivieren, jedoch halte ich das nicht für empfehlenswert, sehe das als Service Provider auch eher ungern.

ciao

zur Ergänzung…

Lesen von Cookies ist ok… jedoch sobald welche gesetzt werden, werden auch Header geändert. Cookies sind nur/im Header :wink:

ne Session läuft auch über Cookies :wink:
Allerdings werden dort die Daten lokal gespeichert… daher könnte/sollte dort ein manipulieren auch nach ner Ausgabe gehen… [size=85](der Cookie der gesetzt wird, ist die Session ID (SID))[/size]