Antworten auf deine Fragen:
Neues Thema erstellen

Formularfelder beim surfen nicht löschen

T

tvingo

Guest

Hallo;-)

Kurze Frage-> Ich habe ein Kontaktformular, auch mit Fehlermeldungen, usw., per PHP konstruiert u. alles läuft auch super:)
Jetzt ist es so, dass der Seitenbesucher noch Infos von der Seite holen kann, bevor er das Formular abschickt. Wenn er auf andere Webseiteninhalte klickt, löschen sich seine Formulareinträge u. bevor er dann das Formular abschicken will, muss er alles erneut eintragen. Das ist natürlich ziemlich blöd.:-(

Jetzt hab ich gehört, dass man - wenn man alle anklickbaren internen Links in PHP-Seiten umwandelt, - die Formulareinträge quasi ständig 'mitschleppt', damit DANN, wenn der User wieder auf sein Formular klickt, alle Formulareinträge noch enthalten sind. Cookies möchte ich nicht so gerne u. da gibt es noch eine 2. Möglichkeit, da hab ich vergessen, wie das hieß - irgendwas mit 'S..'.. Keine Ahnung. Auf jeden Fall würde mich interessieren, ob jemand mir kurz sagen kann, wie ich das oben Beschriebene - per PHP - 'einbinden' kann oder mir Tipps gibt, wo ich Erklärungen dafür finde:) fänd ich nett:idee:
 

pain2000

Nicht mehr ganz neu hier

AW: Formularfelder beim surfen nicht löschen

Hi,
ne Seite zum anschauen wäre nicht schlecht. Verstehe grad nicht ganz, was der Besucher noch für Infos holen kann/soll wenn er das Formular ausfüllen will.
Wenn das Formular nicht abgeschickt wird, sondern ein Link zu einer anderen Seite angeklickt wird, läd der Browser ja die Seite des Links und das Formular ist wech... Mit $_POST oder $_GET kannst du Daten "mitschleppen". Dazu muss aber das Formular gesendet werden bzw. die neue Seite muss diese Daten auswerten und ggf. wieder weitergeben. Was anderes fällt mir jetzt ohne die Seite zu sehen nicht ein.
Ansonsten könntest du das Formular in ein Popup-Fenster packen, ist aber nicht die schönste Sache...
 
T

tvingo

Guest

AW: Formularfelder beim surfen nicht löschen

Hi,
ne Seite zum anschauen wäre nicht schlecht. Verstehe grad nicht ganz, was der Besucher noch für Infos holen kann/soll wenn er das Formular ausfüllen will.
es geht einfach um wichtige Infos, die er sich holen kann, falls er noch Daten braucht, Infos braucht, Tipps braucht, etc.



Wenn das Formular nicht abgeschickt wird, sondern ein Link zu einer anderen Seite angeklickt wird, läd der Browser ja die Seite des Links und das Formular ist wech...
eben:-(


Mit $_POST oder $_GET kannst du Daten "mitschleppen". Dazu muss aber das Formular gesendet werden bzw. die neue Seite muss diese Daten auswerten und ggf. wieder weitergeben.
ok.. ich brauch also ne function, um diesen Vorgang zu aktivieren..


Ansonsten könntest du das Formular in ein Popup-Fenster packen, ist aber nicht die schönste Sache...
genau, daran dachte ich auch u. wollte genau das gerne vermeiden. Bei einem großen Stromanbieter - hab ich gesehen - wird das so gemacht. Da sind die Infos aber auch mit wenig Text, sehr überschaubar. Bei mir müsste man ggf. schon mehr Text lesen, bzw. Grafiken sehen können u. ich möchte dem User ungerne so unschöne Pop-up-Fenster zumuten.. soll schon ETWAS geschmeidig aussehen;-) Danke für deine Mühe:)
 

pain2000

Nicht mehr ganz neu hier

AW: Formularfelder beim surfen nicht löschen

ok.. ich brauch also ne function, um diesen Vorgang zu aktivieren..
Keine Ahnung, wie gesagt, damit der Server die Daten bekommt muss das Formular gesendet (abgeschickt) werden.
Wäre nett, wenn du die Seite mal zeigen könntest... Ist so ohne weiteres etwas blöd was zu erfinden...
Vllt. hat jemand anderes auch noch ne Idee.
 

beautyIAF

I like HDR

AW: Formularfelder beim surfen nicht löschen

Hallo,

ändert sich denn an den Einträgen in dem Formular noch etwas, also kommen noch weitere Felder hinzu, wenn der Benutzer auf deine anderen Inhalte zugreift, oder sind die Inhalte dann nur zu Infozwecken?

Was steht denn alles im Formular?
Gegebenenfalls kannst du auch eine Session erzeugen, dann, wenn der Benutzer alle Felder des Forms ausgefüllt hat, alles einmal mit der Session ID zusammen in eine Datenbanktabelle schreiben lassen, sollte der Benutzer dann doch noch einmal, vor dem Absenden des Forms, andere Seiten aufrufen, musst du in deinen weiteren Seiten immer nur die Session ID mitschleppen, wenn du diese nicht vorher registrieren lässt. Kommt er zurück auf dein Kontaktform, wird geprüft, ob mit dieser Session ID bereits ein Eintrag in der Datenbank vorhanden ist. Ja -> Alle Daten auslesen, Nein -> leeres Kontaktform präsentieren.
 

pain2000

Nicht mehr ganz neu hier

AW: Formularfelder beim surfen nicht löschen

@beautyIAF: genau das wollte ich auch sagen. Mit Sessions kann man das in diesem Fall ;) elegenter lösen.

Ein kleines Tut wäre z.B. hier zu finden...
 
T

tvingo

Guest

AW: Formularfelder beim surfen nicht löschen

Hallo,

ändert sich denn an den Einträgen in dem Formular noch etwas, also kommen noch weitere Felder hinzu, wenn der Benutzer auf deine anderen Inhalte zugreift, oder sind die Inhalte dann nur zu Infozwecken?
die sind nur zu Info-zwecken..


Was steht denn alles im Formular?
Gegebenenfalls kannst du auch eine Session erzeugen, dann, wenn der Benutzer alle Felder des Forms ausgefüllt hat, alles einmal mit der Session ID zusammen in eine Datenbanktabelle schreiben lassen, sollte der Benutzer dann doch noch einmal, vor dem Absenden des Forms, andere Seiten aufrufen, musst du in deinen weiteren Seiten immer nur die Session ID mitschleppen, wenn du diese nicht vorher registrieren lässt. Kommt er zurück auf dein Kontaktform, wird geprüft, ob mit dieser Session ID bereits ein Eintrag in der Datenbank vorhanden ist. Ja -> Alle Daten auslesen, Nein -> leeres Kontaktform präsentieren.
also, dort stehen die Adressdaten, es sind Check-boxen dabei u. radiobuttons! ach ja u. ein Textfeld.. Er kann die Infos anklicken (also die anderen interenen Seiten), um z.B. sich über die AGB zu informieren.. Wenn er zurück auf das Kontaktform klickt, sollte nicht alles wieder gelöscht sein:rolleyes: Ja, über Sessions hab ich auch schon mal was gehört. Dazu müsste ich mich dann ausführlich informieren. Eine Datenbanktabelle hab ich übrigens nicht.. Mir wurde gesagt, ich solle die Variablen, aus dem kontakt.php, jeweils in die anderen Info-Seiten einbinden. Die Info-html-Seiten müssten dann in php-Seiten umgewandelt werden.. Das ist so das, was ich zur Zeit darüber weiß;-)
 

beautyIAF

I like HDR

AW: Formularfelder beim surfen nicht löschen

Versuchs mal mit Hilfe des Tutorials, wenn du Fragen hast oder weitere Anregungen benötigst, kannst du dich einfach melden!

beautyIAF.
 

stroyer

Aktives Mitglied

AW: Formularfelder beim surfen nicht löschen

Cookies möchte ich nicht so gerne
Streng genommen speichern SESSIONs ihre ID entweder über ein Cookie oder über eine GET Variable.

Ich denke um diese Art von Cookies wirst du nicht herumkommen.
Ein weiterer Nachteil ist, dass dafür das Formular an den Server "weggeschickt" werden muss. Du musst dann im Script zwischen Abschicken und Speichern unterscheiden und bei beiden type="submit" setzen. Sonst bleibt eigentlich nur das setzen von Cookies per JS über. Vorteil: kein Reload, jederzeit bei Änderung speicherbar; Nachtteil: Cookie und JS
Eine letzte Möglichkeit gibt es, die ich aber nicht verwenden würde: Regelmäßiger Upload der Daten per AJAX.
 
T

tvingo

Guest

AW: Formularfelder beim surfen nicht löschen

Also.. ich trau mich ja fast schon nicht, hier zu posten, weil ich nicht sicher bin, wie sehr ich mir jetzt durch Eigenrecherche, ein Feedback verdient habe*s

also, Folgendes->

Ich habe jetzt session-mäßig das hier konstruiert:


index.php

<?php
session_start();
$_SESSION["Menge"]="Eine 1 als Voreintrag oder das, was der User eingibt";
?>
<!Doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<form action="shop.php" method="post">
<input type="text" name="Menge"
value="<?php
if(isset($_SESSION["Menge"]) &&
is_string($_SESSION["Menge"])) {
print(htmlspecialchars($_SESSION["Menge"]));
}
?>">
</form>

<a href="info.php?<?php print(session_name()); ?>=<?php print(session_id()); ?>">Info</a>

</body>
</html>


info.php

<?php
session_start();
?>
<!Doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<p>Im Formular wurde <?php echo $_SESSION["Menge"]; ?> eingegeben!</p>

<a href="index.php?<?php print(session_name()); ?>=<?php print(session_id()); ?>">Zurück zu den Formulareinträgen</a>

</body>
</html>


Das klappt auch, weil er mir natürlich GENAU das ausgibt, was ich angeben habe->
Also den Satz: $_SESSION["Menge"]="Eine 1 als Voreintrag oder das, was der User eingibt"; ->
Eine 1 als Voreintrag oder das, was der User eingibt.

Natürlich möchte ich nicht den Satz, SONDERN das, was der User WIRKLICH eingegeben hat. Wie mache ich der $_SESSION["Menge"] klar, dass sie das auslesen soll, was unter value im Form-tag steht?

Wisst ihr da was:) Sonst muss ich mich noch kirre suchen im Netz:)
 
B

Black6Death12

Guest

AW: Formularfelder beim surfen nicht löschen

du musst in der Datei wohin der Benutzer nach dem abschicken des formulares hinkommt den wert aus dem Feld in die $_SESSION speichern.

also in deinem Fall:
info.php

<?php
session_start();
//hier neuer code
$_SESSION["Menge"] = $_POST["Menge"];
//ende
?>
<!Doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<p>Im Formular wurde <?php echo $_SESSION["Menge"]; ?> eingegeben!</p>

<a href="index.php?<?php print(session_name()); ?>=<?php print(session_id()); ?>">Zurück zu den Formulareinträgen</a>

</body>
</html>
dann sollte im der zuletzt gesendete wert drin stehen.
 

Eskayp

Something

AW: Formularfelder beim surfen nicht löschen

Das Problem ist, dass die Formulardaten erst dann an PHP übermittelt werden, wenn das Formular auch abgeschickt wird. Da der User aber einen Link anklicken können soll, musst Du in etwa folgendes machen:

- Link mit JavaScript versehen
- JavaScript stoppt den eigentlichen Link-Befehl
- JavaScript ändert eine verstecktes Formularfeld, um sich zu merken, wohin der Link eigentilch hinführen sollte
- JavaScript schickt das Formular ab (submit)

Jetzt kommt PHP ins Spiel
- PHP empfängt das Formular (inkl. verstecktem Formularfeld)
- PHP speichert die Daten aus dem Formular in der Session
- PHP ruft die Seite auf, die im versteckten Formularfeld gespeichert wurde

Das sieht dann (ganz grob und ungetestet) in etwa so aus:

HTML:
<script language="javaScript">
  function gotoPage(pageUrl) {
    document.formular.goto.value = pageUrl;
    document.formular.submit();
  }
</script>

<form name="formular" action="submit.php" method="post">
  <input type="hidden" name="goto" value="shop.php" />
  <input type="text" name="menge" value="<?= $_SESSION['menge'] ?>" />
  <input type="submit" value=" zum Shop " />
</form>

<p><a href="info.php" onClick="gotoPage('info.php');return false;">Infoseite</a></p>

Und die PHP-Datei submit.php:
PHP:
<?php
  // Session starten
  session_start();

  // Variablen vorbelegen, falls noch nicht gesetzt
  if (!isset($_SESSION['menge'])) $_SESSION['menge'] = 1;

  // Falls Formular mit "menge" abgeschickt wurde, Wert in Session speichern
  if (isset($_POST['menge'])) $_SESSION['menge'] = $_POST['menge'];

  // Weiterleiten
  header('Location: '.(isset($_POST['goto']) ? $_POST['goto'] : 'index.php'));
  die();
?>

Das nur als Ansatz...
 

stroyer

Aktives Mitglied

AW: Formularfelder beim surfen nicht löschen

Ich weiß nicht, aber ich fände es gescheiter, es zuerst mit AJAX zu versuchen und erst wenn alle Stricke reißen per Javascript ein Formular zu posten.
 
T

tvingo

Guest

AW: Formularfelder beim surfen nicht löschen

So.. Ich hab mich jetzt dazu durchgerungen, ALLES neu zu machen:roll:

WEIL-> Das mit den Links klingt nachvollziehbar, ist aber nicht praktikabel. Ich werde Wohl oder Übel die Links in submit-buttons umfunktionieren, DAMIT ich die SESSION auch aktivieren kann:idee: Dann ist EINIGES leichter*s Oh..jee..*g

DANKE an die tollen u. schnellen Antworten:idee: Wünsch euch allen ein schönes, sonniges WE;-)
 

Eskayp

Something

AW: Formularfelder beim surfen nicht löschen

Die Lösung mit den Submit-Buttons hat folgende Nachteile:
- Alle Links auf der Seite müssen Submit-Buttons sein (Optik), auf den anderen Seiten sind sie aber wohl normale Links. Das verwirrt den User.
- Machst Du auf anderen Seiten auch Submit-Buttons, brauchst Du für jede Seite ein Formular und führst jedesmal einen POST durch. Damit bist Du eingeschränkt bei der Verwendung weiterer Formulare (z.B. Kontaktformular) (Stichwort: verschachtelte Formulare) und die Back-Funktion des Browsers ist eingeschränkt

Vorteil ist natürlich, dass Du auf JavaScript verzichtest. Wobei ich explizit darauf hinweisen möchte, dass die Seite mit meiner Lösung auch ohne JS funktioniert, nur dann eben auch ohne die Formularspeicherfunktion.

Zur Verwendung von Ajax:
Das mag die "höherwertige Variante" sein, ist aber in diesem Fall unnötig und "mit Kanonen auf Spatzen geschossen". Man spart nichts, bläht die Kiste auf und JS ist trotzdem notwendig.

Alles in allem: hat ja keiner gesagt, dass es einfach ist nutzerfreundliche Websites zu programmieren ;)
 
T

tvingo

Guest

AW: Formularfelder beim surfen nicht löschen

Die Lösung mit den Submit-Buttons hat folgende Nachteile:
- Alle Links auf der Seite müssen Submit-Buttons sein (Optik), auf den anderen Seiten sind sie aber wohl normale Links. Das verwirrt den User.
- Machst Du auf anderen Seiten auch Submit-Buttons, brauchst Du für jede Seite ein Formular und führst jedesmal einen POST durch. Damit bist Du eingeschränkt bei der Verwendung weiterer Formulare (z.B. Kontaktformular) (Stichwort: verschachtelte Formulare) und die Back-Funktion des Browsers ist eingeschränkt
stimme dir zu! Daran dachte ich auch:idee:


Vorteil ist natürlich, dass Du auf JavaScript verzichtest. Wobei ich explizit darauf hinweisen möchte, dass die Seite mit meiner Lösung auch ohne JS funktioniert, nur dann eben auch ohne die Formularspeicherfunktion.

Zur Verwendung von Ajax:
Das mag die "höherwertige Variante" sein, ist aber in diesem Fall unnötig und "mit Kanonen auf Spatzen geschossen". Man spart nichts, bläht die Kiste auf und JS ist trotzdem notwendig.
Stimmt! Ich hab ja fast ein schlechtes Gewissen, dass ich dein MÜHE jetzt gar nicht verwenden kann! Bin aber DENNOCH einen Schritt weiter gekommen, weil er mir gezeigt hat, was ich anders machen könnte:arrow: Jetzt hab ich es so gelöst, dass ich nur ZWEI Buttons in "submit" umwandle u. damit die Daten per SESSION übertragen kann. Dann können auch weiterhin alle Links normal Links bleiben, weil das sonst wirklich komisch aussähe;-)

Alles in allem: hat ja keiner gesagt, dass es einfach ist nutzerfreundliche Websites zu programmieren ;)
stimmt*s
 
T

tvingo

Guest

AW: Formularfelder beim surfen nicht löschen

so.. ich hab das jetzt so gelöst, dass ich ein Formularfeld nur dann auf die nächste Seite übergebe, WENN überhaupt ein Inhalt vorliegt.
Das sieht dann so aus:

<form action="daten.php" method="post">

<?php
if($_POST['Menge']!="" &&
isset($_POST["Menge"])) {
print '

<input type="text" name="Menge" id="Menge"
value="" >';
}
?>


</form>

So, das klappt auch hervorragend. Wenn nix im Formfeld steht, gibt er das Feld auch nicht an die nächste Seite weiter.
Nachteil-> Das value="" ist natürlich LEER :arrow:

Wenn ich das value übergebe, OHNE das Formfeld <input...etc.> in das php-script einzubinden, wird IMMER ein Feld übertragen, auch, wenn es leer ist. Das wollte ich vermeiden:arrow: Wenn kein value übergeben wird, soll das ganze Feld nicht erscheinen.

So habe ich bisher das value übergeben:

<form action="daten.php" method="post">

<input type="text" name="Menge" id="Menge"
value="<?php
if(isset($_POST["Menge"]) &&
is_string($_POST["Menge"])) {
print(htmlspecialchars($_POST["Menge"]));
}
?>
">

</form>

Das klappt auch.

So u. wenn ich jetzt BEIDE Sachen zusammen lege-> Formularfeld nur bei Inhalt übergeben - sonst nicht - UND das value entsprechend übergeben, falls es einen Inhalt hat, kommt dieser Kauderwelsch dabei heraus*s
Wie kann man das jetzt richtig formulieren? Viell.hab ich ja nur eine Klammer falsch gesetzt, oder Sonstiges? FALLS jemand eine Antwort hat, wäre das ganz großartig:)

<form action="daten.php" method="post">

<?php
if($_POST['Menge']!="" &&
isset($_POST["Menge"])) {
print '

<input type="text" name="Menge" id="Menge"
value="<?php
if(isset($_POST["Menge"]) &&
is_string($_POST["Menge"])) {
print(htmlspecialchars($_POST["Menge"]));
}
?>
">';
}
?>

</form>
 
Zuletzt bearbeitet von einem Moderator:

Eskayp

Something

AW: Formularfelder beim surfen nicht löschen

Du baust da in eine PHP-Ausgabe einen PHP-Befehl ein. Das kann nicht funktionieren.

Entweder musst Du die Ausgabe splitten:
PHP:
  <?php
    if($_POST['Menge']!="" && isset($_POST["Menge"])) {
      print '<input type="text" name="Menge" id="Menge" value="';
      if (is_string($_POST['Menge'])) print htmlspecialchars($_POST['Menge']);
      print '" />';
    }
  ?>

Oder mit Verkettungen (Punkt-Operator) arbeiten:
PHP:
  <?php
    if ($_POST['Menge']!="" && isset($_POST["Menge"])) {
      print '<input type="text" name="Menge" id="Menge" value="'.(is_string($_POST['Menge']) ? htmlspecialchars($_POST['Menge']) : '').'" />';
    }
  ?>

Und nochwas: Du solltest bei der IF-Abfrage erst abfragen, ob die Variable überhaupt gesetzt ist, bevor Du ihren Inhalt prüfst. Sonst gibt Dir die erste Abfrage schon einen Eintrag im error.log, bevor die zweite merkt, dass gar kein $_POST übertragen wurde.
Und da PHP sowieso Variablen beliebig von String in Numeric und umgekehrt wandelt, kannst Du die Abfrage auf String auch weglassen. Bei mir sähe das also so aus:
PHP:
  if (!empty($_POST['Menge'])) echo '<input type="text" name="Menge" value="'.htmlentities($_POST['Menge']).'" />';
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.565
Beiträge
1.538.067
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben