PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [PHP]/[JavaScript] php-funktion mit javascript ins action-form schreiben



ive beaten tetris
24.11.2007, 10:20
folgende lage:

ein php dokument mit einem formular
ein weiteres php dokument mit diversen mysql-funktionen zum includen
ein javascript dokument mit diversen funktionen zum einbinden


in meinem ersten php dokument erstelle ich ein formular welches per submit die inhalte der eingetragenen felder in meine datenbank schreibt. über dem formular wird die php datei mit den funktionen includet und zwei anderen funktionen:

connectToDatabase();
readFromNews();


nun möchte ich mit javascript eine funktion schreiben mit der ich den inhalt meines action-attributs im form-tag ersetzen kann. mehrere varianten hab ich nun schon ausprobiert aber alle bleiben erfolglos da der inhalt nicht weitergegeben wird. lasse ich das js weg und schreibe die php-funktion direkt ins form-tag wird diese funktion jedes mal aufgerufen sobald die seite vom server geladen wurde was keinen sinn machen würde denn gepostet soll nur werden wenn der submit-button gedrückt ist.


<form name="formular" method="post" action="javascript:goToPhpFunction();">


function goToPhpFunction(){
//document.getElementById('formular').action.value = '<?php insertIntoNews(); ?>';

document.form.action = 'blubb.php';
};


function insertIntoNews(){
mysql_query(
"INSERT INTO news (title,content,mood) VALUES (
'".$_POST[title]."',
'".$_POST[content]."',
'".$_POST[mood]."'
)"
);

weiß jemand rat um die javascript-funktion?

dead_orc
24.11.2007, 10:24
Ich versteh zwar beim besten Willen nicht, warum du bei so etwas simplen die PHP Datei nicht gleich in das action-Attribut schreiben kannst, aber du kannst dem form ein onsubmit="this.form.action = 'blubb.php'" verpassen

ive beaten tetris
24.11.2007, 10:38
Ich versteh zwar beim besten Willen nicht, warum du bei so etwas simplen die PHP Datei nicht gleich in das action-Attribut schreiben kannst, aber du kannst dem form ein onsubmit="this.form.action = 'blubb.php'" verpassen

php läuft serverseitig ab. sobald ich festes PHP ins action-attribut schreibe wird es ausgeführt sobald ich die seite neu lade und javascript hingegen läuft in deinem browser ab

deine version hilft mir leider auch nicht weiter

Milchbox
24.11.2007, 12:17
Ich versteh auch nicht so ganz den Sinn, kann mir aber denken was du möchest.
Die einfachste Lösung würde mit Ajax gehen. Wenn du Prototype benutzen möchtest, kannst du die Form-Action mit Ajax machen:

Ajax-Funktion:


function doRequest()
{
new Ajax.Request('blubb.php',{ method: 'post',
postBody:
'title='+document.getElementById('TitleInput').value+'&content='+document.getElementById('ContentInput').value+'&mood='+document.getElementById('MoodInput').value });
}


Form:


<form name="formular" method="post" action="" onsubmit="doRequest(); return false;">


Hier gibt's noch den Api Doc Artikel zur Request-Funktion (http://www.prototypejs.org/api/ajax/request).

Mfg Milchbox

Jesus_666
24.11.2007, 12:55
Das ist völig nutzlos, solange man nicht vorhat, das JavaScript-Framework Prototype einzubinden - und das wäre hier Overkill. Seht euch mal die angehängte Datei an; die verwende ich. (Und man sieht mal wieder schon, daß für den IE Extrawürste nötig sind, wenn auch immerhin nur für IE <= 6.) Ist zwar nicht so extrem robust (falls die Anfrage fehlschlägt tut mein Code einfach gar nichts) aber er erfüllt seinen Zweck.

Hier ein minimales Beispiel, wie die Funktion verwendet wird:


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Bla.</title>
<script type="text/javascript" src="ajax.js"></script>
</head>
<body>
<div id="target">
Hier wird hinterher der Inhalt von <i>andereDatei.html</i> stehen.
Dieser Text wird dann verschwinden.
</div>
<div>
<a href="javascript:fetchData('andereDatei.html', 'target')>Test</a>
</div>
</body>
</html>

Wenn du auf den Link klickst wird der Inhalt von andereDatei.html in das <div> mit der id target geladen. Falls du eine PHP-Datei lädst so wird diese erst von Server ausgewertet (tatsächlich stellt dein Browser eine ganz normale Anfrage nach der Datei und fügt die Antwort des Servers dann in die aktuelle Seite ein).

Du kannst per AJAX allerdings nur ganze Tags mit Inhalt füllen, also sollte das PHP-Skript, das du aufrufen willst, den gesamten Inhalt der zu füllenden Tags (in diesem Fall also effektiv das ganze Formular) zurückgeben.

ive beaten tetris
26.11.2007, 20:51
für ne einfache funktion wie ich sie hab sind die möglichkeiten die sich mir bieten relativ umfangreich und kompliziert zugleich und mit AJAX will ich mich momentan noch gar nich beschäftigen ergo nehm ich die einfachste variante die ich eigentlich vermeiden wollte und überg direkt an ein externes dokument. dennoch danke für die tipps/tricks. ich werd die mir trotzdem mal speichern für den fall der fälle