Html formular -> ajax -> php script

  • Also wie der Titel schon sagt möchte ich ein Formular per ajax an ein php Script schicken.
    Dazu habe ich folgendes Formular erstellt:

    Das php Programm zur Auswertung sieht folgender maßen aus:

    Und zu guter letzt der Javascript code bei dem ich nicht weiter komme:

    Ok das waren die vorhandenen Elemente.
    Leider bin ich gerade erst in Javascript und Ajax eingestiegen und komme nicht so recht weiter, denn der vorhandene Code führt nicht zum gewünschten Ergebnis.
    Ich hoffe mir kann jemand bei der Lösung behilflich sein.

    Mfg
    haillo

  • Ein Form braucht auch noch die attribute method, in deinem fall method="post" und action. Das kommt alles in den startenden Form-Tag.
    Ansonten hast du beim letzten input ganz hinten noch Anführungszeichen vergessen.

    Soviel erstmal von meiner Seit.

  • Was mir als erstes auffällt:
    Du prüfst, ob das Formular per POST gesendet wurde (auch wenn ich Sinn und Zweck der ersten Zeilen deines php-Scripts nicht verstehe. $gesendet wird initialisiert und dann wired geprüft, ob sie gesetzt ist? das führt doch zu nix ;)).
    Zudem willst du all deine Variablen per POST empfangen.
    ABER: Du verschickst mit Javascript einen GET-Request. Somit kann dein Script auch die Daten nicht verarbeiten.

    Änder mal diese Zeile

    Code
    xmlhttp.open("GET",url,true);

    so

    Code
    xmlhttp.open("POST",url,true);

    um.

    Dann können wir nach anderen Fehlern suchen :)

    Grüße,
    jojo

    thilda: er will das Formular per AJAX verarbeiten, von daher braucht es nicht unbedingt ein vollständiges form-Tag


  • Also ersteinmal vielen Dank für die schnellen Antworten.
    Aller Anfang ist schwer!
    So nun hier die verbesserten Quellcode:

    php:

    js:

    Ich hoffe es kann mir jemand bei der weiteren fehler Suche helfen, denn der gewünschte Effekt wir immer noch nicht erziehlt!

    MfG
    haillo

  • Was mir als erstes auffällt:
    Du prüfst, ob das Formular per POST gesendet wurde (auch wenn ich Sinn und Zweck der ersten Zeilen deines php-Scripts nicht verstehe. $gesendet wird initialisiert und dann wired geprüft, ob sie gesetzt ist? das führt doch zu nix ;)).
    [...]

    Code
    if(isset($_POST['was'])) {
    $was = $_POST['was'];
    //do
    }

    oder

    Code
    $was = $_POST['was'];
    if(isset($was)) {
    //do
    }

    Funktioniert bei mir bisher beides genau so - wenn ich mal tippfaul bin und nur etwas ausprobieren will mach ich das auch so...

    Hat auch meiner Meinung nach den Vorteil, dass man am Anfang eines scripts in einem Block schön übersichtlich alle Variablen stehen hat die auch übergeben werden.

  • Es wäre hilfreich wenn du ein wenig genauer erklärst worum es geht, eine Dokumentation in deinem Script gibts leider praktisch keine.

    Was mir auffällt ist, dass das javascript momentan gar nicht benutzt wird.

    Zitat


    onchange (bei erfolgter Änderung) Für den Fall, dass ein Element einen geänderten Wert erhalten hat.


    http://de.selfhtml.org/javascript/sprache/eventhandler.htm

    value ändert sich bei dem Submit button aber nicht. Da müsste ein onclick() hin - wobei ich mir da nicht sicher wäre ob es sich mit dem submit dann nicht beist (was man allerdings leicht lösen könnte, da js eine funktion submit() hat).

    Erklär mal was du damit erreichen willst, warum muss es Ajax sein - um ein formular an php zu schicken brauchst du es aufjedenfall nicht...

  • Ok ich hab es verstanden. Ihr bekommt mehr Informationen.
    Also ich habe ein Lauftagebuch geschrieben.
    Für jeden Tag gibt es ein Feld, wenn für einen Tag ein Eintrag vorhanden ist, wird dieser angezeigt, wenn kein Eintrag vorgenmmen wurde wird ein Link angezeigt, welcher eine Lightbox ( http://www.ibegin.com/labs/ibox/readme.php (document)) öffnet. In dieser soll dann der "problem" Code angezeigt werden. Wenn der Eintrag vor genommen wurde, habe ich mir gedacht das eine Erfolgsmeldung erscheint, die Ibox geschlossen wird und die Daten für den besagten Tag erneuert werden.

    Jetzt kennt Ihr meine Absichten.

    PS: Soll ich den gesamten Code liefern?

  • Dann sag ich dir, dass du dafür kein AJAX/JS brauchst - php reicht dir da vollkommen. Der einzige grund in so einer situation was mit javascript zu machen (und in meinen augen ist es eigtl immer so) eine änderung ohne neuladen der seite anzuzeigen...

    Soweit ich das jetzt verstanden hab:

    wir haben ein Feld.
    in dem Feld ist ein Eintrag, bei fehlenden Eintrag ein link (bzw. ein button) der ein javascript aufruft der eine box anzeigt.

    In dem Fall, dass ein Eintrag nicht da ist, soll es möglich sein den Eintrag zu machen (in der box die das js erzeugt).

    Sobald man den Eintrag nun ausgefüllt und abgeschickt hat soll man eine Meldung bekommen das alles gut geklappt hat und der Eintrag denk ich mal dann jetzt mit der neuen Liste angezeigt werden?

    Wenn ich das jetzt richtig sehe:

    ein <form> für die ganze liste machen mit action="deinphpfile.php" method="post" .

    Ich denke mal jeder Eintrag hat dann eine ID oder zumindest irgendetwas anderes womit man es identizifieren kann (datum, name was auch immer).

    Wenn das gegeben ist, könnte man es so lösen:

    [eintrag]
    [eintrag]
    [eintrag - fehlt - click mich] -->
    /*öffnet eine box mit textarea's / input's + submitbutton / button der onclick="submit()" als eigenschaft hat, fals denn nochmal ein js aufgerufen werden muss aus welchen gründen auch immer.*/

    Soweit so gut...

    Da du mehrere Einträge hast, und vllt auch mehrere fehlen wird das ganze nun ein wenig lustiger.

    Die Namen der ganzen inputfelder und des buttons und bla fasel müssen nämlich eindeutig indentifizierbar sein. D.h.

    z.B. feldname_id

    Sprich: sobald du die ganzen daten an dein php script übergibst, musst du auch noch rausfinden welcher Eintrag überhaupt eingetragen wurde.
    Kannst es mit einer schleife machen

    Damit hättest du dann alle daten die du brauchst, kannst sie dann in ne DB oder sonstwo eintragen lassen (auch mit php).


    Hoffentlich stimmt das auch alles so, habs nämlich nicht ausprobiert und es ist doch recht spät jetzt ^^"

    Ist auch natürlich noch lange nicht fertig, es ist nur das konzept dahinter, den rest darfst du machen :razz:

    5 Mal editiert, zuletzt von Grevas (29. Juli 2009 um 00:48) aus folgendem Grund: diese vertippser...

  • So meine Antwort hat etwas auf sich warte lassen weil ich meine 4 Weisheitszähne entfernt bekommen habe und etwas Schmerzen hatte.

    So jetzt aber zum Thema:

    Zitat

    Der einzige grund in so einer situation was mit javascript zu machen /.../ eine änderung ohne neuladen der seite anzuzeigen...


    Deshalb möchte ich es ja mit ajax machen denn wenn ich es so angehen würde wie du oben vorgeschlagen hast dann lande ich ja, so bald ich das Formular abgeschickt habe auf einer anderen Seite und selbst wenn ich Formular und php-Verarbeitung in einem script habe schließt sich die Box einfach.
    So ist es meiner Meinung nach nötig, um mein Ziel zu erreichen Ajax zu verwenden.

    Falls es auch anders geht ich bin auf eure Vorschläge gespannt.
    MfG
    haillo

  • Tut mir leid, aber ich verstehe dien Problem nicht.

    Du bearbeitest eintrag xy, schickst eben das formular dafür weg - und machst dann alles was du willst... Kannst die Inhalte so ausfüllen lassen wie du willst - dabei kannst auch einfach eine Box wieder anzeigen lassen (du kannst das formular auch an die selbe seite verweisen...).

    Nja, vllt weiß jemand anders einen Rat - ich mag JS nicht und kann dir da nicht weiter helfen. Wollt nur gesagt haben das du das ganze auch aufjedenfall mit PHP erreichen kannst.

  • Kannst die Inhalte so ausfüllen lassen wie du willst - dabei kannst auch einfach eine Box wieder anzeigen lassen (du kannst das formular auch an die selbe seite verweisen...).

    Das ist der Springende Punkt der gegen JS spricht.
    PHP-Formular heißt nicht nicht automatisch das eine neue Seite angefahren wird.

  • Moin,

    und test.php:

    PHP
    <?php
    print '<pre>';
    print_r($_GET);
    print '</pre>';
    ?>

    Das PHP Gedönse wirst wohl allein hingriegen. Ich hab erst probiert die Felder über den Namen auszulesen aber irgendwie wollte das nicht >_> bin ja auch kein jQuery Guru oder so.
    Viellleicht hilft dir das weiter. (jQuery Klasse; jQuery Doku)

    p.s. Ich raffe auch nicht wieso du dafür AJAX brauchst

    Gruß crAzywuLf :D