Inhalte eines Formulars bei Seitenaktualisierung behalten

Leyja

Mitglied
Hallo,

ich bastel derzeit an einem kleinen Newsscript, wo es eben Eingabefelder für Überschrift, Datum und Inhalt gibt. Außerdem soll man als User Quellen (also Link und Bezeichnung) eingeben können.
Da es ja auch mal vorkommen kann, dass man eine News aus mehreren Quellen zusammenträgt, hatte ich mir überlegt, über zwei Links eine $_GET-Variable zu setzen, die dann zählt. Also es gibt den Link "Mehr" und den Link "weniger" und wenn ich auf "mehr" klicke, zählt eine Variable eben um eins hoch und so viele Felder wie die Variable als Wert hat, sollen dann ausgegeben werden. Mit Weniger reduzier ich dann entsprechend (wobei das auch nicht unbedingt dabei sein muss, leere Felder werden nicht ausgewertet).
Das klappt auch alles soweit ganz gut, der Wert wird über die URL übergeben und wenn die Seite dann neu lädt entsprechend viele Felder ausgegeben.

Jetzt ist nur meine Frage: Wenn ich in mein Formular bspw. schon im Textfeld oder so was eingegeben habe und mir fällt dann erst auf, dass ich eigentlich mehr als nur eine Quelle benötige, ist ja der Inhalt beim Neuladen der Seite (was ja beim Klicken auf den Link passiert) weg. Gibt es eine Möglichkeit, die Eingaben irgendwo zwischenzulagern? Ich meine, sie können ja wahrscheinlich noch nicht in den $_POST-Variablen drin sein, weil ich noch gar nicht auf den Submit-Button geklickt habe.
Ich würde das ganze gerne nur auf PHP-Basis umsetzen, ohne Javascript oder sowas.
 
Also die Problembeschreibung ist schon fast zu ausführlich ;)
Vor allem gegenüber diesem kurzen Lösungsansatz:
PHP:
<?PHP
echo "<pre>";
print_r($_POST);
echo "</pre>";
?>

<form action="" method="post">
  <input name="titel" value="<?PHP echo $_POST["titel"]; ?>" />
  <input name="foo" value="<?PHP echo $_POST["foo"]; ?>" />
  <input type="submit" value="senden" />
  <input type="submit" name="mehr" value="mehr" />
</form>

Lege das mal als seperate PHP an.
Bei "senden" werden die Daten normal übertragen.
Bei "mehr" gibt es aber noch zusätzlich den wert vom Button: $_POST["mehr"] = "mehr"

Das reicht um in deiner PHP zu prüfen ob die Daten gesendet werden sollen oder man noch eine Zeile etc. will.
 
Hm, erstmal vielen Dank für die Antwort ^^ Das Prinzip deines Lösungsvorschlags hab ich soweit glaub ich verstanden. Ich bin mir aber nicht so ganz sicher, ob ich das in mein Skript, so wie es bisher ist, einbauen kann.

Ich poste einfach mal nen Teil des Quellcodes, wie es bisher ist.

PHP:
<form action="?site=news&amp;<?php if (isset($_GET[edit])) { echo "edit2=".$_GET[edit]; } else { echo "neu=db_news"; } ?> " method="post"> 

  <?php echo $_POST[headline]; ?>
  
  Überschrift: <br />
  <input type="text" value="<?php echo $headline; ?>" name="headline" size="66" /><br />
  Inhalt: <br />
  <textarea name="newseingabe" cols="65" rows="20"><?php echo $newsinhalt; ?></textarea><br />
  Quelle(n): <br />
  <table>
  <?php
    for ($i = 0; $i < $counter; $i++) {
      echo "<tr><td style='text-align:left;'>Adresse:</td><td style='text-align:left;'>Quellenname:</td></tr>";
      echo "<tr><td><input name='quelle" .$i."' size='40' style='margin-right:10px;' value='http://'></td><td><input name='quellenname" .$i."' size='40'></td></tr>";
    }
  ?>
  </table>
  <?php if(!isset($_GET['edit']) && !isset($_GET['neu'])) { ?>
    <a href="?site=news&amp;quellencount=<?php echo ($counter + 1); ?>">mehr</a> | 
    <a href="?site=news&amp;quellencount=<?php echo ($counter - 1); ?>">weniger</a>
  <?php } ?>
  <p style="margin:8px 0px 0px; padding:0px; text-align:right;">
    <input name="speichern" type="submit" value="Speichern" style="margin-right:8px;" />
    <input name="abbrechen" type="reset" value="Abbrechen" />
  </p>
  
</form>

Die Seite ist so aufgebaut, dass ich oben meinen Eingabebereich habe und unten drunter alte Einträge. Wenn ich bei alten Einträgen auf editieren klicke, dann soll der Inhalt der alten Einträge in das gleiche Formular gepackt werden (also keine neue Seite). Anschließend wird dann beim Abschicken eben überprüft, ob in der URL ein Edit enthalten ist, dann soll geupdatet werden, wenn kein Edit da ist, soll das Skript aufgerufen werden, welches das Speichern der Daten verarbeitet.
Wenn ich also diesen Button "mehr" einbaue, dann sieht das skript, dass in der URL kein Edit vorhanden ist, also lädt es mal eben die andere Datei und danach sind ja dann sowieso alle Inhalte weg.

Gibts irgendwie ne Möglichkeit, abzufragen, welchen Button ich gedrückt hab, bevor ich die seite neu lade *G* Bzw. in dem action-Attribut dann eben noch ne Abfrage reinzupacken, ob ich nun grad auf mehr oder auf speichern gedrückt hab?
 
Mal gucken ob ich es richtig verstanden habe.

Also entweder lässt du die Seite auf die nicht verwiesen werden soll prüfen ob $_POST["mehr"] gesetzt ist und im Falle dessen das andere Script includen statt sich selbst auszuführen.

Oder aber nimmst du action="get" in der Form womit man vllt auch arbeiten kann, was aber sehr unsicher ist.

Ich würde sogar so weit gehen und mein Script neu überdenken selbst wenn es grade mal 2 Tage oder so alt ist. Lieber was wegschmeißen an Codeschnipseln als das bestehende so lang zu ändern bis es überladen ist.
 
Nee, mit Get-Variablen will ich lieber nicht arbeiten, da steht ja dann alles drin und das fänd ich nicht so prickelnd ^^

An neuschreiben hab ich auch schon gedacht. Mein Problem ist nur, dass ich zum Speichern der Daten das extra in ein externes Skript ausgelagert habe (da steht lediglich drin, was in die Tabelle eingetragen werden soll, mehr nicht), damit anschließend die Seite komplett geladen wird und die Post-Variablen leer sind. Hatte das Speichern in die Datenbank vorher in dem Skript selbst drin, wo auch das Formular und so drin ist. Wenn man dann aber seine Eintragungen macht, auf Speichern klickt und dann F5 drückt, wird der Eintrag nochmal in die datenbank gepackt (und wenn ich 10 mal f5 drücke, wird er halt 10 mal reingeschrieben, was nicht so schön ist *g*).
Mir hatte mal irgendwann jemand gesagt, dass ich das so lösen kann, indem ich dann sowas hier einfüge:

PHP:
header("Location:?site=".$_GET[site]);
                exit;

Das muss ich aber ja nun in die index.php packen vor dem HTML-Code denn ansonsten funktioniert das nicht mehr.
Irgendwie behindert das eine das andere und umgekerht :-/ Bin halt noch nicht soo erfahren mit PHP, dass ich sämtliche Tricks kenne, aber das kann doch nicht unmöglich sein, das irgendwie zu vereinbaren oder?


edit: Hab das Problem jetzt irgndwie auf Umwegen lösen können. Ob das jetzt so das optimalste oder schönste ist, weiß ich nicht, aber es geht wenigstens ^^"
 
Zuletzt bearbeitet:
Zurück