• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Anzeigeproblem mit IE6 im PHP-Formular

iggy

Newbie
Hallo zusammen zu dieser späten Stunde ;-)

Was soll ich sagen?
Mein Kontaktformular ist endlich fertig.
Alles funktioniert, von der Überprüfung der Eingaben über die Anbindung an die Datenbank bis zum absenden.
Auch die Mails kommen an.
Zumindest im Firefox...
Internet-Explorer machts möglich, dass ich nun mein Script ausser an den Standard an den Microsoft-Standard angleichen muss.

Es gibt in meinem Formular 3 Buttons. Zwei zum absenden und einen zum löschen.
Wohlgemerkt "Buttons" also <button type="submit" name="senden" <value = "senden/bearbeiten>senden<blablabla
der dritte Button = reset

Warum habe ich Buttons gewählt?
Ich habe gelesen, dass ein Button vom Typ submit einen beliebigen Wert mitsenden kann. Und zwar den, der hinter "value=" steht, ähnlich wie ein Radio-Button.
Das habe ich ausgenutzt um zwei Buttons mit dem selben Namen zu erstellen aber zwei unterschiedlichen Werten.
Klickt der User auf "Prüfen" wird "pruefen" übergeben und er kann seine eingegebenen Daten nochmal überprüfen und dann überarbeiten, oder senden.
Bei Senden wird "senden" übergeben und das Formular wird direkt abgesendet.

Wie gesagt: Microsoft machts möglich, dass das dann nicht Funktioniert.
Hier wird statt dem Wert hinter value= einfach der Wert übergeben, der im Button selbst steht. also zB "Prüfen" statt "pruefen".
Das hat zur Folge, dass nach dem absenden gar nichts angezeigt wird, ausser dem Hintergrundbild.

Ich habe schon versucht, diesen Fehler zu verhindern, indem ich einfach in die if-Schleife die den geklickten Button prüft ein || "Prüfen" dazugefügt habe.
Zwar hat nun die Anzeige auf der vorher leeren Seite des IE funktioniert.
Aber:
Durch dieses || erhält der Server immer - egal ob ein Button geklickt wurde oder nicht - ein OK und arbeitet die Schleife ab, da ja der Wert "Prüfen" im Button steht.
Da hat dann sogar Mozilla nachgegeben.

Mein letzter Schritt wäre, den zweiten Button gegen einen Radio-Button auszutauschen, der Standardmäßig auf "Prüfen" steht und vom User auf "gleich absenden" gestellt werden muss.
Mir wäre aber der Weg über richtige Buttons lieber.

Jemand eine Idee?
Welchen Wert übergibt ein Submit-Button eigentlich?
Kommen IE und Mozilla damit gleichermaßen klar?
 

Zinnwurm

Hacker
Nja, ich bin ein "<input type='submit'"'er. XD
Ich hätte schon n paar Vorschläge.
Du könntest zB. in deinem PHP-Skript abfragen
Ich habe schon versucht, diesen Fehler zu verhindern, indem ich einfach in die if-Schleife die den geklickten Button prüft ein || "Prüfen" dazugefügt habe.
Zwar hat nun die Anzeige auf der vorher leeren Seite des IE funktioniert.
Aber:
Durch dieses || erhält der Server immer - egal ob ein Button geklickt wurde oder nicht - ein OK und arbeitet die Schleife ab, da ja der Wert "Prüfen" im Button steht.
Das versteh ich jetzt nicht.
Code:
if( ($_REQUEST["senden"] == "senden/bearbeiten") || ($_REQUEST["senden"] == "Prüfen") ) {
//...
Sollte doch funzen, wobei ich wegen dem Ü aufpassen würde....
Auf jeden Fall schonmal im HTML mit Ü maskieren und dann schauen, was beim Server so ankommt.

Das nächste wäre JavaScript, dass dir beim Button-Drücken einen Wert in ein input type="hidden" schreibt und dann das Form abschickt. Würde aber ersteres vorziehen....
 
OP
I

iggy

Newbie
"if (isset($_POST['senden']) && $_POST['senden'] == "pruefen" )"

lautet aktuell meine Abfrage für den Button.


"<button type='submit' name='senden' value='senden'>Senden</button> <button type='submit' name='senden' value='pruefen'>Eingabe überprüfen</button> <button type='reset' name='reset' value='loeschen'>Löschen</button>"

sind meine aktuellen Buttons

Schreibe ich nun zu testzwecken "phpinfo();"
an den Anfang des Scripts und klicke auf "Eingabe überprüfen", so kann ich sehen, dass
_POST["senden"] beim Firefox-Browser den Wert "pruefen" erhalten hat und beim IE den Wert "Eingabe überprüfen".
Und zwar steht "Eingabe überprüfen" so drin, wies der Browser anzeigt. Also nicht mit "ü"
Die Eingaben werden also korrekt an das Script zurückgepostet, beim IE die values der Buttons allerdings falsch.

Erweitere ich nun
if (isset($_POST['senden']) && $_POST['senden'] == "pruefen" ) mit || "Eingabe überprüfen" oder "Eingabe überprüfen" (gleiches resultat) zu:

if (isset($_POST['senden']) && $_POST['senden'] == "pruefen" || "Eingabe überprüfen")

so empfängt mich bereits die erste Seite, also die, wo normalerweise nur das Formular alleine sein sollte, mit einer leeren Maske wo normalerweise die Eingegebenen Werte stehen.
Zusätzlich etwas weiter unten das Eingabeformular.
Dieses sollte normalerweise das Einzige sein was auf der Seite sichtbar sein soll.

Ich kanns auch nicht verstehen, aber anscheinend ist der Wert irgendwo vorhanden.
Auch ein Schließen des Browsers und neu laden bringt nix.

In den Request-Variablen steht übrigens der selbe Wert, wie in den Posts.
Hab erst gedacht ich versuchs vielleicht mit denen. Hab das aber gerade gesehen.
 
iggy schrieb:
"<button type='submit' name='senden' value='senden'>Senden</button> <button type='submit' name='senden' value='pruefen'>Eingabe überprüfen</button> <button type='reset' name='reset' value='loeschen'>Löschen</button>"
Werden im selben Formular zwei Variablen mit dem gleichen Namen (hier 'senden') verwendet ohne das der Typ explizit als Array angegeben wird, dann gab's bei mir immer irgendwelche nicht nachvollziehbaren Resultate. Zudem scheint der IE dabei noch anders vorzugehen als der Firefox.

Wenn du als Namen 'senden[]' wählst, sieht der POST-Request dann aus?
Statt phpinfo() kannst du folgendes verwenden (ist übersichlicher ;)):
Code:
echo "The received POST variables were:<br>";
foreach ( $_POST as $key => $value ) {
	echo "<b>".$key.":</b>   <i>".$value."</i><br>"; 
}
echo "<hr>";
 
OP
I

iggy

Newbie
phpinfo(32); ist auch recht übersichtlich.
Der Vorteil: Man kann Tippfehler ausschließen wenns nicht funktioniert und man muss die Schriftfarbe nicht beachten, wenn der Hintergrund schwarz ist.
Aber dein Vorgang ist auch eine Möglichkeit.
Wie meinst du das mit 'senden[]' ?
Wenn ich senden[] nur beim Button-Name verwende, kommt kein Resultat.
Wenn ich senden[] zusätzlich in die if-Schleife einbeziehe kommt das gleiche Resultat wie zuvor.

Aber du hast mich zumindest auf die Idee gebracht doch <input type=submit> zu verwenden.
Jetzt erfolgt die Prüfung eben nicht mehr über den Wert, sondern über den Namen des Buttons selbst.
Über "button types" hatte ich da übrigens trotzdem Probleme im IE.

Also: Problem gelöst!

Jetzt versuche ich noch ein Config-Script zu schreiben, das die Datenbank und die zugehörigen Passwort-Files automatisch erstellt.
Weiß jemand von euch, wo ich da Infos im Netz finde?
 
Oben