• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

[ERLEDIGT] Form, externe php, refresh

Butch

Neues Mitglied
Ich quäle mich damit herum und komme nicht weiter:

Meine htm enthält ein Tabellenfeld, in welches per Javascript der Inhalt einer am Server vorhandenen Textdatei (Liste der bisherigen Besucher) eingelesen wird. Klappt wunderbar.

Sie enthält ferner eine Form, in die der Besucher seinen Namen einfügt.
Beim Absenden wird eine externe php gestartet, die die Textdatei mit dem neuen Namen ergänzt. Auch das klappt wunderbar.

Die Form beginnt dzt. so:
<form method="post" action="write2txt.php" target="_blank">​

Ich möchte aber Folgendes: Nach dem Absenden soll einfach nur die htm neu geladen werden, d.h. mit den inzwischen aktualisierten Daten aus der Textdatei.

Ich hoffe, ich habe mich verständlich ausgedrückt, und jemand hier hilft mir auf die Sprünge ...
 
Zuletzt bearbeitet:
Werbung:
Bemühe google mit dem Begriff Affenformular, das wird dir weiterhelfen
 
Werbung:
@bdt600: Willst du mir damit sagen, das Problem sei nicht verständlich genug beschrieben? Ich verstehe leider deine Konnotationen nicht. Und beim Affenformular habe ich leider keinen Zusammenhang mit meinem Problem entdeckt.

Inzwischen bin ich in diesen Punkten weiter gekommen:

Bei der Form muss 'target="_blank"' natürlich entfernt werden. Und in der externen php-Datei muss ich nach dem Schreiben der neuen Daten in die Textdatei sowas einfügen:
header("Location: myhtmfile.htm");
exit();​
Damit erreiche ich jetzt tatsächlich das gewünschte Verhalten (das nämlich die php-Seite gar nicht sichtbar geöffnet wird und man also die ganze Zeit die htm-Seite sieht).

Es schein nur noch, leider, ein Problem mit dem Caching zu geben: Es scheint nicht gleich automatisch die aktualisierte Besucherliste auf, ich muss quasi manuell das erneute Laden der Seite erzwingen.

Damit kämpfe ich jetzt noch. Die htm-Seite selbst hat am Anfang die bekannten "no-cache"-Zeilen, daher gehe ich davon aus, dass es nicht am Caching der Seite selbst liegt, sondern eventuell am Caching der txt-Datei ...
 
Wenn du dich mit dem Affenformular wirklich richtig beschäftigt hättest und dir dann auch noch das EVA-Prinzip zu Gemüte führst, würde dir auffallen, dass dein Vorgehen unnötig kompliziert ist
 
Werbung:
@bdt600: Ich bitte dich, dann hab doch erbarmen mit mir und verrate mir endlich, was du konkret meinst! Ich finde einfach keinen Zusammenhang.

"Hierbei befinden sich das HTML-Formular und die Gültigkeitsabfrage innerhalb eines Skriptes, und das Formular ruft sich daher beim Absenden immer wieder selbst auf, solange ungültige Daten eingegeben werden." Damit habe ich aber keine Probleme in meinem Skript. Ich sehe auch keine Anregung beim Affenformular, was ich bei meiner Sache weniger kompliziert lösen könnte.
 
Du kannst mir nicht erzählen, dass du dir innerhalb 13 Minuten ernsthaft Gedanken über das EVA-Prinzip gemacht hast und genauso wird es wohl bei dem Thema Affenformular sein. Es ist ja deutlich einfacher, sich alles vorkauen zu lassen, oder? Wir reden hier eindeutig von Grundlagen, die man einfach können sollte. Und ein Forum ist nicht dafür da, Grundlagen zu vermitteln.

Was ist daran schwer:
PHP:
<?php
   if (file_exists("names.txt"))
       $names = file("names.txt", FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES);
   else
       $names = array();
  
   if (isset($_POST['name']))
   {
       $names[] = $_POST['name'];
       file_put_contents("names.txt", implode("\n", $names));
   }
?>
<!DOCTYPE html>
<html lang="de">
<head>
  <meta charset="UTF-8">
  <title>Test</title>
</head>
<body>
 <form action="" method="post">
   <p>Name: <input type="text" name="name"></p>
   <p><input type="submit" name="submit" value="Speichern"></p>
 </form>
<?php
  if (count($names))
  {
      $names =  htmlentities(implode("\n", $names),ENT_QUOTES | ENT_IGNORE, "UTF-8");
      echo "Folgende Namen wurden gespeichert: <br>" . nl2br($names);
  }
  else
    echo "Nichts gespeichert";
?>
</body>
</html>
 
Die php-Teile sind bei mir ganz ähnlich wie in deinem Skript, und, wie gesagt, damit habe ich keine Probleme.

Vielleicht liegt hier ein Missverständnis vor, und du willst mir eine Lösung nahe bringen, bei der es nur eine php-Datei gibt? Das kommt bei mir nicht in Frage, meine Seite muss eine htm sein, deswegen wird eben eine externe php-Seite aufgerufen, wie auch eingangs beschrieben.

Klärt sich jetzt etwas, oder verstehe ich wieder nichts?
 
Werbung:
Also doch, das ist der Punkt?!

Gut, ich sehe das so: Ich habe ein Detailproblem innerhalb meines gewählten Lösungsansatzes beschrieben und wollte Tipps zu diesem Detailproblem. Du beziehst dich hingegen von Anfang an und durchgehend auf den Lösungsansatz selbst, ohne dass das für mich irgendwie erkennbar wäre. So kann man lange sinnlose Umwege machen, klar. Aber du wirst hier, nehme ich an, sicher nicht erkennen, wie kontraproduktiv das deinerseits ist ...

Zur Frage selbst:
Es mag mit meinem mangelhaften Wissensstand und mit der Eigenart der Webseiten, die ich machen will, zusammenhängen, aber: Erstens möchte ich aus gewissen Gründen ("Eigenart"), dass der Besucher "mydomain/index.htm" im Adressfeld sieht, und zweitens habe ich bisher die Erfahrung gemacht ("Wissensstand"), dass ich es mit htm-Seiten leichter schaffe, halbwegs aktualisierte Google-Funde zu erzielen.

Trotzdem -- danke für deine Zuwendung!
 
Was ist so wichtig daran, dass da index.htm steht? Dem Besucher der Seite ist es doch völlig wurscht, ob da index.php oder index.htm steht. Der Inhalt der Seite ist wichtig. Und selbst dann könnte man das mit ein paar Tricks hinbekommen. Mir ist die Funktionalität und die leichtere Entwicklung wichtiger als die Dateiendung.

Der Webserver liefert immer den HTML-Code aus, den auch google analysiert. Dabei ist es völlig wurscht, ob dieser aus einer HTML-Datei kommt oder von PHP erzeugt wurde.
 
Werbung:
Meine htm enthält ein Tabellenfeld, in welches per Javascript der Inhalt einer am Server vorhandenen Textdatei (Liste der bisherigen Besucher) eingelesen wird. Klappt wunderbar.

Sie enthält ferner eine Form, in die der Besucher seinen Namen einfügt.
Beim Absenden wird eine externe php gestartet, die die Textdatei mit dem neuen Namen ergänzt. Auch das klappt wunderbar.

Die Form beginnt dzt. so:
<form method="post" action="write2txt.php" target="_blank">
Ich möchte aber Folgendes: Nach dem Absenden soll einfach nur die htm neu geladen werden, d.h. mit den inzwischen aktualisierten Daten aus der Textdatei.
Was hindert dich daran, in deiner write2txt.php am Ende das einzufügen?
HTML:
<meta http-equiv="refresh" content="0;URL=DEINE_HTML_DATEI">
bzw wenn keine Ausgabe gestartet wird die HTML über
PHP:
header("Location: DEINE_HTML_DATEI");
neu zu laden.
 
@sysop: Vielen herzlichen Dank!

Ich habe aber inzwischen das Ganze mit meiner Struktur schon einwandfrei gelöst. Wesentliche Punkte, die ich geändert habe (nach zielführenden Tipps, die ich in einem anderen Forum bekommen habe), waren:
- target aus Form entfernt
- in der php-Datei nach dem Schreiben in die Textdatei eingefügt:
header('Location: ' . $_SERVER['HTTP_REFERER']);
exit;

Das war dann genau die Lösung für mein beschriebenes Problem.

Allerdings tauchte dann noch ein Problem damit auf, dass die einzulesende Textdatei offensichtlich immer aus dem Cache genommen wurde, wodurch dann doch keine aktualisierten Daten dargestellt wurden. Ich musste daher auf ein Einlesen in Form von src="txtfile.txt?..." umstellen, wo ... für eine Zufallszahl steht. Das war dann aber noch mal extrem schwierig, da die mir zunächst einleuchtende Lösung nicht funktionierte:
document.write('<script type="text/javascript" src="' + filerando + '"></script');
(filerando ist hier schon der Dateiname mit ? und angehängter Zufallszahl)
Es hat extrem lange gedauert, bis ich verstand, dass ich diese Zeile in zwei Teile teilen muss, damit sie funktioniert, z.B. so:
document.write('<script type="text/javascript" src="' + filerando + '"></scr');
document.write('ipt\>');

Sehr knifflig!

Aber: Ende gut, alles gut. Jetzt klappt alles ganz zuverlässig.
 
Werbung:
Zurück
Oben