header("http/1.1 303 See other");
karin
- php
0 romy
Hallo,
Brauche einen Reload in php. Hab in dem Forum eine Antwort gefunden. Nur ist mir unklar wo diese Einträge gesetzt werden? Direkt im Formular?
header("HTTP/1.1 303 See other");
header("Location: http://".$SERVER["HTTP_HOST"]."/andere/seite.php");
Danke
Karin
Hi,
Brauche einen Reload in php. Hab in dem Forum eine Antwort gefunden. Nur ist mir unklar wo diese Einträge gesetzt werden? Direkt im Formular?
header("HTTP/1.1 303 See other");
wozu brauchst Du das? (Ist meiner Meinung nach eine Art Fehlrmeldung, so kann man auch 404er Seiten aufrufen)
header("Location: http://".$SERVER["HTTP_HOST"]."/andere/seite.php");
dies hier kann überall stehen, solange vorher keine Aussgabe gemacht wurde.
Wann brauchst Du den reload? Warum brauchst Du ihn?
Wenn Du ein wenig spezieller wirst kann man besser helfen.
ciao
romy
hallo romy, ich habe ein eingabeformular wo nach dem klicken des "weiter" buttons eine neue seite aufgerufen wird, gleichzeitig daten in die db eingetragen und auch wieder angezeigt werden. Ich möchte eigentlich nur die id zum jeweiligen datensatz in dem zweiten formular anzeigen. Ich brauch nur eine fortlaufende nummer die eindeutig ist. hab den quellcode beider formulare hier hineincopiert. danke karin
1:Formular
<html> <head> <title>Intranet bfi-Wien - KVS-Fragen und Antworten</title> <SCRIPT LANGUAGE=JavaScript> function verify_page() { { document.frmRegister.submit(); } } </SCRIPT> <style> a:link {color:#cc0000; text-decoration:none; font-family:arial,helvetica,sans-serif; font-size:9pt;} a:active {color:#cc0000; text-decoration:none; font-family:arial,helvetica,sans-serif; font-size:9pt;} a:visited {color:#cc0000; text-decoration:none; font-family:arial,helvetica,sans-serif; font-size:9pt;} a:hover {color:#000000; text-decoration:none; font-family:arial,helvetica,sans-serif; font-size:9pt;} td {font-family:arial,helvetica,sans-serif; color:#000000; font-size:9pt;} </style> </head> <BODY bgcolor="#ffffff"> <br> <? include("admin/config.php");; $hauptmenu = $HTTP_POST_VARS["hauptmenu"]; $db_connect=mysql_connect($db_host,$db_user,$db_pass); $db_select=mysql_select_db($db_db,$db_connect); ?> <FORM name="frmRegister" action="kvs_faq_1.php" method="post"> <table width="600" border="0" cellspacing="1" cellpadding="3" bgcolor="#336699">
<tr> <td bgcolor="#336699" colspan="3" align="center"><font size="3" color="#ffffff"><b>KVS-FAQ</b></font><br><font color="#ffffff">Fragen und Antworten</font></td> </tr> <tr> <td bgcolor="#ffffff" width="200"> </td> <td bgcolor="#ffffff" width="200"><b>Version:</b></td> <td bgcolor="#ffffff" width="200"> </td> </tr> <tr> <td bgcolor="#ffffff" width="200"> </td> <td bgcolor="#ffffff" width="200"><input type="text" name="txtversion" size="15" maxlenght="15"></td> <td bgcolor="#ffffff" width="200"> </td> </tr> <tr> <TD bgcolor="#ffffff" align="right"><b>Hauptmenü:</b></TD> <TD bgcolor="#ffffff" colspan="3"> <select name="txthauptmenu" size="1"> <option selected value="auswahl">Bitte auswählen</option> <option value="Stammdaten">Stammdaten</option> <option value="Anmeldung">Anmeldung</option> <option value="Kassa">Kassa</option> <option value="Honorar">Honorar</option> <option value="Kursplanung">Kursplanung</option> <option value="Raumplanung">Raumplanung</option> <option value="Kalkulation">Kalkulation</option> <option value="Stundenplan">Stundenplan</option> <option value="Mailing/Marketing">Mailing/Marketing</option> <option value="Tabellen A-F">Tabellen A-F</option> <option value="Tabellen G-O">Tabellen G-O</option> <option value="Tabellen P-Z">Tabellen P-Z</option> <option value="System">System</option> </select> </TD> </TR> <tr> <td bgcolor="#ffffff" align="right"><b>Abteilung:</b></td> <td bgcolor="#ffffff" colspan="3"> <select name="txtabteilung" size="1"> <option selected value="auswahl">Bitte auswählen</option> <option value="BAT">BAT</option> <option value="BAZ">BAZ</option> <option value="DION">DION</option> <option value="KUM">KUM</option> <option value="PROQ">PROQ</option> <option value="RW">RW</option> <option value="EDV">EDV</option> <option value="SCHULEN">SCHULEN</option> <option value="JOBTRANSFAIR">JOBTRANSFAIR</option> <option value="AMV1">AMV1</option> <option value="AMV2">AMV2</option> <option value="AMV3">AMV3</option> <option value="AZBH">AZBH</option> <option value="FHS">FHS</option> </select> </td> </tr> <tr> <td bgcolor="#ffffff" align="right"><b>SachbearbeiterIn</b></td> <td bgcolor="#ffffff" colspan="2"> <? // db Abfrage für Auswahlliste SachbearbeiterIN $querystring="select nachname from addresses ORDER by nachname ASC"; $query=mysql_query($querystring,$db_connect); // generieren der Auswahlliste SachbearbeiterIn
echo "<select name="txtsachbearbeiter" size="1">\n"; echo "<option selected value="auswahl">Bitte auswählen</option>\n"; while($result=mysql_fetch_row($query)) {
echo "<option>".$result[0]."</option>\n";
} echo "</select>"; ?> </td> </tr> <tr> <td bgcolor="#ffffff" align="center" colspan="3"><INPUT type="button" value="Nächste Seite" ONCLICK="verify_page()"></TD> </TR> </TABLE> </FORM> </BODY> </html>
2.Formular
<html> <head> <title>Intranet bfi-Wien - KVS-Fragen und Antworten</title> <SCRIPT LANGUAGE=JavaScript> function verify_page() { { document.frmRegister.submit(); } } </SCRIPT> <style> a:link {color:#cc0000; text-decoration:none; font-family:arial,helvetica,sans-serif; font-size:9pt;} a:active {color:#cc0000; text-decoration:none; font-family:arial,helvetica,sans-serif; font-size:9pt;} a:visited {color:#cc0000; text-decoration:none; font-family:arial,helvetica,sans-serif; font-size:9pt;} a:hover {color:#000000; text-decoration:none; font-family:arial,helvetica,sans-serif; font-size:9pt;} td {font-family:arial,helvetica,sans-serif; color:#000000; font-size:9pt;} </style> </head> <body> <br> <? include("admin/config.php");
$hauptmenu = $HTTP_POST_VARS["txthauptmenu"]; $version = $HTTP_POST_VARS["txtversion"]; $sachbearbeiter = $HTTP_POST_VARS["txtsachbearbeiter"]; $abteilung = $HTTP_POST_VARS["txtabteilung"]; if($hauptmenu=="auswahl") { echo "<table border="0" width="600" cellspacing="1" cellpadding="3" bgcolor="#336699">"; echo "<tr>"; echo "<td bgcolor="#ffffff" align="center">"; echo "Die letzte Seite wurde nicht vollständig ausgefüllt<br>"; echo "Bitte wiederholen Sie die Eingabe<br>"; echo "<INPUT type="button" value="Zurück" onClick="history.back()">"; echo "</td>"; echo "</tr>"; echo "</table>"; } elseif($sachbearbeiter=="auswahl") { echo "<table border="0" width="600" cellspacing="1" cellpadding="3" bgcolor="#336699">"; echo "<tr>"; echo "<td bgcolor="#ffffff" align="center">"; echo "Die letzte Seite wurde nicht vollständig ausgefüllt<br>"; echo "Bitte wiederholen Sie die Eingabe<br>"; echo "<INPUT type="button" value="Zurück" onClick="history.back()">"; echo "</td>"; echo "</tr>"; echo "</table>"; } elseif($abteilung=="auswahl") { echo "<table border="0" width="600" cellspacing="1" cellpadding="3" bgcolor="#336699">"; echo "<tr>"; echo "<td bgcolor="#ffffff" align="center">"; echo "Die letzte Seite wurde nicht vollständig ausgefüllt<br>"; echo "Bitte wiederholen Sie die Eingabe<br>"; echo "<INPUT type="button" value="Zurück" onClick="history.back()">"; echo "</td>"; echo "</tr>"; echo "</table>"; } elseif($version=="") { echo "<table border="0" width="600" cellspacing="1" cellpadding="3" bgcolor="#336699">"; echo "<tr>"; echo "<td bgcolor="#ffffff" align="center">"; echo "Die letzte Seite wurde nicht vollständig ausgefüllt<br>"; echo "Bitte wiederholen Sie die Eingabe<br>"; echo "<INPUT type="button" value="Zurück" onClick="history.back()">"; echo "</td>"; echo "</tr>"; echo "</table>"; } else {
$db_connect=mysql_connect($db_host,$db_user,$db_pass); $db_select=mysql_select_db($db_db,$db_connect); $sqlInsert = "INSERT INTO kvs_faq (version, hauptmenu, abteilung, sachbearbeiter) VALUES ('$version', '$hauptmenu', '$abteilung', '$sachbearbeiter');"; $result = mysql_query($sqlInsert); if (mysql_error()) { echo mysql_error(); exit; }
?>
<FORM name="frmRegister" action="kvs_faq_2.php" method="post"> <table width="600" border="0" cellspacing="1" cellpadding="3" bgcolor="#336699"> <tr> <td bgcolor="#336699" colspan="3" align="center"><font size="3" color="#ffffff"><b>KVS-FAQ</b></font><br><font color="#ffffff">Fragen und Antworten</font></td> </tr> <tr> <td bgcolor="#ffffff" colspan="3" align="center">Die grau hinterlegten Felder können auf dieser Seite nicht mehr geändert werden. Benützen Sie zum Ändern schon eingetragener Daten den "Zurück" Button.<br> Sie müssen auf dieser Seite das <b>Untermenü</b> und den <b>Bereich</b> auswählen </td> </tr> <tr> <td bgcolor="#ffffff" width="200"><b>Nummer:</b></td> <td bgcolor="#ffffff" width="200"><b>Version:</b></td> <td bgcolor="#ffffff" width="200"> </td> </tr> <tr> <td bgcolor="#ffffff" width="200"><font color="#ff0000"><input onfocus=blur(); style="background-color:#cccccc; typ="text" name="nummer" value="<? echo $id; ?>"></font></td> <td bgcolor="#ffffff" width="200"><font color="#ff0000"><input onfocus=blur(); style="background-color:#cccccc; typ="text" name="version" value="<? echo $version; ?>"></font></td> <td bgcolor="#ffffff" width="200"> </td> </tr> <tr> <td bgcolor="#ffffff" width="200"><b>Hauptmenü</b></td> <td bgcolor="#ffffff" width="400" colspan="2"><b>Untermenü</b></td> </tr> <tr> <td bgcolor="#ffffff" width="200"><font color="#ff0000"><input onfocus=blur(); style="background-color:#cccccc; typ="text" name="hauptmenu" value="<? echo $hauptmenu; ?>"></font></td> <td bgcolor="#ffffff" width="400" colspan="2"> <? // db Abfrage für Auswahlliste Untermenü $querystring="select untermenu from kvs_faq_menu where hauptmenu= '$hauptmenu'"; $query=mysql_query($querystring,$db_connect); // generieren des Untermenüs if(mysql_num_rows($query)>0) { echo "<select name="untermenu" size="1">\n"; while($result=mysql_fetch_row($query)) { echo "<option>".$result[0]."</option>\n"; } echo "</select>"; } else { echo "Kein Untermenü für dieses Hauptmenü vorhanden"; } ?> </td> </tr> <tr> <td bgcolor="#ffffff" align="center" colspan="3"><font size="3"><b>bfi Wien</b></font></td> </tr> <tr> <td bgcolor="#ffffff"><b>Abteilung</b></td> <td bgcolor="#ffffff" colspan="2"><b>Bereich</b></td> </tr> <tr> <td bgcolor="#ffffff"><font color="#ff0000"><input onfocus=blur(); style="background-color:#cccccc;" typ="text" name="abteilung" value="<? echo $abteilung; ?>"></font></td> <td bgcolor="#ffffff" colspan="2"> <? // db Abfrage für Auswahlliste Bereich $querystring="select bereich from kvs_faq_abt_bereich where abteilung='$abteilung'"; $query=mysql_query($querystring,$db_connect); // generieren der Auswahlliste Bereich if(mysql_num_rows($query)>0) { echo "<select name="bereich" size="1">\n"; while($result=mysql_fetch_row($query)) { echo "<option>".$result[0]."</option>\n"; } echo "</select>"; } else { echo "Keine Bereiche für diese Abteilung vorhanden!"; } ?> </td> </tr> <tr> <td bgcolor="#ffffff"><b>SachbearbeiterIn</b></td> <td bgcolor="#ffffff" colspan="2"><b>Telefon / Fax</b></td> </tr> <tr> <td bgcolor="#ffffff"><font color="#ff0000"><input onfocus=blur(); style="background-color:#cccccc;" typ="text" name="sachbearbeiter" value="<? echo $sachbearbeiter; ?>"></font></td> <td bgcolor="#ffffff" colspan="2"><font color="#ff0000"> <? // db Abfrage für Auswahlliste Bereich $querystring="select telefon from addresses where nachname='$sachbearbeiter'"; $query=mysql_query($querystring,$db_connect); while($result=mysql_fetch_row($query)) { echo "<input onfocus=blur(); style="background-color:#cccccc;" typ="text" name="telefon" value="$result[0]">"; }
?> </font> </td> </tr> <tr> <td bgcolor="#ffffff" align="center"><INPUT type="button" value="Zurück" onClick="history.back()"></TD> <td bgcolor="#ffffff" align="center" colspan="2"><INPUT type="button" value="Nächste Seite" ONCLICK="verify_page()"></TD> </TR> </table> </form> <? } ?> </body> </html>
Hi,
hallo romy,
ich habe ein eingabeformular wo nach dem klicken des "weiter" buttons eine neue seite aufgerufen wird, gleichzeitig daten in die db eingetragen und auch wieder angezeigt werden. Ich möchte eigentlich nur die id zum jeweiligen datensatz in dem zweiten formular anzeigen. Ich brauch nur eine fortlaufende nummer die eindeutig ist. hab den quellcode beider formulare hier hineincopiert.
puh wer soll sich da durchwühlen... ;)
steht das alles in einer Seite?
Nur grob, ich würde dass so machen um alle Probleme aus dem Weg zu räumen.
Seite1 mit Formular1 schickt die Daten an Seite2, welche die DB-Einträge macht, bzw. bei fehlerhaften Eingaben zurückgeht und bei positivem Ergebnis weitergeht zu seite3 mit neuem Formular
nur auf der Datenbankseite brauchst Du die header-Funktion, entweder zum zurückgehen oder zum vorwärtsgehen.
Vorteil: durch eventuelle reloads kommt es nicht zu mehrfacheinträgen.
den header schreibst Du wenn Du umleiten willst. Achte darauf, das alles korrekt in if-else-Anweisungen steht, was DU ausführen möchtest, da auch wenn der header ein paar zeilen höher steht, der Code untendrunter unter bestimmten Bedingungen ausgeführt wird.
Ich hoffe das war was Du wissen wolltest ;)
Ach ja, wenn Du Variablen hast, die DU wieder brauchst auf den Folgeseiten hänge sie per GET an die URL ran oder eröffne ne sessionvariable dafür
PS: wozu brauchst Du eigentlich die Javascriptfunktion verify_page(); , ich weiss zum abschicken des Formulars aber das ist doch der umständlichere Weg.
ciao
romy
danke für Deine Hilfe. Werd mich jetzt gleich mal ranmachen.
lg
karin
Brauche einen Reload in php. Hab in dem Forum eine Antwort gefunden. Nur ist mir unklar wo diese Einträge gesetzt werden? Direkt im Formular?
header("HTTP/1.1 303 See other");
wozu brauchst Du das? (Ist meiner Meinung nach eine Art Fehlrmeldung, so kann man auch 404er Seiten aufrufen)
Das ist keine Fehlermeldung, sondern eine ganz einfache Weiterleitung, die ein Skript senden kann, wenn es dem Benutzer statt einer eigenen Ausgabe eine andere Seite präsentieren möchte.
Fehler liegen im 400er und 500er Bereich. Siehe HTTP-Spezifikation unter http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html.
header("Location: http://".$SERVER["HTTP_HOST"]."/andere/seite.php");
dies hier kann überall stehen, solange vorher keine Aussgabe gemacht wurde.
Wobei zu ergänzen wäre, daß mit "Ausgabe" jedes Zeichen gemeint ist, auch diejenigen, die sich zwischen Dateianfang und dem ersten <?php befindet, inklusive Leerzeichen und den noch weniger offensichtlichen Zeilenschaltungen ("new line").
Der Grund ist, daß eine Antwort im HTTP-Protokoll aus einem Kopf und einem Körper besteht. Das, was normalerweise angezeigt wird, befindet sich im Körper, im Kopf stehen weitere Informationen zu den Körperdaten wie zum Beispiel Änderungsdatum, Datengröße oder -typ.
Da der Kopf vor dem Körper gesendet werden muß, können keine Kopfdaten mehr gesendet werden (mittels header()), wenn das Skript bereits mit dem Versand des Körpers begonnen hat.
Die Regel, daß header() vor allen Ausgabefunktionen stehen muß, gilt allerdings nur, solange output_buffering nicht eingeschaltet ist, d.h. solange PHP die Ausgaben des Skriptes _nicht_ erst zwischenspeichert.
Das ganze lässt sich übrigens leicht austesten: Wenn header() an der falschen Stelle (d.h. zu spät) steht, kommt eine Fehlermeldung à la "Cannot send headers - body already send".
Gruß,
soenk.e
Hallo,
header("Location: http://".$SERVER["HTTP_HOST"]."/andere/seite.php");
dies hier kann überall stehen, solange vorher keine Aussgabe gemacht wurde.
Sollte man danach nicht sinnvollerweise ein
exit;
setzen? Oder werden die restlichen Daten des Scriptes von PHP beim Location-Header automatisch NICHT mitgesendet? Nur für eine Umleitung muss man ja das ganze Dokument nicht mitsenen - oder?
Liebe Grüße aus http://www.braunschweig.de
Tom
Hallo Thomas,
Sollte man danach nicht sinnvollerweise ein
exit;
setzen?
In dem Fall: ja.
Oder werden die restlichen Daten des Scriptes von PHP beim Location-Header automatisch NICHT mitgesendet?
Nein, PHP sendet zuerst den Header und dann den Content - ganz normal also.
Nur für eine Umleitung muss man ja das ganze Dokument nicht mitsenen - oder?
Kommt auf die Art der Umleitung an. Bei "300 Multiple Choices" würde ich schon ein Dokument mitschicken. Hier hast Du allerdings recht.
Christian
Hallo Christian,
Kommt auf die Art der Umleitung an. Bei "300 Multiple Choices" würde ich schon ein Dokument mitschicken. Hier hast Du allerdings recht.
interessante Variante. Was muss denn da noch übertragen werden? Kann man den 300er auch mit der header()-Funktion erzeugen oder muss ich da ne Stufe tiefer klettern?
Liebe Grüße aus http://www.braunschweig.de
Tom
Hallo Tom,
Was muss denn da noch übertragen werden?
Ähm, Du hast die entsprechende Stelle im RFC 2616 gelesen?
http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.1:
| Unless it was a HEAD request, the response SHOULD include an entity containing a list of resource characteristics and location(s) from which the user or user agent can choose the one most appropriate.
Also eine Stinknormale URI-Liste in irgendeinem Format. (z.B. text/html oder application/xhtml+xml)
Theoretisch könnte man auch eine Standard-Sprachauswahl-Seite (mit den verschiedenen Links) als 300 ausliefern. Das wäre IMHO der ideale Verwendungszweck für so etwas.
| However, this specification does not define any standard for such automatic selection.
Der Browser sollte besser nicht versuchen, was rauszupicken, denn das ist nicht standardisiert.
| If the server has a preferred choice of representation, it SHOULD include the specific URI for that representation in the Location field;
Wenn es einen vom Server bevorzugten »Zielort« gibt, dann sollte der im Location-Header mitgegeben werden.
Mozilla 1.2.1 unter Linux leitet bei mir automatisch weiter, wenn ein Location-Header mit angegeben wird, ansonsten wird der Inhalt der Seite (genau: des Bodies des HTTP-Requests) angezeigt. Andere Browser teste ich vielleicht mal bei Gelegenheit.
Kann man den 300er auch mit der header()-Funktion erzeugen oder muss ich da ne Stufe tiefer klettern?
Header ('HTTP/1.1 300 Multiple Choices');
(Apache)
Header ('Status: 300 Multiple Choices');
(einige andere Webserver)
Christian
Herzlichen Dank Christian, das war schon sehr interessant. Werd ich, wenn ich nicht gelich einschlafe *gähn* gleich nochmal die RFC vorkramen, was man damit noch alles machen könnte.
Guts Nächtle aus http://www.braunschweig.de
Tom
Hallo Thomas,
was man damit noch alles machen könnte.
Das Problem dabei ist: Die RFC bietet sehr viele Möglichkeiten. (Schau Dir mal Status 402 an ;-)) Aber kaum ein Browser unterstützt sie richtig.
Guts Nächtle
Gute Nacht,
Christian