Javascript Variable in PHP Variable speichern?

3 Antworten

Ich empfehle dir dich mal zu informieren, was PHP überhaupt ist, denn du hast es scheinbar nicht verstanden. PHP und JS sind 2 komplett verschiedene Welten. Es gibt Workarounds, aber keine direkten Möglichkeiten, Daten zu tauschen.

Die einzige Möglichkeit wäre ein Request zu starten: Dieses wäre dann ähnlich wie ein Website-Aufruf, nur dass du es unsichtbar im Hintergrund machst und deshalb keine ganze HTML Seite als Rückgabe brauchst.

Ein Request kann man mittels Fetch oder Ajax senden. Für unerfahrene, wie dich, würde ich eher auf Ajax zurückgreifen. Dort wählst du dann zwischen einer Post und einer Get Methode. Get hängt deine Daten an die URL und übergibt diese so. Vielleicht hast du mal solche Get Urls gesehen:

https://google.com/search?q=Wert

search könnte hier ein Ordner sein, welcher auf eine index.php zeigt und q wäre der Schlüssel oder auch Name über den man dann "Wert" abrufen kann. (Google wurde soweit ich weiß nicht mit PHP geschrieben, das Prinzip ist aber dasselbe)

Post passiert im Hintergrund, dies eignet sich besser für Passwörter, da man diese nicht in der URL sehen darf.

Mit PHP $_POST["Name"] und $_GET["Name"] kannst du die jeweiligen Methoden abfragen. Wenn du in PHP zusätzlich prüfen willst, ob jemand die Seite aufruft, aber kein Request mit Get oder Post macht, kannst du isset($_POST["Name"]) oder isset($_GET["Name"]) benutzen, um zu prüfen, ob GET oder POST mit dem Namen überhaupt gesendet wurden.

https://www.w3schools.com/js/js_ajax_intro.asp

https://api.jquery.com/jquery.ajax/

https://www.php-einfach.de/php-tutorial/_get-und-_post/

verreisterNutzer  19.05.2022, 17:55

Ok danke erstmal dafür, ich bin auch wie du warscheinlich gemerkt hast ganz neu im Thema PHP. Ich habe gehört das man lieber POST benutzen sollte, deshalb werde ich es auch so versuchen. In PHP muss ich einfach nur das machen

$variable = $_POST["Name"]

Und in JS bin ich noch nicht ganz schlau geworden wie ich das mache. Beim Link von w3schools wurde es mit GET gemacht. Kann ich das GET einfach mit POST ersetzten und das klappt dann?

const xhttp = new XMLHttpRequest();
  xhttp.onload = function() {
    document.getElementById("demo").innerHTML =
    this.responseText;
  }
  xhttp.open("POST", "ajax_info.txt");
  xhttp.send();

Oder macht der Script das gleiche wie der PHP Script oben?

Tschuldigung für die vielen Fragen aber ich blick da noch nicht so richtig durch ^^

0
verreisterNutzer  19.05.2022, 18:02
@verreisterNutzer

Ah ok also damit

$.ajax({
  url: "test.html",
  context: document.body
}).done(function() {
  $( this ).addClass( "done" );
});

kann ich das machen. Und im Context sind die Daten die ich übertragen wil oder?

0
verreisterNutzer  19.05.2022, 18:06
@verreisterNutzer

Du hattest mir zwar geraten das mit ajax zu machen aber irgendwie sieht das hier leichter aus:

let data = {element: "barium"};

fetch("/post/data/here", {
  method: "POST",
  headers: {'Content-Type': 'application/json'}, 
  body: JSON.stringify(data)
}).then(res => {
  console.log("Request complete! response:", res);
});
0
FaTech  19.05.2022, 18:12
@verreisterNutzer

Ajax ist so ziemlich das Einfachste, was es gibt und da es von jQuery kommt, bietet es eine hohe Kompatibilität mit alten und neuen Browsern:

$.ajax({
  method: "POST",
  url: "some.php",
  data: { name: "John", location: "Boston" }
})
.done(function( msg ) {
  alert( "Data Saved: " + msg );
});

Diese Methode ist ein gutes Beispiel: Methode zielt darauf ab, ob du get oder post haben willst. some.php wäre deine Ziel PHP Datei. Data beinhaltet die Werte, die du posten willst (name ist schlüssel und John ist wert).

Done wird ausgeführt, sobald das Request fertig ist. msg sollte, sofern ich mich nicht täusche, die Daten beinhalten, die per echo ausgegeben werden. (Achtung, die Daten, die du mit PHP dann ausgibst, sollten kein HTML beinhalten).

Und vergiss nicht: Wenn du Ajax benutzt, musst du jQuery einbinden, sonst geht es nicht

1
FaTech  19.05.2022, 18:15
@verreisterNutzer

Ich kann dir empfehlen: Schau dir jQuery allgemein mal an. Es bietet extrem viele Features, die viele immer wieder gerne verwenden, weil es JavaScript extrem vereinfacht.

0
verreisterNutzer  19.05.2022, 18:17
@FaTech

Ja ich wollte eigentlich JQuery vermeiden weil das für mich sehr verwirrend aussieht und sehr komprimiert, was aber warscheinlich auch der Sinn davon ist ^^ Aber gut, Zeit spart es bestimmt

0
verreisterNutzer  19.05.2022, 18:21
@verreisterNutzer

Wenn ich das ausführe kommt statt der "data", der ganze HTML code als alert. Soll das so sein? Ich dachte das die msg die data nochmal ausgibt

0
FaTech  19.05.2022, 18:27
@verreisterNutzer

Meinst du das Script, dass ich verlinkt habe, sieht verwirrend aus? Das ist komprimiert, damit man Daten spart. Das brauchst du nicht weiter beachten

0

PHP wird auf dem Server ausgeführt und der durch das PHP-Script erzeugte HTML-Code wird dann auf den Client (Browser) geschickt, welcher dann auch darin enthaltene Scripte ausführt. Dein obiger Code erzeugt zum Beispiel eben nur diese Zeile HTML-Code:

<script>document.write(JSON.stringify(scripts));</script>

Der wird dann aber im Browser ausgeführt, lange nachdem das PHP-Script schon beendet wurde.

Wenn du Daten zum PHP-Script senden willst, musst du einen zusätzlichen Request aus dem Javascript heraus anstoßen. Dazu gibt es verschiedene Wege. Die FetchAPI ist sicherlich die monderste und flexibelste Methode:

https://www.mediaevent.de/javascript/fetch.html

Woher ich das weiß:Berufserfahrung – Entwickle seit > 20 Jahren Anwendungen mit PHP.
verreisterNutzer  18.05.2022, 19:27

Ok kannst du mir vielleicht ein Beispiel zeigen, denn in dem Link wird nur gezeigt wie man einen Request mit JS macht, aber nicht wie man ihn mit PHP empfängt

0
FaTech  18.05.2022, 19:45
@verreisterNutzer

Bei einem Post request: $empfangen = $_POST["name"]; und beim Get request: $empfangen = $_GET["name"];

name representiert hier den Namen, den du dem ganzen gegeben hast beim absenden, es ist immer Name : Wert, und über den Namen, also den Schlüssel ermittelst du den Wert. Mit der Variable $empfangen kannst du in PHP dann weiterarbeiten. Mit "isset" könntest du prüfen, ob post und get überhaupt gesetzt sind

1

Das kann so nicht funktionieren. PHP ist eine serverseitige Programmiersprache, JS client-seitig. Das heißt PHP wird zuerst ausgeführt und dann wird das HTML-Dokument mit JS an den Browser geschickt und dort ausgeführt. Daher kann in $stuff gar nichts anderes drin stehen als "<script>document.write(JSON.stringify(scripts));</script>";

verreisterNutzer  17.05.2022, 18:08

Beim echo funktioniert es doch auch warum dann nicht beim file_put_contents?

0
FaTech  18.05.2022, 19:50
@verreisterNutzer

File put contents schreibt eine Datei. Du würdest also den Text aus der Variable schreiben, was in dem Fall das Script wäre. Du würdest aber kein Ergebnis oder sonstiges schreiben vom JavaScript. Echo wird ausgeführt, wenn PHP zu Ende ist, also es sammelt sozusagen den Wert und am Ende übergibt es das dem Browser. Es führt das JS aber nicht aus. Der Browser merkt aber, da der das als HTML interpretiert, dass es JS ist und führt es aus. Browser hat aber nichts mit dem Server zu tun. Der Server (Dein PHP Script) bekommt vom Ergebnis deshalb nie was mit

1
verreisterNutzer  19.05.2022, 17:56
@FaTech

Ok weil ich hab im Internet sehr viel gelesen dass das funktionieren soll. Aber auch im Internet stimmt ja nicht alles...

0