kostenloser Webspace werbefrei: lima-city


Textausgabe nach Postrequest via AJAX

lima-cityForumDie eigene HomepageHTML, CSS & Javascript

  1. Autor dieses Themas

    technofan

    Moderator Kostenloser Webspace von technofan

    technofan hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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
  4. c****s

    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
  5. 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
    }
    ?>
  6. 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...
  7. c****s

    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
    req = new Request ();
    req.send (SYNCHRON);
    alert (req.ergebnis);
    doSomethingCrazy ();
    alert ("fertig");
    gibt zuerst das Ergebnis aus und dann "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
  8. Autor dieses Themas

    technofan

    Moderator Kostenloser Webspace von technofan

    technofan hat kostenlosen Webspace.

    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 ^^
  9. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!