• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Aktualisieren nach history.back()

philippoe

New member
Hallo Leute,

bin ganz neu hier, habe leider ein Problem bei einem aus Javascript, PHP und HTML bestehenden Programm. Also:

Grundsätzlich : Es handelt sich um einen Kalendar. Auf der Seite index.php werden alle Daten (Datum, Titel, Beschreibung) eingetragen. Diese Daten werden dann an die Datei Transform.php weitergeleitet, die die Daten in das richtige Format bringt und dann abspeichert. WENN allerdings ein Fehler mit den Daten aufgetreten ist, dann soll die Transform.php den vorherigen Eingabebildschirm wiederherstellen, die fehlerhaften Eingabefelder rot markieren und die aufgetretenen Fehler ausgeben.

Da die Daten, die der User beim ersten Mal aufwendig eingegeben hat (z.B. eine lange Beschreibung des Termins) nicht verloren gehen sollen, hab ich mich bis jetzt für die "history.back()" Methode von Javascript entschieden. Dummerweise muss ich allerdings direkt nachdem die index.htm durch back() wieder geladen wurde aktualisieren, damit die Fehler (die ja er st durch transform.php erkannt wurden) richtig angezeigt werden.

Und genau das ist mein PRoblem : Das ist an sich alles programmiert, klappt auch super, nur aktualisiert er einfach nicht automatisch!!! Wenn ich (nachdem transform.php mich also an index.php zurückverwiesen hab) F5 drücke, dann aktualisiert er ohne Probleme (d.h. die Fehler werden ordentlich markiert UND die alten eingegebenen Daten sind noch da).

Ich suche jetzt also ne Möglichkeit, diese index.php zu aktualisieren, ohne dass ich F5 drücken muss. Habs schon mit location.reload() im "zurück" link der transform.php versucht, ebenso mit einem location.reload() in der index.php selbst (-> endlosschleife, daher mit einer variable getriggered, funzt aber auch nicht). Hab auch schonmal im head der index.php die Zeilen
Code:
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
  <meta http-equiv="pragma" content="no-cache">
eingefügt, aber auch das bringt garnix! Es sieht einfach so aus, als würde das history.back() einfach die Seite, die schonmal da war so wieder anzeigen wie sie auch damals war, und sich garnicht um den Code (sowie dort enthaltene reload() anweiseungen) kümmern.

Im Moment sieht das daher in etwa so aus:

transform.php
Code:
// Starten der session
//...
if($_SESSION["error"]=="") 
{
  //Eintragen des eintrags
}
else
{
$_SESSION["UpdateIndexWindow"]=true;
$message= "Ein Fehler ist..." // hier gehts normal weiter
$message .= "<a class=\"psf\" href=\"javascript:history.back()\"><< zurück</a>";
// Noch bissel mehr...
}

index.php, in diesem Falle mit der getriggerten variable und der location.reload() funktion.

Code:
ob_start();
session_start();
ob_end_clean();
// ...
if($_SESSION["UpdateIndexWindow"])
{
  echo "<script type=\"text/javascript\">
  alert(\"reloading... \");
  location.reload();
  </script>";
  $_SESSION["UpdateIndexWindow"]=false;
}
?>

Geht also um die Frage, wie ich nachdem ich einmal zurück in der history gesprungen bin diese seite direkt neu laden kann. Hoffe ihr könnt mir helfen.

Vielen Dank schonmal!
Philipp
 
Am Besten ist es du schickst das Script an sich selbst, dort hast die Daten, die (vermutlich) in ein Formular geschrieben wurden und kannst im Fehlerfall diese in das "value" - Attribut reinschreiben (ich rede übrigens von PHP, nicht Javascript). Wenn die Daten in Ordnung sind, kannst du mit dem Speichern weitermachen.
Dieser Vorgang (Formular an die selbe Datei schicken) ist unter irgendeinem Stichwort zu finden. Irgendwas mit Monkey; mir fällt das leider gerade nicht ein...
 
Hi,

Du solltest Dein Problem serverseits angehen und nicht krampfhaft mit Javascript rumbasteln...

Was genau meinst du damit? PHP nutzen (weil serverseitig), in etwa so wie slosd das unten beschrieben hat?

Am Besten ist es du schickst das Script an sich selbst, dort hast die Daten, die (vermutlich) in ein Formular geschrieben wurden und kannst im Fehlerfall diese in das "value" - Attribut reinschreiben (ich rede übrigens von PHP, nicht Javascript). Wenn die Daten in Ordnung sind, kannst du mit dem Speichern weitermachen.
Dieser Vorgang (Formular an die selbe Datei schicken) ist unter irgendeinem Stichwort zu finden. Irgendwas mit Monkey; mir fällt das leider gerade nicht ein...

Ok, unter "Monkey" hab ich auf die Schnelle bei google leider nichts finden können. Aber ich weiß was du meinst mit "Daten an sich selbst schicken". Das funktioniert, klar, werd ich notfalls dann auch machen. Aber gibt es keine Lösung per history.back() oder ähnlich? Weil sonst wirds halt von der Datenverwaltung her bissel aufwendig...

Philipp
 
Weil sonst wirds halt von der Datenverwaltung her bissel aufwendig...

Was hat das mit der Datenverwaltung zu tun? Der einzige Unterschied besteht darin, dass du das Formularziel änderst und in der Zieldatei abfragst ob die Daten korrekt sind. Dann kannst du sogar dein Transform.php einbinden und weitermachen wie du es jetzt auch tust. history.back() ist meiner Ansicht nach eine mehr als fragwürdige Methode um das zu erreichen was du willst.

Beispiel:
PHP:
<?php
function oldValue($name){
return (isset($_POST[$name])) ? ' value="'.$_POST[$name].'"' : '';
}
function onError($name){
global $errors;
return (isset($errors[$name])) ? ' class="error"' : '';
}

if(isset($_POST["send"])){

$errors = array();
if(strlen($_POST["text"])<10) $errors["text"] = true; // du überprüfst z.B. die String-Länge

$errorsFound = (count($errors)!=0);
if(!$errorsFound) {
include "Transform.php";
}

}

if(!isset($_POST["send"]) || $errorsFound === true) {
?>
<style type="text/css">
.error {
border: 1px solid red;
}
</style>
<form action="index.php" method="post">
<input type="text" name="text"<?php echo oldValue("text"); echo onError("text"); ?>>
<input type="submit" value="Abschicken" name="send">
</form>
<?php
}
?>
 
Zuletzt bearbeitet von einem Moderator:
Hey,

wollte mich nochmal ausdrücklich bedanken bei allen, speziell slosd!

Habs jetzt sehr ähnlich gemacht, klappt sehr gut. War nur ziemliche Rumhantiererei weil ich zig Checkboxen, Radiobuttons und Texteingabefeldern immer wieder neu ihre default Werte zuweisen muss ;)

Danke also!

Philipp
 
Zurück
Oben