Textausgabe nach Postrequest via AJAX
lima-city → Forum → Die eigene Homepage → HTML, CSS & Javascript
antwort
betreff
code
datum
email
erfolgreich versand
ergebnis
fertig code
form
formular
http
mode
nachricht
null
ordern
post
text
type
url
warten
-
Hallo Leute
Ich hab ein kleines Problem mit meiner Homepage. Genauer gesagt mit dem Kontaktformular.
Wenn ich das Kontaktformular abschicke, wird die Bearbeitungsroutine wie geplant ausgeführt, allerdings kann ich dann keinen Text ausgeben, der in dieser Routine ist.
Das Formular ist mit einem JavaScript verknüpft, dass dann die erforderlichen Daten via Post an das PHP-Script weiterleitet.
Wie schaffe ich es nun, dass die von mir definierten texte beim Formular wiedergegeben werden?
Hier einmal die Struktur:
contact.php = Das Formular
ajax.js
// globale Instanz von XMLHttpRequest var xmlHttp = false; // XMLHttpRequest-Instanz erstellen // ... für Internet Explorer try { xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { try { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) { xmlHttp = false; } } // ... für Mozilla, Opera und Safari if (!xmlHttp && typeof XMLHttpRequest != 'undefined') { xmlHttp = new XMLHttpRequest(); } // aktuelle Daten laden loadData(); function loadData(ct, secct, id, mode, order) { if (xmlHttp) { xmlHttp.open('GET', 'getdata.php?ct='+ct+'&secct='+secct+'&id='+id+'&mode='+mode+'&order='+order, true); xmlHttp.onreadystatechange = function () { if (xmlHttp.readyState == 4) { document.getElementById("content").innerHTML = xmlHttp.responseText; } }; xmlHttp.send(null); } } //Kontacktformular senden function savecontact() { if (xmlHttp) { xmlHttp.open('POST', 'savecontact.php'); xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xmlHttp.send('name='+document.contact.name.value+'&text='+document.contact.text.value+'&email='+document.contact.email.value+'&betreff='+document.contact.betreff.value+'&code='+document.contact.code.value); alert("Hat so weit geklappt"); } }
savecontact.php
<script type="text/javascript" src="ajax.js" ></script> <?php session_start(); $scode_form = isset($_POST['code']) ? $_POST['code']: null; $scode_ses = isset($_SESSION['scode']) ? $_SESSION['scode']: null; if(!empty($_POST['name'])){ if(!empty($_POST['email'])){ if(!empty($_POST['betreff'])){ if(!empty($_POST['text'])){ if(!empty($_POST['code'])){ if($scode_form == $scode_ses){ //E-Mail versenden $empfaenger = "Baumgaertner1@gmx.net"; $betreff = "GAF - Kontaktformular: ".$_POST['betreff'].""; $from = "From: ".$_POST['name']." <".$_POST['email'].">"; $text = "".$_POST['text'].""; mail($empfaenger, $betreff, $text, $from); //Erfolgreich gesendet $message = '<span class="Stil2">Nachricht wurde erfolgreich versand!</span>'; } else{ //Code falsch } } else{ //Code leer } } else{ //Text leer } } else{ //Betreff leer } } else{ //Email leer } } else{ //Name Leer } ?>
Würde mich wahnsinnig freuen, wenn mir da jemand aushelfen kann.
falls ihr euch das ganze mal live ansehen wollt: http://www.gafonline.de und dann unten auf Kontakt.
PS: vorsich, das is ne DJ-Homepage mit Musik
Gruß
technofan -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
technofan schrieb: Hallo Leute
Ich hab ein kleines Problem mit meiner Homepage. Genauer gesagt mit dem Kontaktformular.
Wenn ich das Kontaktformular abschicke, wird die Bearbeitungsroutine wie geplant ausgeführt, allerdings kann ich dann keinen Text ausgeben, der in dieser Routine ist.
Das Formular ist mit einem JavaScript verknüpft, dass dann die erforderlichen Daten via Post an das PHP-Script weiterleitet.
Wie schaffe ich es nun, dass die von mir definierten texte beim Formular wiedergegeben werden?
wenn ich Dich richtig verstanden habe geht es hier grundsätzlich darum das Du Daten per Ajax sendest und gerne eine "Antwort" hättest (zB. 'Nachricht wurde erfolgreich versand!').
Wenn das so ist, schau Dir mal den Quelltext bei meinen Ajax-anfangs-versuchen an:
http://simuliertes.lima-city.de/ajax/xmlhttprequest.htm
und dazu
http://simuliertes.lima-city.de/ajax/xmlhttprequest.txt
-Beachte das die Daten hier allerdings als GET gesendet werden
-das Du die txt-Datei auch durch eine php-Datei ersetzen könntest ist ja hoffentlich klar (eventuell musst Du php noch den richtigen Header senden lassen, ich erinnere mich nicht mehr so genau ob das notwendig war...)
EDIT:
Nochmal zum Verständnis von Ajax:
1) js sendet Daten
2) js wartet auf eine Antwort
3) php-Seite empfängt und verarbeitet Daten
4) php-Seite Antwortet
5) js empfängt und verarbeitet die Antwort
Ich vermute das bei Dir Schritt nr. 2 fehlt, es also in dieser Reihenfolge (an Bearbeitungsschritten) abläuft:
1) js sendet Daten
5) js empfängt und verarbeitet die Antwort (nämlich keine)
3) php-Seite empfängt und verarbeitet Daten
4) php-Seite Antwortet
Beitrag zuletzt geändert: 31.7.2009 0:24:23 von simuliertes -
Das erste A von AJAX steht für "asynchron", sprich man muss eben nicht warten, bis die Antwort da ist. Dafür wird ja die Callbackroutine aufgerufen, die man übergibt.
Ändere zum einen
xmlHttp.open('POST', 'savecontact.php'); xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xmlHttp.send('name='+document.contact.name.value+'&text='+document.contact.text.value+'&email='+document.contact.email.value+'&betreff='+document.contact.betreff.value+'&code='+document.contact.code.value);
in
xmlHttp.open('POST', 'savecontact.php'); xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xmlHttp.onreadystatechange = function () { if (xmlHttp.readyState == 4) { document.getElementById("DAWOSHINSOLL").innerHTML = xmlHttp.responseText; } }; xmlHttp.send('name='+document.contact.name.value+'&text='+document.contact.text.value+'&email='+document.contact.email.value+'&betreff='+document.contact.betreff.value+'&code='+document.contact.code.value);
Desweiteren wird da natürlich nichts angezeigt, weil dein PHP ja nichts ausgibt. Mach in dein PHP noch ein
echo $message;
rein, dann sollte es auch mit dem Nachbarn klappen.
Beitrag zuletzt geändert: 31.7.2009 0:41:00 von census -
Ich kann zwar kein Ajax, aber PHP und kann dir mit Sicherheit sagen, dass mit der savecontact.php was nicht stimmt. Und zwar willst du eine Session starten, gibst aber vorher schon etwas aus. Der Code müsste so lauten:
<?php session_start(); echo '<script type="text/javascript" src="ajax.js" ></script>'; $scode_form = isset($_POST['code']) ? $_POST['code']: null; $scode_ses = isset($_SESSION['scode']) ? $_SESSION['scode']: null; if(!empty($_POST['name'])){ if(!empty($_POST['email'])){ if(!empty($_POST['betreff'])){ if(!empty($_POST['text'])){ if(!empty($_POST['code'])){ if($scode_form == $scode_ses){ //E-Mail versenden $empfaenger = "Baumgaertner1@gmx.net"; $betreff = "GAF - Kontaktformular: ".$_POST['betreff'].""; $from = "From: ".$_POST['name']." <".$_POST['email'].">"; $text = "".$_POST['text'].""; mail($empfaenger, $betreff, $text, $from); //Erfolgreich gesendet $message = '<span class="Stil2">Nachricht wurde erfolgreich versand!</span>'; } else{ //Code falsch } } else{ //Code leer } } else{ //Text leer } } else{ //Betreff leer } } else{ //Email leer } } else{ //Name Leer } ?>
-
census schrieb:
Das erste A von AJAX steht für "asynchron", sprich man muss eben nicht warten, bis die Antwort da ist. Dafür wird ja die Callbackroutine aufgerufen, die man übergibt.
ähm ist nicht genau der sinn einer call_back_routine auf eine Rückantwort zu warten bzw bei einer Rückantwort (onreadystatechange) zu starten?
Sonst kläre mich gerne auf... -
Eine Callbackroutine wartet auf gar nichts. Sie wird ja bis zu dem Zeitpunkt, wo wirklich was passiert ist, erst gar nicht aufgerufen.
Bei synchronen Aufrufen, blockt das send solange, bis das gesamte Ergebnis vom Request da ist. Sprich folgender Pseudocode
gibt zuerst das Ergebnis aus und dann "fertig".req = new Request (); req.send (SYNCHRON); alert (req.ergebnis); doSomethingCrazy (); alert ("fertig");
Bei asynchronen Aufrufen, kommt das send sofort zurück. Das AJAX-Framework ruft aber bei Erhalt von Daten vom Server die übergebene Callbackroutine auf. Warten tut hier niemand. Folgender Pseudocode gibt entweder zuerst das Ergebnis und dann "fretig" aus oder umgekehrt, je nachdem wielange der Request braucht und wielange soSomethingCrazy () braucht.
function mycallback (arg) { if (arg.status == ALLDONE) alert (arg.ergebnis); } req = new Request (); req.handler = mycallback; req.send (ASYNCHRON); // <-- EDIT: Hatte das "A" vergessen :TIDE alert (req.ergebnis); doSomethingCrazy (); alert ("fertig");
Beitrag zuletzt geändert: 31.7.2009 14:07:21 von census -
Vielen Dank dür die antworten... habs aber mitlerweile schon alleine hinbekommen. ^^
Sehen kann man das an meinem Gästebuch auf meiner Homepage... Daten werden gesendet und tauchen aber seltsamer Weise alle so stückchenweise dann als Eintrag auf... also nicht der gesendete Eintrag auf einmal, sonder halt... Spalte für Spalte... aber des sieht sogar iwie cool aus ^^ -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage