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



## Betagurke (5. August 2014)

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: 

```
<?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


----------



## BenRo (5. August 2014)

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


----------



## Betagurke (5. August 2014)

Okay, vielen Dank für die Informationen. 
Nur wie würde dieses jQuery-/jQueryUiDialog-/-AJAX-Script aussehen?


----------



## BenRo (5. August 2014)

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


----------



## Betagurke (5. August 2014)

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.


----------



## DarkMo (5. August 2014)

is jQuery nich viel zu viel für nen simples alert("text"); dingen?  als text kann man dann ja die erfolgs- bzw fehlermeldung nehmen. wozu immer gleich riesen kram einbinden für pille palle furtz?


----------



## BenRo (5. August 2014)

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. 

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...


----------



## Betagurke (6. August 2014)

Ich bin gerade etwas verwirrt, ich habe mir die Seiten jetzt mal angeschaut, für meine Zwecke reicht diie Funktion auf dieser Seite vollkommen aus: .submit() | jQuery API Documentation
Wozu benötige ich die anderen Links?


----------



## BenRo (6. August 2014)

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.


----------



## DarkMo (6. August 2014)

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*


----------



## TessaKavanagh (6. August 2014)

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

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  Das ist JQuery aber hier auch


----------



## DarkMo (6. August 2014)

ich hätt es ja eher andersrum gemacht  erst auf eingaben prüfen, DANN das formular ausgeben ^^ aber die frage hab ich mir ehrlich gesagt auch schon gestellt ><


----------



## TessaKavanagh (6. August 2014)

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  ich habe also nichts gesagt.


----------



## BenRo (6. August 2014)

Ihr habt wohl Recht. Ich hatte Betagurke so verstanden, dass keine andere Seite aufgerufen werden soll, um das Popup zu zeigen.


----------

