Form.daten werden im IE erst nach Reload übernomme

Hi WWWler,
hab meine Frage schonmal im HTML-Forum gestellt, die haben mich hierher verwiesen.
Also ich habe folgendes Skript:
Man kann was in ner Dropdownlist auswählen, auf den Submit-Button drücken, und dann soll die Seite neu aufgebaut werden und irgendwas ausgeführt werden, je nachdem was in „$stamm“ steht.
Beim Firefox und Opera funzt alles, doch der IE streikt. Da muss man erst den Reloadbutton im Browser drücken bevor die Daten gesendet werden.
Hat einer ne Idee worans liegen könnte?

<?php if (isset($_POST['suchen'])) {<br /> // tue irgendwas, je nachdem was in $stamm steht
 }
 echo "

Stamm: -";
for($i = 0; $i $stämme[$i]";
else echo "$stämme[$i]";
echo "";
?>


Gruß Wizard of War

PS: PHP Version 5.0.3 o.w.T
Hab vergessen die PHP-Version zu erwähnen…

Vielleicht mal mit JS:

1

Also vielleicht so:

<?php : if (isset($_POST['suchen'])) {
// tue irgendwas, je nachdem was in $stamm steht } echo "action='karte.php'\> Stamm: for($i = 0; $i $stämme[$i]"; else echo "$stämme[$i]"; echo " "; ?\>

========================

Solltest aber erst mal schauen ob es nicht schon reicht wenn du einfach die auch schliesst ()

MfG Flo

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Floppy!
Das mit dem Option schliessen hab ich schon probiert, hilft auch nichts.

Eigentlich wollte ich kein Javascript benutzen, blöder IE :frowning:

Danke für Deine Antwort!

Gruß Wizard of War

Vielleicht mal mit JS:

1

Leider klappt das nicht, da die Anführungsstriche das Echo beenden.
Mit einzelnen Anführungsstrichen klappts auch nicht :-/
Noch eine Idee?

Gruß Wiz

Hi,

es funktioniert definitiv im IE, muss es auch, denn der Code stimmt soweit. Ich vermute eher ein Problem am Server.

Füge deinem Testprogramm mal ganz oben folgendes hinzu:

print_r($_POST);

damit gibst du das gesammte Array von allen Post-Variablen aus.

Beim ersten Aufruf der Seite sollte es leer sein, sobald man auf Suchen klickt, sollte es in etwa so aussehen:

Array ( [stamm] => - [suchen] => suchen )

Teste das bitte mal und schreib dein Ergebnis hier rein :wink:

Gruß Henrik

Hi Henrik,
danke für den Tip!

Jetzt bin ich aber ratlos.
Der zeigt das Array ordnungsgemäß an.
Allerdings wird das Bild das gezeichnet werden müsste nicht gezeichnet, warum auch immer :frowning:
Es scheint so, als wenn das PNG-Bild, daß ich zeichne nicht aktualisiert wird…
hier ein Ausschnitt aus dem Teil des Codes:
die x,y,xmax,ymax variablen sind natürlich vorhanden, und offensichtlich auch die Variable stamm1:

$backgroundimage = @ImageCreateFromPNG ("images/ua\_map.png");
$dim = (imagesx ($backgroundimage)-50)/($x\_max-$x\_min+1);
$grafik = $backgroundimage;

$bckgrndcolor = ImageColorAllocate($grafik, 255, 255, 255);
$color\_black = ImageColorAllocate($grafik, 0, 0, 0);
if (isset($\_POST['suchen'])){
 if(isset($\_POST["stamm1"])){
 $stamm1 = $\_POST["stamm1"];
 if($stamm1 != "-"){
 $col = $color\_black;
 imagerectangle ($grafik, $x, $y, $x+5, $y+5, $col);
 }
 }
}
ImagePNG($grafik,"images/ua\_map1.png");
echo "";

Gruß Wiz

Die Lösung
Hi,

Ich weiss ja nicht, ob das Problem noch besteht. Falls ja, hier die (hoffentlich passende) Lösung:

Stop: Wenn du gerade keine Zeit hast dir das alles durchzulesen dann
scroll einfach mal runter bis „2. Einfache Lösung“. Hab’ leider schon
wieder zu viel zu reden gehabt, wie mir jetzt nach dem Schreiben
auffällt :wink:

Dein Problem hängt wahrscheilich mit dem Cache zusammen. Der
Internetexplorer speichert, wie jeder andere Browser, Bilder und
andere Homepageinhalte auf deiner Festplatte zwischen, um nicht bei
jedem Aufruf der selben Seite wieder alle Daten übertragen zu müssen.
Das spart Zeit und bringt dem User Freude. Das Problem, welches damit
einhergeht ist, dass geänderte Bilder, Css-Files und sonstige separat
gespeicherte Dateien manchmal nicht neu geladen werden, wenn sie es
eigentlich sollten (weil sie z.B. wie in deinem Fall geändert wurden).

Der Browser versucht zwar zu überprüfen, ob neuladebedarf besteht,
(und wie du gesehen hast können das die anderen Browser ja auch), aber
wenn der Internetexplorer beim Server nur die Dateigröße anfragt und
das gespeicherte Bild damit vergleicht kann es sehr gut sein, dass
sich diese nicht weit genug geändert hat, um dem Internet Explorer klar
zu machen, dass es sich bei images/ua_map1.png plötzlich um eine
andere Datei handelt. Kurzum, von alleine kommt der IE nicht drauf.

Wenn du nun die Seite manuell aktualisierst bedeutet das, dass du dem
Browser die strikte Anweisung gibst, wirklich ALLES, auch bereits
gespeichertes, nachzuladen. Siehe da, plötzlich sieht man das
generierte Bild.

So, jetzt zur Sache.

  1. Die schwierige, aber korrekte Lösung:

http://de2.php.net/manual/en/function.header.php

Die header()-function dient, kurz gesagt, dazu, dem Browser
vorabinformationen zu den Daten zu übermitteln, die gleich kommen
sollen. Dazu zählt zum Beispiel:

  • Was soll der Browser damit anstellen? (Ist es eine stinknormale
    html-datei oder vielleicht doch ein pdf-dokument (in diesem Fall
    müsste es an den passenden Reader übergeben werden))
  • Gibt es einen Fehler? (dieser wird normalerweise nicht als HTML-Code
    sondern als HTTP-Fehlernummer übermittelt)
  • Wie lange ist die Seite gültig?
    etc.

In der Diskussion, die sich der Funktionsbeschreibung anschliesst,
werden verschiedene Lösungen vorgeschlagen, wie man ALLE Browser dazu
kriegt, eine Seite bei wirklich jedem Aufruf komplett neu zu laden.
Welche die beste ist (Für alle Browser inkl. Konquerer, Safari, IE
Mac, etc.) weiss ich nicht, aber du kannst dir ja eine aussuchen und
testen. Wichtig ist allerdings, dass vor dem Aufruf dieser Funktion
kein HTML ausgegeben wurde. D.h., deine .php-Datei muss in der ersten
Zeile beim ersten Zeichen sofort mit <?php beginnen. Davor darf es
keine Leerzeile und kein und überhaupt gar nichts geben. Echo
darfst du auch nicht vor Aufruf dieser Function benutzen (es sei denn
mit Output Buffer, andere Geschichte), das heisst du setzt den Befehl
am besten ganz nach oben.

  1. Einfache Lösung

Du gaukelst dem Internetexplorer einfach vor, dass es sich bei
images/ua_map1.png um eine andere Datei handelt als die, die er schon
kennt. Dazu änderst du deinen Code wie folgt:

Aus
echo „“;

Wird
echo ‚‘;

Dadurch wird hinter die Datei einfach die MD5-Hashsumme des
Bildinhaltes gehängt. Diese hat die Eigenschaft, dass sie sich auch
bei kleinsten Veränderungen im Bild komplett ändert. Das heisst, wenn
dein Script eine andere Karte erstellt hat kriegt die Adresse des
Bildes sofort eine andere Nummer hinter dem Fragezeichen und gilt
somit als neu.

Ich hoffe das hilft

Gruß

Zed

1 Like