Nach E-Mail-Button-"Senden"-Klick PopUp statt Weiterleitung auf eine neue Seite

Betagurke

PC-Selbstbauer(in)
Hallo Community,

ich habe ein Problem mit PHP.
Ich habe via HTML ein einfaches Kontaktformular erstellt, es funktioniert auch alles (inklusive dem Senden an meine E-Mail).
Nur werde ich bei erfolgreicher Eingabe auf eine neue Seite weitergeleitet. :/
Ich möchte aber dass die "Erfolgs-Nachricht" in einem PopUp erscheint oder dass man nach 5 Sekunden automatisch von der "Erfolg-Seite" zurück auf die kontakt.html oder index.html kommt.
Wie lässt sich das mit PHP realisieren? Oder mit Javascript via des "history(back)"-Befehls (oder so ähnlich).

Meine php-Datei:
Code:
		<?php
			if($_POST['von']!="" and $_POST['mail']!="" and $_POST['betreff']!="" and $_POST['nachricht']!="") {
			$empf = "pierre.pxvision@gmail.com";
			$betreff = $_POST['betreff'];
			$from = "From: ";
			$from .= $_POST['von'];
			$from .= " <";
			$from .= $_POST['mail'];
			$from .= ">\n";
			$from .= "Reply-To: ";
			$from .= $_POST['mail'];
			$from .= "\n";
			$from .= "Content-Type: text/html\n";
			$text = $_POST['nachricht'];
			
			mail($empf, $betreff, $text, $from);
			echo "Vielen Dank";
			} else {
			echo "Bitte alle Felder ausfüllen....";
			}
<meta http-equiv="refresh" content="2;url=javascript:history.go(-1)">
		?>

Viele Dank im Voraus, Pierre
 
PHP ist ein Präprozessor. Es läuft auf dem Server und kann Daten, bevor sie per HTTP an den Client geschickt werden, modifizieren (in den meisten Fällen HTML, aber auch Bilder, CSS, JavaScript, ganz egal). Popups entstehen auf dem Client (Browser), also brauchst du hierfür auch clientseitige Programmierung, am Besten JavaScript.

Ich persönlich mag ja Javascript-Frameworks. Schau dir zum Beispiel mal jQuery an. Dein Problem könnte man aus einer Kombination von jQuery + jQueryUI Dialog + AJAX lösen:
- Wenn man das Formular ausgefüllt hat und auf Senden klickt, schickst du per JavaScript einen AJAX-Request an ein PHP-Skript
- Das PHP-Skript versendet wie bisher die Mail und liefert einen Statuscode (z. B. im JSON-Format) zurück
- Wenn der Statuscode erfolgreich ist, öffnest du ein jQueryUI-Dialogfenster
- Wenn der Statuscode ein Fehler ist, zeigst du Fehlermeldungen an
 
Naja, das müsstest du halt lernen. jQuery hat ordentliche Dokumentation.

Das hier brauchst du:
- "Wenn man das Formular ausgefüllt hat und auf senden klickt ...": Einen Submit-Handler, der aufgerufen wird, wenn man das Formular abschicken will, Dokumentation hier: .submit() | jQuery API Documentation - daran denken die Standardaktion mit event.preventDefault(); zu deaktivieren (sonst wird das Formular trotzdem regulär per abgeschickt)

- "...schickst du per JavaScript einen AJAX-Request an ein PHP-Skript": jQuery.get() | jQuery API Documentation - ggf. nochmal einlesen, was AJAX ist und wie das funktioniert (Wikipedia)

- "Das PHP-Skript versendet wie bisher deine Mail...": Das haste je bereits oben stehen

- "...und liefert einen Statuscode (z. B. im JSON-Format) zurück": Wie das funktioniert steht im PHP-Handbuch: PHP: json_encode - Manual ggf. nach JSON googlen (oder Wikipedia) - falls dich das zu sehr verwirrt: Du musst es nicht so machen sondern kannst alternativ auch reinen Text ausgeben z. B. via die('error'); bzw. die('success'); und diesen Text per Javascript auswerten

- "Wenn der Statuscode erfolgreich ist..." - normaler Javascript if(response=='success') ...

- "...öffnest du ein jQueryUI-Dialogfenster" - die Dokumentation dazu gibts hier: Dialog | jQuery UI
 
dankeschön für die ausführliche Erklärung und nicht nur das posten eines Codes. So lerne ich wenigstens wie es funktioniert.
Vielen dank. :)
 
is jQuery nich viel zu viel für nen simples alert("text"); dingen? :ugly: als text kann man dann ja die erfolgs- bzw fehlermeldung nehmen. wozu immer gleich riesen kram einbinden für pille palle furtz?
 
Man kann das natürlich auch ohne jQuery lösen, die Grundprinzipien sind erstmal die selben.
alert('text'); ist allerdings nicht so "schön", wie jQueryUI. :-D

Meiner Erfahrung nach gibt es NIE einfach nur "ein kleines Kontaktformular" oder sowas, sondern diese Dinge entwickeln sich später weiter und dann brauch man sowieso komplexere Lösungen. Wenn natürlich Performance der entscheidende Faktor dieser Anwendung sein sollte (was ich nicht glaube), sollte man auf ein Javascript-Framework eher verzichten...
 
Vielleicht habe ich missverstanden, was du erreichen willst. Meine Idee würde beim Anklicken des Formularfelds die Seite nicht verlassen, aber die Formulardaten an ein PHP-Skript senden, das die Mail verschickt. Je nachdem ob das geklappt hat oder nicht, würde ein entsprechendes Popup erscheinen.

Der letzte Link (jQuery UI Dialog) ist im Prinzip nur eine "optische" Sache, ich find die Popups in dieser Art halt hübsch. Aber das kann man natürlich auch ohne machen.

Programmier es einfach mal so wie du möchtest und stell dann den Code oder einen Link hier rein. :-)

Edit: Ach ja, falls das bisher noch nicht klar war, folgendes ist bei .submit() wichtig:
when the user is attempting to submit a form
Das wird ausgelöst, bevor das Formular abgeschickt wird.
 
falls dir die lösung mit dem "nach 15 secs gehts zurück zur ursprungsseite" genügt, müsstest du glaube ich bei deinem php teil, das durch das absenden des formulars aufgerufen wird, im body-tag den onload eventhändler mit ner js funke füttern. also <body onload="javascript:myCoolFunction();"> oder wie das ging, weis ich grad nich ausm kopf ^^ aber wenn man da nach javascript auto redirect oder sowas googlet, findet man da sicher auch genug ^^

wäre nich die schönste lösung, aber wohl die einfachste *glaub*
 
Warum denn kein neuer Seitenaufruf? Du kannst doch die Seite sich selber aufrufen lassen.

Mit einer If Anweisung überprüfst du dann einfach Ob der Text ausgegeben werden soll oder das Formular. Wenn du ein Popup haben willst kannst du das ganze halt über JS machen.


Also: die Datei heißt Datei.php

PHP:
<?php

Hier steht der Code für das Formular (Formular action="Datei.php")

if(isset($_POST['submit']))
{
Hier steht der Code zum E-Mail versenden.

Hier steht das Javascript für das Popup
}

?>


P.S. BenRo hast du nicht zu PHP und MYSQL zu mir gesagt mit Kannonen auf Spatzen schießen :D Das ist JQuery aber hier auch ;)
 
Zuletzt bearbeitet:
ich hätt es ja eher andersrum gemacht :P erst auf eingaben prüfen, DANN das formular ausgeben ^^ aber die frage hab ich mir ehrlich gesagt auch schon gestellt ><
 
Ich habe das so verstanden das das Formular eh immer angezeigt werden soll. Bei einem Alert würde die Rheinfolge daher eigentlich keine Rolle spielen. Ich habe das Formular allerdings auch meistens am Ende x-D. Da habe ich jetzt nicht wirklich drauf geachtet gehabt. Mir ging es nur um das Grundprinzip.

Übrigens habe Ich BenRo unrecht getan. Das mit Kanonen auf Spatzen war doch jemand anderes :P ich habe also nichts gesagt.
 
Ihr habt wohl Recht. Ich hatte Betagurke so verstanden, dass keine andere Seite aufgerufen werden soll, um das Popup zu zeigen.
 
Zurück