Da mit PHP Cookies sehr einfach ausgelesen werden können, ist das Beschreiben ein Ding der Unmöglichkeit. Man darf sie mit PHP nur ganz als erstes am Seitenstart setzen!
Dazu kommt, dass ausser Cookies, die mit dem HTTP-Request vom Browser mitgegeben werden, keine weiteren Daten aus dem Web-Speicher des Browsers für PHP sichtbar sind.
Somit gibt es eigentlich bloss die Möglichkeit der Übergabe die Daten in einem File auf dem Server zu speichern, oder ganz einfach, wenn sich das JavaScript in einer PHP-Seite befindet, als mit PHP geschriebenen Variablen.
Über einem JS File
Eigentlich nur Ratsam wenn die Seite von einem einzigen User genutzt wird. Ausserdem ist diese Methode aus Datenschutzgründe sehr bedenklich.
Um das erste "Problem" zu umgehen ist es ratsam einen persönlichen Dateiname zu benutzen.
JS "liest" nur eigene Daten ein (Beispiel PHP-Daten.js), sonst kenne ich keinen anderen Weg.
Wenn man aber eine .HTML Seite hat, ist das die einzige mir bekannte Lösung.
Für mich die einfachste Methode und hinterlässt keine Spuren von PHP.
Schau doch in den "Seitenquelltext" da sind alle PHP-Angaben "verschwunden", weil die Seite auf dem Server "zusammengesetzt" wurde.
Wie übergibt JS (bezw. HTML) Daten an PHP?
Da kenne ich mehrere Methoden, die alle ausser der ersten ein HTTP-Request benutzen.
Über die gemeinsame Schnittstelle den Cookies, direkt durch ergänzen der URL, indirekt über ein Formular, oder durch das Absetzen und Empfangen eines HTTP-Requests.
Das letzte ist sicher das Beste, ich beherrsche es aber fast nicht 😒.
Mittels Cookies
Wie schon gesagt, wenn Cookies einzutragen über JS einfach ist, ist es genau so einfach sie mit PHP auszulesen. (dagegen Cookies mit PHP zu schreiben und Cookies mit JS auszulesen nur über Umwege möglich)
<script>
guetzli_setzen("meldungAnPHP:","Hallo, JavaScript grüsst PHP!");
function guetzli_setzen(name,wert)
{// Schreibt ein Cookie mit unbeschränkten Gültigkeit
console.log("guetzli_setzen(",name,wert);
document.cookie = name + "=" + wert + ";SameSite=Lax";
}
</script>
<?php
echo $_COOKIE["meldungAnPHP"];
?>
Somit wird folgendes ausgegeben
Mittels GET
Wie mit Cookies ist auch die GET-Methode einfach zu programmieren, Es wird einfach die URL gefolgt von "?" und die Werte aufgerufen.
Nachteil: Die Informationen werden unverschlüsselt ins Netz gesendet. (PS: das "#GET" am Ende der URL ist nur die Sprungmarke zu diesem Kapitel)
Mit 'location.href'=URL?wert=liste&...usw. wird die Seite mit Parameter erneut aufgerufen und mit PHP ausgelesen und die Werte ausgegeben:Ausgabe -><-. Wenn nichts erkannt wird, werden im PHP die $_GET ignoriert, ohne einen Fehler auszugeben.
Schaue dir, nach dem Auslösen von "GET-Methode", die URL an, auch wenn nun die Seite refresht wird bleibt alles unverändert, ausser du änderst etwas an der URL.
Mittels GET (HTML Formular)
Man Kann auch einfach mit HTML mit PHP Daten austauschen. Man braucht bloss im <form> als action-method das GET auswählen.
Nach dem Absenden erkennt man hinter der URL im Adressbalken des Browsers die typischen GET-Informationen hinter dem Fragezeichen.
Der selbe "Trick" mit dem Formular klappt auch mit der POST-Methode, das heisst man ersetzt in der action-method das GET mit POST.
Dieses Beispiel zeige ich aber auch mit JavaScript, das "drein redet" und verborgene Formularelemente.
Die POST-Methode hat eine etwas sichere Datensicherheit als die GET-Methode ist aber (was sonst) aufwändiger zu programmieren... vorallem für einen Informatikdummy wie ich.
Was die Sache nicht einfach macht, ist die synchrone (parallele) Verarbeitung einiger JS-Funktionen, wärend JS eigentlich asynchron (sequentiel) arbeitet.
Beide Beispiele nutzen den XMLHttpRequest der leider synchron arbeitet. Das erste Beispiel ist meins und nutzt die PHP Datei var_dump.php mit dem einzigen Inhalt <?php var_dump($_POST) ; ?>. Sie gibt den PHP Array "$_POST" mit den übermittelten JS Variablen "daten" zurück
Bitte die Konsole einschalten.
<script>
var jsDaten;
function meinVersuch()
{
const daten = "Zahl_1=Eins&Zahl_2=Zwei&Zahl_3=Drei";
const x = new XMLHttpRequest();
x.open("POST", "var_dump.php");
x.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
x.responseType = "text";
x.send(daten);
x.onload = function()
{// Auswahl wie die Werte weiter verarbeitet werden
document.getElementById("POSTausgabe").innerHTML = " Gefundener Text: " + x.response;
jsDaten = x.response;
weiter(x.response);
};
}
function weiter(direkt)
{ // Hier könnten die Werte aus dem PHP verarbeitet werden
console.log("Aus der HTML Seite",document.getElementById("POSTausgabe").innerHTML);
console.log("Aus der Variabeln 'jsDaten'",jsDaten);
console.log("Aus dem Argument",direkt);
}
</script>
Das andere Beispiel habe ich im Web geklaut und löst das Problem der synchronen Funktion für den XMLHttpRequest mit callback. Und da endet meine Weisheit. Dieses Beispiel erhält die eigene IP-Adresse zurück und nutzt die PHP-Seite post.php mit dem einzigen Inhalt <?php echo $_SERVER['REMOTE_ADDR'] ; ?>.
<script>
function ladeIP(callback) {
let request = new XMLHttpRequest();
request.onload = () => {
if (request.status === 200) {
IP = request.responseText;
if (typeof callback == 'function') {
callback(IP);
}
} else {
console.log("IP konnte nicht geladen werden: " + request.responseText);
window.alert("IP konnte nicht geladen werden");
}
}
request.open("POST", "post.php" );
request.send();
}
function fremdVersuch()
{
let fnc = function(IP) {
console.log(IP);
document.getElementById("POSTPOSTausgabe2").innerHTML = IP;
};
ladeIP( fnc);
}
</script>