In php seite javascript funktion aufrufen und variablen übergeben
Hallo Leute ich bitte Euch mal wieder um Hilfe.
Ich möchte auf einer Seite die Klicks auf Bildern zählen in dem ich jeden klick in eine mySQL DB schreibe.
Vereinfachter Quelltext
Damit wird also die Javascript Funktion aufgerufen und die id des Bildes wird übergehen. Geht auch soweit.
Wie bekomme ich die Übergebene id in den Link?
Ich denke mal das ich das mit mehren Strings machen, aber wie.
oder irrend wie so.
Hätte ja eigentlich gedacht, das man mit Javascript eine PHP Funktion aufrufen könnte, wenn ich das aber richtig gelesen habe ist das nicht möglich. Richtig?
Lass mich mal überraschen.
Liebe Grüße
Petra
Ich möchte auf einer Seite die Klicks auf Bildern zählen in dem ich jeden klick in eine mySQL DB schreibe.
Vereinfachter Quelltext
$onMouseDown = 'ONMOUSEDOWN=\'hit("'.$row['id'].'")\'';
echo '<img border="0" src="'.$row['url'].'" '.$onMouseDown.'>';
Damit wird also die Javascript Funktion aufgerufen und die id des Bildes wird übergehen. Geht auch soweit.
Wie bekomme ich die Übergebene id in den Link?
<script type="text/javascript" language="javascript">
function hit(id)
{
window.location.href="javatest.php?bildID=id";
}
</script>
var teil1 = String(window.location.href="javatest.php?bildID=);
var teil2 = id;
Hätte ja eigentlich gedacht, das man mit Javascript eine PHP Funktion aufrufen könnte, wenn ich das aber richtig gelesen habe ist das nicht möglich. Richtig?
Lass mich mal überraschen.
Liebe Grüße
Petra
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 153174
Url: https://administrator.de/contentid/153174
Ausgedruckt am: 22.11.2024 um 15:11 Uhr
10 Kommentare
Neuester Kommentar
Hallo Petra
Also..... immer dran denken, PHP ist eine serverseitige Scriptsprache, die PHP-Dateien werden also auf dem Server ausgeführt und nur das was von PHP ausgegeben wird (meistens per "echo") wird an den Client geschickt - also "nur" das HTML/CSS/Javascript. Und diese drei sind wiederum Clientseitig, wissen also absolut gar nichts von PHP oder irgendeinem Server !
Praktisch allerdings ist es dennoch möglich das deine Javascript-Funktion eine Anfrage an den Server schickt, sogenanntes AJAX Mozilla.org - AJAX Getting Started !
So könnte die Javascript-Funktion z.B. "deinserver-de/countImageClick.php?id=x" aufrufen lassen. Dieses Script macht das Datenbankupdate und gibt nur aus ob das Update erfolgreich war oder nicht. Anschließend macht die Funktion was sie sonst noch machen soll.
Darf ich mal fragen in welchem Zusammenhang das steht ?
Ich meine... wer klickt schon einfach so auf Bilder, da muss ja noch irgend ein Sinn dahinter stecken !?
Je nach dem was du da machst: Javascript am besten nur als __extra__ einsetzen. Soll heißen, das eine Website auch bei deaktiviertem Javascript noch funktionieren soll(te). Daher auch die Frage nach dem Sinn, vielleicht gibt es ja einen besseren Weg und vor allem, nicht so aufwendig wie z.B. mit AJAX.
Jetzt sollte die Id in der URI stehen.
...was macht den bzw. was soll "javatest.php" denn sonst noch so machen ? Wenn es nur das Datenbankupdate durchführt, dann landet man ja auf einer leeren Seite - irgendwie blöde
Aber wenn es so ist, könnte man es __ohne__ JS auch so machen:
~Arano
Also..... immer dran denken, PHP ist eine serverseitige Scriptsprache, die PHP-Dateien werden also auf dem Server ausgeführt und nur das was von PHP ausgegeben wird (meistens per "echo") wird an den Client geschickt - also "nur" das HTML/CSS/Javascript. Und diese drei sind wiederum Clientseitig, wissen also absolut gar nichts von PHP oder irgendeinem Server !
Praktisch allerdings ist es dennoch möglich das deine Javascript-Funktion eine Anfrage an den Server schickt, sogenanntes AJAX Mozilla.org - AJAX Getting Started !
So könnte die Javascript-Funktion z.B. "deinserver-de/countImageClick.php?id=x" aufrufen lassen. Dieses Script macht das Datenbankupdate und gibt nur aus ob das Update erfolgreich war oder nicht. Anschließend macht die Funktion was sie sonst noch machen soll.
Darf ich mal fragen in welchem Zusammenhang das steht ?
Ich meine... wer klickt schon einfach so auf Bilder, da muss ja noch irgend ein Sinn dahinter stecken !?
Je nach dem was du da machst: Javascript am besten nur als __extra__ einsetzen. Soll heißen, das eine Website auch bei deaktiviertem Javascript noch funktionieren soll(te). Daher auch die Frage nach dem Sinn, vielleicht gibt es ja einen besseren Weg und vor allem, nicht so aufwendig wie z.B. mit AJAX.
window.location.href="javatest.php?bildID=" + id;
...was macht den bzw. was soll "javatest.php" denn sonst noch so machen ? Wenn es nur das Datenbankupdate durchführt, dann landet man ja auf einer leeren Seite - irgendwie blöde
Aber wenn es so ist, könnte man es __ohne__ JS auch so machen:
echo '<a href="javatest.php?bildID='.$row['id'].'" title="beschreibung des ziels"><img border="0" src="'.$row['url'].'" alt="beschreibung des bildes"></a>';
~Arano
Aber wenn es so ist, könnte man es __ohne__ JS auch so machen:
echo '<a
> href="javatest.php?bildID='.$row['id'].'" title="beschreibung des ziels"><img
> border="0" src="'.$row['url'].'" alt="beschreibung des
> bildes"></a>';
Dann sollte in der javatest.php auch eine weiterleitung zum eigentlichen Bild sein. Sonst bekommt man nur eine weiße Seite.
header( 'Location: '.$row['url'] );
die();
Davor sollte natürlich dein SQL Update kommen.
Moin moin
genau darauf wollte ich wollte ich hinaus aber das trifft so ja nur zu __wenn__ das das Bild auch angezeigt werden soll, was wiederum der Grund ist der mich nach dem Sinn und Zweck hat fragen lassen !
~Arano
genau darauf wollte ich wollte ich hinaus aber das trifft so ja nur zu __wenn__ das das Bild auch angezeigt werden soll, was wiederum der Grund ist der mich nach dem Sinn und Zweck hat fragen lassen !
~Arano
Zitat von PHP-Manual: header()
HTTP/1.1 requires an absolute URI as argument to » Location: including the scheme, hostname and absolute path
HTTP/1.1 requires an absolute URI as argument to » Location: including the scheme, hostname and absolute path
Moin Patra
Okay, dann ist das von EvilMoe und mir vermutete eh hinfällig ...und das bezüglich Javascript als extra von mir auch *g*
Das würde ich auch per JS lösen und zwar so:
Weil es ein Formular ist, welches eh an den Server gesendet wird, würde ich ein zusätzliches verstecktes Feld anlegen über das die Anzahl der verwendeten Smileys zusätzlich mitgeschickt werden. So kannst du dan in dem PHP-Script das die Formulardaten verarbeitet auch die Auswertung des Smiley-Rankings integrieren.
Entweder schreibt deine hit()-Funktion jedes Smiley in das versteckte Feld oder
die Funktion zählt in einem Array die Häufigkeit der Verwendung mit
Also bei jedem Klick auf ein Smiley wir dessen Zähler in dem Array "arrSmileyUsed" um eins erhöht.
Beim Absenden des Formulars wird das Array "arrSmileyUsed" in eine Zeichenkette gewandelt (JSON-Format) und in das versteckte Feld geschrieben wodurch es dann an den Server übertragen wird und dort weiterverarbeitet werden kann.
Ja, so würde ich das tun.
Ein schönes Wochenende
~Tobias
//Edit: Vielleicht sollte man das versteckte Feld mit "noJS" vor belegen, so das im PHP-Script die Auswertung nur durchgeführt wird, wenn die diese auch gezählt wurden (was ja nur bei aktiviertem JS der Fall ist). Das ermöglicht dann im PHP-Script die unterscheidung ob "arrSmileyStat" ein Array ist und die Auswertung durchgeführt werden muss oder ob es eine Zeichenkette="noJS" ist und nichts gemacht wird.
Okay, dann ist das von EvilMoe und mir vermutete eh hinfällig ...und das bezüglich Javascript als extra von mir auch *g*
Das würde ich auch per JS lösen und zwar so:
Weil es ein Formular ist, welches eh an den Server gesendet wird, würde ich ein zusätzliches verstecktes Feld anlegen über das die Anzahl der verwendeten Smileys zusätzlich mitgeschickt werden. So kannst du dan in dem PHP-Script das die Formulardaten verarbeitet auch die Auswertung des Smiley-Rankings integrieren.
Entweder schreibt deine hit()-Funktion jedes Smiley in das versteckte Feld oder
die Funktion zählt in einem Array die Häufigkeit der Verwendung mit
<script type="text/javascript">
var arrSmileyUsed = new Array(
'lol' => 0,
'mad' => 0,
'devil' => 0,
'wink' => 0,
'cry' => 0
);
function hit(SMILEY)
{
arrSmileyUsed[SMILEY] += 1;
}
function transmitSileyUsedCounter(inpFIELD)
{
// arrSmileyUsed sollte noch in eine JSON Zeichenkette gewandelt werden,
// dann kann man sie in PHP wieder zu einem verwendatem Array zurückwandeln
document.getElementById(inpFEILD).value = arrSmileyUsed;
return true;
}
<form onsubmit="transmitSileyUsedCounter('inpHiddenSmileyUsedArray')">
<img src="" alt="" title="" onclick="hit('lol')">
<img src="" alt="" title="" onclick="hit('mad')">
<img src="" alt="" title="" onclick="hit('devil')">
<img src="" alt="" title="" onclick="hit('cry')">
<input type="hidden" name="arrSmileyStat" value="" id="inpHiddenSmileyUsedArray">
</form>
</script>
Beim Absenden des Formulars wird das Array "arrSmileyUsed" in eine Zeichenkette gewandelt (JSON-Format) und in das versteckte Feld geschrieben wodurch es dann an den Server übertragen wird und dort weiterverarbeitet werden kann.
Ja, so würde ich das tun.
Ein schönes Wochenende
~Tobias
//Edit: Vielleicht sollte man das versteckte Feld mit "noJS" vor belegen, so das im PHP-Script die Auswertung nur durchgeführt wird, wenn die diese auch gezählt wurden (was ja nur bei aktiviertem JS der Fall ist). Das ermöglicht dann im PHP-Script die unterscheidung ob "arrSmileyStat" ein Array ist und die Auswertung durchgeführt werden muss oder ob es eine Zeichenkette="noJS" ist und nichts gemacht wird.
Bilder/Smileys die per drag and drop, in z. B.: Emailtexten rein gezogen werden
... wenn ein HTML Element nur 'angepackt' und weggezogen wird - sollte dann eher das 'onMouseDown' Ereignis benutzt werden.Ich würde auf ein Art Log Objekt setzen, welches 'MouseDown's auf allen IMG Tags speichert und beim schließen der Webseite per Ajax an deinen Server schickt.
aLog = new Array();
var aNodes = document.getElementsByTagName('img');
for (var iI=0; iI<aNodes.length; iI++) {
// ggf. noch auf id oder class prüfen und filtern
aNodes[iI].onMouseDown = function(e) {
aLog.push( e.target.src ); // oder eine andere eindeutige Eigenschaft
}
}
window.onunload = function() {
//hier per AJAX die Daten aLog senden
}