Supportnet / Forum / Skripte(PHP,ASP,Perl...)
Javascript mit PHP verbinden
Frage
Hallo allerseits,
ich wollte mal fragen, ob man Javascript mit PHP verbinden kann?
Ich habe nämlich eine Variable in Javascript mit dem Namen "wer". Nun möchte ich aber mit PHP weiterarbeiten. Wie bekomme ich diese Variable in PHP rein? Also ich meine irgendwie so:
$wer = <script>wer</script>
Aber das ist natürlich völlig falsch.
Kann mir jemand helfen?
Gruß,
Üsch
Antwort 1 von Supermax
JavaScript wird am Client (Browser) ausgeführt, PHP am Webserver. Um Daten zwischen diesen beiden zu übertragen, kann man Webformulare (auch unsichtbare, dynamisch mit JavaScript/DOM generierte) verwenden, oder AJAX.
Antwort 2 von Uesch
und wie mache ich so ein unsichtbares Formular?
Antwort 3 von kicia
------------------------
PHP
------------------------
Variablen übernehmen mit $_GET oder $_POST, zB.:
echo $_GET['xyz'];
------------------------
JavaScript:
------------------------
function sendVariable()
{
var xyz = 123;
document.location = "phpProgramm.php?xyz=" + xyz;
}
---- oder Formular senden: ----
function submitFormular()
{
document.forms.meinFormular.submit();
}
------------------------
HTML:
------------------------
<form name="meinFormular" action="phpProgramm.php" method="get">
<input type="text" name="xyz" value="123">
</form>
------------------------
Feld verstecken:
------------------------
<input type="hidden" name="xyz" value="123">
PHP
------------------------
Variablen übernehmen mit $_GET oder $_POST, zB.:
echo $_GET['xyz'];
------------------------
JavaScript:
------------------------
function sendVariable()
{
var xyz = 123;
document.location = "phpProgramm.php?xyz=" + xyz;
}
---- oder Formular senden: ----
function submitFormular()
{
document.forms.meinFormular.submit();
}
------------------------
HTML:
------------------------
<form name="meinFormular" action="phpProgramm.php" method="get">
<input type="text" name="xyz" value="123">
</form>
------------------------
Feld verstecken:
------------------------
<input type="hidden" name="xyz" value="123">
Antwort 4 von Uesch
So ganz kapiere ich es nicht.
Ich erkläre noch mal genau mein Anliegen:
Ich habe eine Index.php, welche verschiedene Wörter anzeigt. Beim Klick auf eines dieser Wörter öffnet sich ein Popup. Dabei habe ich folgendes Script. Es speichert das, was ich vorher geklickt habe in einer Variable "wer":
Die formen.php erhält nun ein Script zum importieren der Variable:
Nun möchte ich, dass weitere Daten zu dem Wort angezeigt werden, was ich vorher in der index.php geklickt habe. Diese Daten stehen in einer MySQL-Datenbank und daher würde ich gerne mit PHP diese Daten anzeigen lassen. Doch leider weiß ich nicht wie ich die Variable wer in das PHP kriegen soll.
Ich dachte daran, ein Hiddenfeld zu benutzen, in dem die Variable "wer" steht.
Irgendwie so dachte ich:
Aber so leicht funzt es leider nicht.
Ich erkläre noch mal genau mein Anliegen:
Ich habe eine Index.php, welche verschiedene Wörter anzeigt. Beim Klick auf eines dieser Wörter öffnet sich ein Popup. Dabei habe ich folgendes Script. Es speichert das, was ich vorher geklickt habe in einer Variable "wer":
<script type="text/javascript">
function pop(ausloeser) {
var wen = ausloeser.firstChild.data;
MeinFenster = window.open("formen.php?"+wen, "Formen", "width=500,height=500,left=100,top=200");
MeinFenster.focus();
}
</script>
Die formen.php erhält nun ein Script zum importieren der Variable:
<script type="text/javascript">
window.onload=function () {
var wer = location.search.substr(1);
}
</script>
Nun möchte ich, dass weitere Daten zu dem Wort angezeigt werden, was ich vorher in der index.php geklickt habe. Diese Daten stehen in einer MySQL-Datenbank und daher würde ich gerne mit PHP diese Daten anzeigen lassen. Doch leider weiß ich nicht wie ich die Variable wer in das PHP kriegen soll.
Ich dachte daran, ein Hiddenfeld zu benutzen, in dem die Variable "wer" steht.
Irgendwie so dachte ich:
<input type="hidden" name="hidden" value="javascript:wer">
Aber so leicht funzt es leider nicht.
Antwort 5 von rendolf
du hast schon alles was du brauchst. mit dem aufruf von "formen.php?"+wen wird die variable wen bereits an php übergeben. abfragen über echo $_GET["wen"];
das javascriptkonstrukt kannst du vollkommen vergessen. das ist bei dieser lösung nicht mehr adäquat, weil es einen anderen zweck erfüllen sollte.
das javascriptkonstrukt kannst du vollkommen vergessen. das ist bei dieser lösung nicht mehr adäquat, weil es einen anderen zweck erfüllen sollte.
Antwort 6 von rendolf
also mit javascriptkonstrukt meine ich das importieren der variable in js innerhalb der formen.php. javascript brauchst du nur noch für das öffnen des popups.
Antwort 7 von rendolf
sorry hab grad geträumt. die sache muss so aussehen:
statt "formen.php?"+wen
--> "formen.php?user="+wen
dann ist der inhalt der variablen in $_GET["user"];
analog zu diesem thread:
https://supportnet.dethreads/1558832
statt "formen.php?"+wen
--> "formen.php?user="+wen
dann ist der inhalt der variablen in $_GET["user"];
analog zu diesem thread:
https://supportnet.dethreads/1558832
Antwort 8 von Uesch
Absolut genial, danke!
Könnte ich eigentlich diesen ersten Part
auch mit PHP machen? Die Fenstergröße wäre mir auch egal. Oder geht das nur mit Javascript?
Könnte ich eigentlich diesen ersten Part
function pop(ausloeser) {
var wen = ausloeser.firstChild.data;
MeinFenster = window.open("formen.php?"+wen, "Formen", "width=500,height=500,left=100,top=200");
MeinFenster.focus();
}
auch mit PHP machen? Die Fenstergröße wäre mir auch egal. Oder geht das nur mit Javascript?
Antwort 9 von rendolf
also das popuppen oder up-poppen eines fensters geht nur mit javascript (sprich nicht mit html).
Antwort 10 von rfb
Zitat:
auch mit PHP machen?
nein, natürlich nicht! PHP läuft auf dem Server (wenn du da irgendwelche Popups zu öffnen versuchst kriegst du höchstens Ärger mit dem Admin), Fenster öffnen läuft aber userseitig, also wenn sämtliche PHP-Scripte längst beendet sind.auch mit PHP machen?
Antwort 11 von Uesch
Ich meinte eigentlich den Part, wo er die "wer"-Variable speichert. Also dass man auf einen Textlink klickt und er den Text des Links in einer Variable speichert. Geht das mit PHP?
Antwort 12 von rendolf
<a href="javascript:pop('Otto');">Otto</a>
<script type="text/javascript">
function pop(user) {
MeinFenster = window.open("formen.php?user="+user, "Formen", "width=500,height=500,left=100,top=200");
MeinFenster.focus();
}
</script>
Antwort 13 von rfb
Zitat:
dass man auf einen Textlink klickt und er den Text des Links in einer Variable speichert. Geht das mit PHP?
Nein! Definitiv nicht, denn in dem Moment wo jemand auf einen Link klickt steht PHP nie zur Verfügung.dass man auf einen Textlink klickt und er den Text des Links in einer Variable speichert. Geht das mit PHP?
Du kannst nur durch diesen Link - entweder direkt per HTML in der Form
<a href="script.php?wer=ich">Linktext</a>
bzw. gleich als Formular oder - wenn's denn JavaScript sein soll - per AJAX eine entsprechende Meldung an den Server geben und dort kann das Script darauf reagieren und alles, was übergeben, wurde nach Belieben spreichern.Antwort 14 von Proggi
man kann mit activescripting ein javascript variablen an ein php-script übergeben und auch wieder laden.
Teilweise kannst du ein IFrame machen (ggfs ein unsichtbares) in dem du eine PHP-Seite ausführst, die wiederum keinen Text anzeigt sondern als inhalt nur ein Javascript ausgibt..
<script>
top.document.x = "neuesXrückgabewert";
top.document.functionsname();
</script>
(im original)
<script>
top.document.x = "<?= $Datenneu ?>";
top.document.functionsname();
</script>
aufgerufen kann die seite dann über das
iframe.php?eingabewert=zuspeichernderwert
so kannst du dynamisch in beide richtungen daten austauschen ohne die eigentliche Seite neu zu laden.
Natürlich funktioniert das nur bei Besuchern die Javascript nicht ausgeschaltet haben.
Es wird aber sehr kompliziert wenn du dann den angezeigten Text noch ändern möchtest. Spätestens da empfehle ich dir das per neuladen der Hauptseite zu realisieren.
Teilweise kannst du ein IFrame machen (ggfs ein unsichtbares) in dem du eine PHP-Seite ausführst, die wiederum keinen Text anzeigt sondern als inhalt nur ein Javascript ausgibt..
<script>
top.document.x = "neuesXrückgabewert";
top.document.functionsname();
</script>
(im original)
<script>
top.document.x = "<?= $Datenneu ?>";
top.document.functionsname();
</script>
aufgerufen kann die seite dann über das
iframe.php?eingabewert=zuspeichernderwert
so kannst du dynamisch in beide richtungen daten austauschen ohne die eigentliche Seite neu zu laden.
Natürlich funktioniert das nur bei Besuchern die Javascript nicht ausgeschaltet haben.
Es wird aber sehr kompliziert wenn du dann den angezeigten Text noch ändern möchtest. Spätestens da empfehle ich dir das per neuladen der Hauptseite zu realisieren.
Antwort 15 von rfb
@Proggi:
derartige IFrame-Methoden sind dank AJAX nun wirklich nicht mehr zeitgemäß. Mit AJAX kannst du jederzeit Daten zum Server schieben und wieder abholen - direkt - solange JavaScript aktiviert ist (und im IE, der einen einfachen httprequest nicht kennt, zusätzlich ActicveScripting).
derartige IFrame-Methoden sind dank AJAX nun wirklich nicht mehr zeitgemäß. Mit AJAX kannst du jederzeit Daten zum Server schieben und wieder abholen - direkt - solange JavaScript aktiviert ist (und im IE, der einen einfachen httprequest nicht kennt, zusätzlich ActicveScripting).
Antwort 16 von Proggi
soweit Javascript aktiv ist würde ich aber etwas selbstgeschriebenes schon bevorzugen, da bei Wiki bez Ajax steht, dass "Umfangreiche Tests erforderlich" sind. Zumal auch bei Ajax u.U. wieder auf Javascript zurückgegriffen wird.
@Üsch - Ich rate dir erstmal ab unnötig viel Javascript zu verwenden, und es ist auch eventuell angenehmer wenn Besucher die Seiten normal aufrufen können und so auch den vorwärts/zurückbutten benutzen können, was bei IFrame und Ajaxmethode eventuell nicht korrekt möglich ist.
Damit du Vor/Zurück verwenden kannst, solltest übrigens bei der SQL-Frage die geschichte von $_POST nach $_GET ändern und ein GET-Formular verwenden. Wenn deine Seite nicht zig KB quelltext enthält kannst sowieso besser die Seite neu abschicken um Daten zum Server zu schieben.
@Üsch - Ich rate dir erstmal ab unnötig viel Javascript zu verwenden, und es ist auch eventuell angenehmer wenn Besucher die Seiten normal aufrufen können und so auch den vorwärts/zurückbutten benutzen können, was bei IFrame und Ajaxmethode eventuell nicht korrekt möglich ist.
Damit du Vor/Zurück verwenden kannst, solltest übrigens bei der SQL-Frage die geschichte von $_POST nach $_GET ändern und ein GET-Formular verwenden. Wenn deine Seite nicht zig KB quelltext enthält kannst sowieso besser die Seite neu abschicken um Daten zum Server zu schieben.
Antwort 17 von Proggi
nachtrag
Ajax ist vermutlich ne gute technik um einen Webbasierten Chat wie den SN-Chat neu zu schreiben... war sogar mal über Activescripting mit Iframes realisiert, mit Ajax hätte die anzahl der Reload-fragen noch deutlich reduziert und dabei noch die aktuallität erhöht werden können, da die seite nicht statisch alle 3-5 sekunden neu geladen würde sondern sobald jemand was geschrieben hat.
Ajax ist vermutlich ne gute technik um einen Webbasierten Chat wie den SN-Chat neu zu schreiben... war sogar mal über Activescripting mit Iframes realisiert, mit Ajax hätte die anzahl der Reload-fragen noch deutlich reduziert und dabei noch die aktuallität erhöht werden können, da die seite nicht statisch alle 3-5 sekunden neu geladen würde sondern sobald jemand was geschrieben hat.
Antwort 18 von rendolf
@proggi:
du bist auf dem vollkommen falschen dampfer. entgegen der irreführenden überschrift dieses threads, geht es hier gar nicht um das zusammenspiel von php und js. es geht lediglich um einen popuplink.
du bist auf dem vollkommen falschen dampfer. entgegen der irreführenden überschrift dieses threads, geht es hier gar nicht um das zusammenspiel von php und js. es geht lediglich um einen popuplink.
Antwort 19 von rfb
Zitat:
es geht lediglich um einen popuplink.
sicher? Das ganze Gerede von "eine Variable speichern" klingt nicht danach.es geht lediglich um einen popuplink.
Antwort 20 von Proggi
ich denke rfb und ich sind nicht auf den falschen dampfer...
der popuplink sollte das ja machen, was das anfangsproblem darstellt:
$wer = <script>wer</script>
(B = PHP, U = Java)
das problem ist (wie rfb schon schrieb) nicht so lösbar, da zur Laufzeit des PHP-Codes, das Script nicht ausgeführt wird.
der popuplink sollte das ja machen, was das anfangsproblem darstellt:
$wer = <script>wer</script>
(B = PHP, U = Java)
das problem ist (wie rfb schon schrieb) nicht so lösbar, da zur Laufzeit des PHP-Codes, das Script nicht ausgeführt wird.
Antwort 21 von rendolf
@proggi
kennst du den vorgängerthread zu diesem problem? ich bilde mir ein, dass er sehr hilfreich ist, um zu verstehen, was üsch bezweckt.
https://supportnet.dethreads/1558284
kennst du den vorgängerthread zu diesem problem? ich bilde mir ein, dass er sehr hilfreich ist, um zu verstehen, was üsch bezweckt.
https://supportnet.dethreads/1558284
Antwort 22 von MixMax
es bringt auch nichts mal unter rendolf und mal unter detlef zu schreiben und andere user anzumachen die hätten nicht verstanden worums geht. Wenn du meinst du hast es verstanden, dann schreib doch mal ne eigene Lösung.
Antwort 23 von rendolf
ich habe niemanden angemacht. dafür, dass proggi meiner meinung nach auf dem falschen dampfer war, habe ich die zitat: "irrefühende" überschrift und seine wahrscheinliche unkenntnis des ersten threads angeführt. beides dinge, für die er nichts kann.
meine lösungen stehen in antwort 7 und 12. um sie zu sehen, musst du nach vorne blättern.
dein problem mit meinen nicks verstehe ich nicht. kannst du vielleicht näher ausführen?
Zitat:
Wenn du meinst du hast es verstanden, dann schreib doch mal ne eigene Lösung.
Wenn du meinst du hast es verstanden, dann schreib doch mal ne eigene Lösung.
meine lösungen stehen in antwort 7 und 12. um sie zu sehen, musst du nach vorne blättern.
dein problem mit meinen nicks verstehe ich nicht. kannst du vielleicht näher ausführen?
Antwort 24 von MixMax
hatte deine antwort übersehen im text - sorry
es steht dir frei unter jedem beliebigen namen zu schreiben, da ich nur deine letzen beiden Posts gesehen habe sah es nur etwas merkwürdig aus. Kann dich ja leider nicht anschreiben.
es steht dir frei unter jedem beliebigen namen zu schreiben, da ich nur deine letzen beiden Posts gesehen habe sah es nur etwas merkwürdig aus. Kann dich ja leider nicht anschreiben.
Antwort 25 von MixMax
p.s. ich vermute das Problem ist schon seit antwort 7 gelöst da Üschi auch nichts mehr schreibt... außer ne kleine rückfrage..
Antwort 26 von rendolf
ich muss sagen, dass ich grade ziemlichen blutdruck hatte, weswegen ich mir auch den seitenhieb mit dem blättern nicht verkneifen konnte. eigentlich wollte ich noch was ganz andres schreiben. ;-)
ich finds gross, dass du dich entschuldigst, ehrlich!
mag dir vielleicht lapidar vorkommen, aber ich hab auch schon (nicht hier im sn) mit admins zu tun gehabt, die das ums verrecken nicht gebracht haben.
ich weiss nicht, obs andren auch so geht, aber im disput mit superusern fühle ich mich immer schnell ohnmächtig und an die wand gedrängt. naja, jetz is ja wieder alles gut. ;-)
ich finds gross, dass du dich entschuldigst, ehrlich!
mag dir vielleicht lapidar vorkommen, aber ich hab auch schon (nicht hier im sn) mit admins zu tun gehabt, die das ums verrecken nicht gebracht haben.
ich weiss nicht, obs andren auch so geht, aber im disput mit superusern fühle ich mich immer schnell ohnmächtig und an die wand gedrängt. naja, jetz is ja wieder alles gut. ;-)
Antwort 27 von Uesch
Danke Jungs,
habs jetzt verstanden!
Gruß,
Üschi
habs jetzt verstanden!
Gruß,
Üschi