header(), kapier ich nicht....

Ja, ich brauche den Befehl um auf eine andere Seite weiterzuleiten....
Gibts da vielleicht noch andere "nicht allzulange" Befehle mittels PHP?

Heißt "Informationen an den Browser senden", wenn ich HTML-Code tippe oder wenn ich z.B. mittels eines Buttons Infos sende?

mfg
Markus
 
Ich versuch's mal anhand eines Beispiels zu erklären: Angenommen, ich möchte die Website http://example.org/ aufrufen und gebe diesen URL in das Adressfeld meines Browsers ein und bestätige die Eingabe mit der Eingabetaste. Im Hintergrund verarbeitet mein Browser nun die Eingabe und verfasst einen HTTP-Request, der wie folgt aussehen könnte:
Code:
GET / HTTP/1.1
Host: example.org
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de-DE; rv:1.7.6) Gecko/20050321 Firefox/1.0.2
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: de-DE,de;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: UTF-8,*
Keep-Alive: 300
Connection: keep-alive
Bei der Anfrage sendet mein Browser (Firefox 1.0.2) ein paar Informationen, die für den Webserver von Interesse sein könnte; beispielsweise die vom Browser akzeptierten oder bevorzugten Media-Typen, Sprachen oder Kodierungen.
Als Antwort erhalte ich beispielsweise Folgendes:
Code:
HTTP/1.x 200 OK
Date: Tue, 12 Apr 2005 15:26:57 GMT
Server: Apache/1.3.27 (Unix)  (Red-Hat/Linux)
Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
Etag: "3f80f-1b6-3e1cb03b"
Accept-Ranges: bytes
Content-Length: 438
Connection: close
Content-Type: text/html
Dieser HTTP-Header teilt meinem Browser u. A. den Status der Anfrage (200 OK), die Länge des Inhalts (438) und auch den Media-Typen (text/html, also schlichtes HTML) des nachfolgenden Inhalts mit. Nach dem oben beschriebenen Browser wird nun – solange die Anfrage akzeptiert und erfolgreich war, also kein Fehlerstatus zurückgesandt wird – der eigentliche Inhalt, in diesem Fall den Quellcode des HTML-Dokuments:
HTML:
<HTML>
<HEAD>
  <TITLE>Example Web Page</TITLE>
</HEAD> 
<body>  
<p>You have reached this web page by typing &quot;example.com&quot;,
&quot;example.net&quot;,
  or &quot;example.org&quot; into your web browser.</p>
<p>These domain names are reserved for use in documentation and are not available 
  for registration. See <a href="http://www.rfc-editor.org/rfc/rfc2606.txt">RFC 
  2606</a>, Section 3.</p>

</BODY>
</HTML>

Wird nun jedoch versucht, nach der Ausgabe oder Teilausgabe des eigentlichen Inhalts einen HTTP-Header zu senden, bemerkt dies PHP und liefert dem entsprechend eine Fehlermeldung.


Ich hoffe, ich hab's verständlich beschrieben und euch nun nicht all zu sehr verwirrt.
Übrigens gibt es im Internet eine hilfreiche Websites, welche die Anfrage- und Antwort-Header aufzeichnen: Web-Sniffer
 
Also jetzt nochmal ganz langsam zum mitschreiben... ;-)
PHP ist eine serverseitige Skriptsprache. Das heißt, dass PHP auf dem Server ausgeführt wird. Das wäre aber nun doof wenn dein Skript zwar beispielsweise ermittelt, wohin du weitergeleitet werden willst, aber es nicht dem Browser sagt. Denn nur dem Browser kann dich an eine andere Adresse weiterleiten. Somit sendet der Browser dann einen Befehl an den Browser, der dann sagt: "Eh, aldaaa ... leite mich mal an die Adresse ... weiter". Dann denkt sich der Browser, wenn der das sagt, dann wir das wohl stimmen. Wenn du dem Browser nun aber erst sagst, dass er was auf den Bildschirm "malen" soll dann mag der Browser dich nicht mehr weiterleiten, weil er ja jetzt schon alles so schön auf den Bildschirm "gemalt hat".

Also, ist doch ganz simpel, oder? ;-) ;-) ;-)

Ich hoffe, dass du es nun nach meinen "geistigen Ergüssen" geschnallt hast.
Mit freundlichem Gruß
der_maiki
 
ähm....
ich meine das anders...
PHP:
<html>
HTML-Tags
<?php
if (isset($beispielbutton))
{
header("Location: index.php");
}
?>

Funktioniert bei mir irgendwie wenn ich nur das in den Quellcode schreiben und natürlich den nötigen HTML-code perfekt. Aber wenn ich dann z.B. eine seite fertig hab und dann ein Login-System zu programmieren versuche (klappt ja bisher alles schön und gut) gehts wieder nicht.....

mfg
markus
 
oder beispielsweise bei einem Gästebuch....
ich habe z.B. eine i-netseite. dann progge ich ein gbook.
man geht im browser auf "Neuer Eintrag", füllt hübsch seine daten aus
und klickt dann auf "eintragen". So. Jetzt werden die daten in einer db gespeichert
und dann soll die i-netseite wieder auf die einträge weiterleiten.
Funktioniert nicht....
mfg
markus
 
Dein geposteter Code funktioniert nur, solange die Variable $beispielbutton nicht gesetzt ist. Denn wenn doch, wird die header-Funktion aufgerufen und erzeugt eine Fehlermeldung aus den bereits zur Genüge beschriebenen Gründen.

Umgehen lässt sich das Problem durch eine andere Strukturierung deines Scriptes oder durch die Verwendung der Ausgabepufferung.
--> [phpf]ob_start[/phpf]
 
geht nicht gibt's nicht.

Wir brauchen Infos, Infos, Infos! So, wie deine Seite bisher aussieht, würde ich mal annehmen, dass register_globals deaktiviert ist und du anstatt $beispielbutton $_POST['beispielbutton'] bzw. $_GET['beispielbutton'] verwenden müsstest, aber das ist nur eine vage Vermutung.
 
Dass du einen Befehl notiert hast, heißt noch lange nicht, dass er auch ausgeführt wird. In deinem Beispiel wird die header()-Funktion erst dann ausgeführt, falls der Ausdruck der if-Kontrollstruktur (falls also Variable mit dem der Bezeichnung „beispielbutton“ existiert) wahr ist.
 
So....
hier mal ein stückchen quellcode.
PHP:
<html>
<body>
<form action="" method="post">
<input type="text" name="new_name" maxlength="30"><br>
<input type="submit" name="eintragen" value="Eintragen">
</form>
<?php
if (isset($eintragen))
{
  # Speichere Daten in einer db
  # Nun soll der Browser wieder auf die Einträge weiterleiten
  header("Location: index.php?action=gbook");
}
?>
</body>
</html>

Klappt nicht, zumindest bei mir nicht....

mfg
markus
 
Zurück