Problem mit der Switch Anweisung

go_LynX

Grünschnabel
moin!
ich habe folgendes problem mit dem "switchen":

"Warning: Cannot modify header information - headers already sent by (output started at /srv/www/htdocs/web1/html/members/lynx/startseite/benutzer/lynx.php:37) in /srv/www/htdocs/web1/html/members/lynx/startseite/link.php on line 36"


ja.... das war erstmal die fehlermeldung!
jetzt zu meinem case:

PHP:
<?

$name = $_POST['name'];
$username = $_POST['username'];
$sl = $_POST['Shortlink'];

// Links
// -----

$a_bwb = "*************";
$a_goclan = "*************";
$a_inetbanking = "*************";
$a_mathe = "*************";

// Shortlinks
// ---------

@include "benutzer/".$username.".php";

If ($name == ""){
    exit();
}


     switch ($sl) {
     case $bwb:
     $link = $a_bwb;
     break;
     case $test:
     $link = $a_test;
     break;
     default:
     print("nichts");
     }
     
header ("Location: $link");
exit;
?>



ja.. das ist nun die seite!
aber was soll das ganze bewirken?
ganz einfach:

wenn die variable $sl z.b. den wert: "TEST" (TEST ist auch in der variable $bwb gespeichert) enthält, soll die variable $link den wert von $a_bwb erhalten!
$sl wird aus dem formular von der vorherigen seite "gewonnen"
$bwb und $a_bwb werden vorher includet!

Tja..... warum gibt es jetzt diese fehlermeldung?!

Mit freundlichen Grüßen
LynX
 
joa... hab ich doch.... nur leider weiß ich nicht WAS die fehlermeldung soll/bedeutet.. und darum weiß ich auch ned wo die herkommt ;)

LynX
 
-.- ok dann übersetz ich sie dir halt:
Konnte Headerinfos nich verändern, weil er schon gesendet wurde. Im KLartext: es wurde schon irgendwas ausgegeben was ihn veranlasste, den Header zu schicken. Der Header wird immer zuerst vor allen DAten geschickt.
 
Da ist dein Header Befehl

header ("Location: $link");

und wenn irgendwas vorher ausgegeben wurde kommt der fehler

Z.B wenn die default Abteilung vom Switch ausgeführt wurde denn da ist ja eine Print Ausgabe

Auch nette Möglichkeit was auszugeben ist ein Leerzeichen / Leerzeile vor dem start von php durch <?
 
Da der Punkt hier irgendwie nur sehr kurz und unverständlich angedeutet wurde, hole ich mal wieder ein wenig aus :)

Also go_LynX:

Der Browser kommuniziert mit dem Webserver schon bevor Du etwas sehen kannst. Dies sind die Header-Informationen

Beispiel:
Code:
 Connect to 193.28.88.250 on port 80 ... ok

GET / HTTP/1.1
Host: www.tutorials.de
Connection: close
Accept-Encoding: gzip
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1
Accept-Language: de,en-us;q=0.7,en;q=0.3
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
User-Agent: Mozilla/5.0 (Macintosh; U; PPC; en-US; rv:1.3.1) Gecko/20030723 Neurohttpreader/1.0
Referer: http://www.neurodeamon.com/
Nachzulesen hier:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

Sobald Du Quelltext im Browser empfangen hast, ist dieser Header schon längst angekommen und Du kannst den Header nicht mehr modifizieren. Hier meckert PHP, das es bereits eine gültige Verbindung mit dem Browser aufgenommen hat und keine header() Befehler mehr akzeptiert. Genau das sagt auch die Fehlermeldung und das steht auch in der PHP-Dokumentation.

Vor header() dürfen keine darstellbaren Leerzeilen/Zeichen stehen, kein echo, kein print.
Ich hoffe das erklärt ansatzweise was der Header zu bedeuten hat :)
 
Zurück