PHP-Funktion auslösen bevor man die Seite verlässt?
Ich probiere grade aus, meine eigenen „Google Analystics“ zu machen, da das Originale zu teuer ist. Egal, kommen wir zurück zum Thema. Wie füge ich Daten zu einer MySQL-Datenbank hinzu, genau dann, wenn der User die Seite verlässt. Ich habe es bereits mit diesem JavaScript versucht:
How do i run PHP-Functions before the page unloads bwz. close? I tried `beforunload` but it never really worked. I want to insert a record for analystics into php database. Here is the JavaScript:
```
const beforeUnloadListener = (event) => {
document.write(' <?php
$sql2 = "DELETE FROM `SwiftSpion` WHERE ip = `$ip`";
$result2 = $conn->query($sql2);
?> ');
}
window.addEventListener("beforeunload", beforeUnloadListener);
const pageHideListener = (event) => {
document.write(' <?php
$sql2 = "DELETE FROM `SwiftSpion` WHERE ip = `$ip`";
$result2 = $conn->query($sql2);
?> ');
}
document.onvisibilitychange = function() {
if (document.visibilityState === 'hidden') {
document.write(' <?php
$sql2 = "DELETE FROM `SwiftSpion` WHERE ip = `$ip`";
$result2 = $conn->query($sql2);
?> ');
}
};
window.addEventListener("pagehide", pageHideListener);
```
I expect, that the MySQL-Command works when the user leaves the site.
4 Antworten
Du kannst mit document.write() keinen PHP Code schreiben. PHP wird auf dem Server ausgeführt, nicht beim Client im Browser. PHP wird daher nur beim Seitenaufruf ausgeführt.
Um mit JavaScript PHP-Code auszuführen, musst du schon eine Anfrage an den Webserver schicken, beispielsweise mit AJAX oder Fetch. Sprich, du hast irgendwo auf dem Webserver eine PHP-Datei liegen, die bspw. per POST- oder GET-Parameter bestimmte Werte entgegennimmt, und diese PHP-Datei rufst du dann mittels AJAX oder Fetch in JavaScript auf.
Ich weiß allerdings nicht, ob das schnell genug passiert, damit das während dem document.unload Event klappt. Verlassen würde ich mich darauf nicht. MDN sagt übrigens auch, dass man das unload-Event nicht nutzen sollte, da es eben nicht verlässlich ist, insb. auf Mobilgeräten: https://developer.mozilla.org/en-US/docs/Web/API/Window/unload_event#usage_notes
Wenn schon sollte man nur auf das "visibilitychange" Event zurückgreifen.
Ich kenne mich da wenig aus, aber wie wäre es mit einem Listener, der schaut, ob der User noch da ist, und wenn er nicht mehr da ist wird eine Funktion aufgerufen
Ich würde das ganz anders machen. Wenn der Client das unload Event auslöst, kannst du einen Ajax Request an ein PHP Script senden, welches die notwendigen Daten in die Datenbank schreibt.
Wie füge ich Daten zu einer MySQL-Datenbank hinzu, genau dann, wenn der User die Seite verlässt
Gar nicht. Da http ein zustandsloses Protokoll ist, gibt es kein „Verlassen der Seite“.
Alex
Aber Google Analystics schafft es doch auch? Oder Tidio