cookies post und get vermischen???
carsten schlichting
- php
hallo
wollte einmal generell zu dem Thema fragen, weil bei mir ein absenden eines Formulares per post nicht richtig funktioniert. Und vielleicht komm ich so auf den fehler.
Also habe eine session aus einem anderen script eingebaut, die die session_id per cookie versendet.
bisher hat jetzt auch eine zusätzliche übergabe von daten per get gut funktioniert. hier ist mir aber jetzt folgendes beim versenden einem formular aufgefallen: der urspünglich so gedachte link--> index.php?dfg=12 wurde gänzlich mit den FormularDaten überschrieben : zu index.php?wert1=1&wert2=2&usw.
In diesem zusammenhang funktioniert auch das Senden per post nicht.
hat jemand eine Idee was ich falsch machen könnte??
Habt dank und grüße aus stuttgart
carsten
Hallo,
das hört sich alles noch etwas abenteuerlich an.
Wie sieht denn (bitte in Kurzform) Dein Code für das Formular aus?
LG
Chris
Wie sieht denn (bitte in Kurzform) Dein Code für das Formular aus?
Hi also danke scho_einmal
hier der code:
<form class="schrift_login" action="index.php" method="post" enctype="text/plain" accept-charset="ISO-8859-1, ISO-8859-2">
<table class="schrift_login">
<tr height="33px">
<td>login:</td><td width="10px"></td>
<td>
<input class="schrift_login_fett" id="input_login" name="username" type="text" size="30" maxlength="30" value="username_wohin">
</td>
<td>Passwort:</td>
<td>
<input class="schrift_login_fett" id="input_pass" name="pass" type="password" size="7" maxlength="10" value="rtzui">
</td>
<td>
<input class="buttons" type="image" src="images/blank1.gif" alt="Absenden">
</td>
<td>return</td>
</tr>
</table>
</form>
hab jetzt dochwas in den get_defined_vars() gefunden.Und zwar:
Array
(
[HTTP_RAW_POST_DATA] => username=zutr
pass=fgtr
x=0
y=0
Beim wiederaufrufen des formular mit anderen werten verändert sich komischerweise nichts, erst wenn die session beendet wurde, stehen hier neue werte.
für was steht eigentlich x=0&y=0 ?? für die Schaltflächen??
also grüße und danke carsten
Hallo,
nachschauen solltest Du mit
echo "<pre>\n";
echo htmlentities(print_r($_GET,1),ENT_QUOTES);
echo htmlentities(print_r($_POST,1),ENT_QUOTES);
echo htmlentities(print_r($_COOKIE,1),ENT_QUOTES);
echo htmlentities(print_r($_SESSION,1),ENT_QUOTES);
echo "</pre>\n";
Wenn Du für das <input type="button"> keinen Namen vergibst, können die Werte x und y nicht ordentlich übertragen werden.
Die Werte, die in $_POST ankommen, musst Du nach überprüfung natürlich selber in $_SESSION übertragen.
if (isset($_POST['username']))
{
$_SESSION['username'] = $_POST['username'];
}
und zum wieder Auslesen geht das ähnlich
<input class="schrift_login_fett"
id="input_login"
name="username"
type="text" size="30"
maxlength="30"
value="<?php echo htmlentities($_SESSION['username'],ENT_QUOTES); ?>">
Damit es keinen Fehler gibt, muss $_SESSION['username'] natürlich irgendwann rechtzeitig initialisiert werden.
LG
Chris
Wie sieht denn (bitte in Kurzform) Dein Code für das Formular aus?
Hi also danke scho_einmal
hier der code:
<form class="schrift_login" action="index.php" method="post" enctype="text/plain" accept-charset="ISO-8859-1, ISO-8859-2">
<table class="schrift_login">
<tr height="33px"><td>login:</td><td width="10px"></td>
<td>
<input class="schrift_login_fett" id="input_login" name="username" type="text" size="30" maxlength="30" value="username_wohin">
</td><td>Passwort:</td>
<td>
<input class="schrift_login_fett" id="input_pass" name="pass" type="password" size="7" maxlength="10" value="rtzui">
</td>
<td>
<input class="buttons" type="image" src="images/blank1.gif" alt="Absenden">
</td>
<td>return</td></tr>
</table>
</form>hab jetzt dochwas in den get_defined_vars() gefunden.Und zwar:
Array
(
[HTTP_RAW_POST_DATA] => username=zutr
pass=fgtr
x=0
y=0Beim wiederaufrufen des formular mit anderen werten verändert sich komischerweise nichts, erst wenn die session beendet wurde, stehen hier neue werte.
für was steht eigentlich x=0&y=0 ?? für die Schaltflächen??
also grüße und danke carsten
Hallo,
nachschauen solltest Du mit
echo "<pre>\n";
echo htmlentities(print_r($_GET,1),ENT_QUOTES);
echo htmlentities(print_r($_POST,1),ENT_QUOTES);
echo htmlentities(print_r($_COOKIE,1),ENT_QUOTES);
echo htmlentities(print_r($_SESSION,1),ENT_QUOTES);
echo "</pre>\n";Wenn Du für das <input type="button"> keinen Namen vergibst, können die Werte x und y nicht ordentlich übertragen werden.
Die Werte, die in $_POST ankommen, musst Du nach überprüfung natürlich selber in $_SESSION übertragen.
if (isset($_POST['username']))
{
$_SESSION['username'] = $_POST['username'];
}und zum wieder Auslesen geht das ähnlich
<input class="schrift_login_fett"
id="input_login"
name="username"
type="text" size="30"
maxlength="30"
value="<?php echo htmlentities($_SESSION['username'],ENT_QUOTES); ?>">Damit es keinen Fehler gibt, muss $_SESSION['username'] natürlich irgendwann rechtzeitig initialisiert werden.
LG
Chris
ok werd alles mal im php-mauell nachlesen und ausprobieren,
danke
aber eine direkte frage habe ich noch.
komischerweise, hat die übergabe mit post jetzt doch einmal geklappt. vieleicht lag es auch daran, dass ich den opera benutz hatte und dort einmal cookies enabled eingestellt hatte! in diesem fall wechselt die Session automatisch ihre Übertragungsart. Vielleicht war das ein grund.. aber 100%ig analysiert habe ich das alles noch nicht.
aber zu meiner Frage:
nachdem ich also das formular abgeschickt und ich die Daten unter request gefunden hatte, Sind diese bei einem erneuten absenden des formulares mit anderen werten nicht überschrieben worden? abhilfe ist das beenden der session.
ist sowas generell immer so??
grüße von mir
carsten
Hallo Carsten,
nachdem ich also das formular abgeschickt und ich die Daten unter request gefunden hatte, Sind diese bei einem erneuten absenden des formulares mit anderen werten nicht überschrieben worden? abhilfe ist das beenden der session.
Es ist mir noch nicht klar, ob Du den Mechanismus schon verstanden hast.
Das Formular hat eine action-Angabe. Der Request des Clients richtet sich also an diese Ressource. Dabei werden die Daten aus dem Formular per Name-Value-Pairs mitgesendet. Wenn als Methode "post" eingestellt war, werden sie als "Postparameter" verschickt. Die Get-Parameter, die vielleicht zusätzlich im Action-Element angegeben wurden, bleiben erhalten und werden ebenfalls übertragen. Wenn als Methode "get" angegeben wurde, werden die Daten aus dem Formular als Get-Parameter in der URi übertragen. Diejenigen, die ggf. im Action-Attribut angegeben waren, werden dabei unterschlagen.
Wenn Du nun ein Dokument, dass ein Formular enthält, mehrfach aufrufst und mittels Submit oder Button wieder absendest, kommen beim Server immer die Daten an, die aktuell im Formular standen.
Das hat mit der Session erstmal überhaupt nichts zu tun.
Die Session wird bei PHP meistens über Cookies geführt. Der Cookie wird dabei z.B. nur als flüchtiger Cookie an den Browser mitgeschickt. Dieser merkt sich den Cookie dann nur solange im Arbeitsspeicher, wie man die Browserfesnter nicht schließt.
Der Browser muss solche Cookies natürlich annehmen, sonst klappt es nicht.
Zwei weitere Übertragungswege für Cookies sind die URi und hidden-Variablen in Formularen. Das nennt sich dann transiente Session ID. Die ist aber nicht zu empfehlen. Mehr dazu im Archiv.
LG
Chris
Wenn Du nun ein Dokument, dass ein Formular enthält, mehrfach aufrufst und mittels Submit oder Button wieder absendest, kommen beim Server immer die Daten an, die aktuell im Formular standen.
Das hat mit der Session erstmal überhaupt nichts zu tun.
hey danke
werd jetzt aber erst einmal schluß machen, und morgen weiterknobeln.
weiß einfach nicht woran das liegen könnte, dass manchmal die daten übertragen werden und manchmal nicht und warum man die daten im request (bei get_defined_vars() nicht überschreiben kann.
also danke ersteinmal
carsten
Hallo Carsten,
werd jetzt aber erst einmal schluß machen, und morgen weiterknobeln.
Dann wünsche ich Dir eine gute Nacht.
Und morgen solltest Du dann erstmal im Klartext formulieren, was Du eigentlich bezwecken willst. Bitte ohne Bezug auf irgendwelche Variablennamen oder Programmiersprachen...
LG
Chris
hallo
Jetzt hat sich einiges doch noch aufgeklärt und zwar lag es wohl an der ausgabe der get_defined_vars(), die ich immer mit fopen fwrite und fclose in ein text-file geschrieben habe. was mir bisher nie aufgefallen war, ist, dass die textdatei geschlossen sein muß, damit php dort richtig reinschreiben kann. Meinte bisher immer, das das egal sei. Aber jetzt weiß ich bescheid.
also danke noch mal für die auf jeden_Fall hilfreichen und weiter_bringenden code_Beispiele
grüße aus stuttgart
carsten.