Variable aus javascript an php übergeben

0k63

Grünschnabel
Hallo

Ich möchte eine ganz gewöhnliche javascript-Variable an php übergeben, um sie dort via Mail versenden zu können. Leider kommt der Variableninhalt nicht im php an. Was mache ich falsch.

Der javascript-Code sieht folgendermassen aus:

<script>
var anzaufgaben;
var anzrichtig;
var minuten;
var sekunden;
var test;

anzaufgaben = localStorage.getItem ("AnzahlAufgaben");
document.getElementById("anzaufgaben").innerHTML = "Gelöste Aufgaben: " + anzaufgaben;

anzrichtig = localStorage.getItem ("AnzahlRichtig");
document.getElementById("richtig").innerHTML = "Davon richtig: " + anzrichtig;

minuten = localStorage.getItem ("Minuten");
sekunden = localStorage.getItem ("Sekunden");
document.getElementById("zeit").innerHTML = "Zeit: " + minuten + ":" + sekunden + " min";

var ergebnis = anzaufgaben + anzrichtig + minuten + sekunden;

var request = new XMLHttpRequest();
request.open("POST", "einmaleinsdiplomMail.php", true);
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
request.send(ergebnis);

request.onreadystatechange = function()
{
if (this.readyState == 4 && this.status == 200)
{ergebnis = this.responseText;}
};
</script>

Der php-Code sieht so aus:

<?php
$ergebnis = $_POST["ergebnis"];

/* Hier wird das Mail mit der Variable $ergebnis verschickt. */

echo $ergebnis;
?>

Das mit dem Mail hat übrigens bereits funktioniert, aber leider ist die Variable $ergebnis immer leer.

Für eure Hilfe bin ich sehr dankbar.
 

Sempervivum

Erfahrenes Mitglied
Kommt mir bekannt vor. Hast Du das früher schon mal irgend wo gepostet?
Für Ajax empfehle ich jQuery zu verwenden, dann ist alles, auch die Parameterübergabe, viel einfacher.
 

DerKleene1

Mitglied
Du musst ihm auch sagen das du die Werte in die Variable ergebnis speichern willst.

Code:
<script>
var anzaufgaben;
var anzrichtig;
var minuten;
var sekunden;
var test;

anzaufgaben = localStorage.getItem ("AnzahlAufgaben");
document.getElementById("anzaufgaben").innerHTML = "Gelöste Aufgaben: " + anzaufgaben;

anzrichtig = localStorage.getItem ("AnzahlRichtig");
document.getElementById("richtig").innerHTML = "Davon richtig: " + anzrichtig;

minuten = localStorage.getItem ("Minuten");
sekunden = localStorage.getItem ("Sekunden");
document.getElementById("zeit").innerHTML = "Zeit: " + minuten + ":" + sekunden + " min";

var ergebnis = "ergbnis=" + anzaufgaben + anzrichtig + minuten + sekunden;

var request = new XMLHttpRequest();
request.open("POST", "test1.php", true);
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
request.send(ergebnis);

request.onreadystatechange = function(){
    if (this.readyState == 4 && this.status == 200){
        ergebnis = this.responseText;
        console.log(ergebnis); 
    }
};
</script>

var ergebnis = "ergbnis=" + anzaufgaben + anzrichtig + minuten + sekunden;

Diese Zeile ist dies.
Dann habe ich noch eben ein console.log eingebaut, damit du siehst, das er ein Ergebnis zurück gibt.
 

0k63

Grünschnabel
Hallo Heiko

Danke für deine Antwort. Das mit der Variable ergebnis habe ich bereits mit einem alert getestet. Funktioniert wunderbar. Das Problem ist, dass die Daten nicht im php-Teil sind. Das php-Skript wird aufgerufen und die mail-Funktion klappt ebenfalls. Aber die Variable $ergebnis ist leider immer leer.
 

Sempervivum

Erfahrenes Mitglied
Schreibfehler?
Code:
var ergebnis = "ergbnis="
Code:
$ergebnis = $_POST["ergebnis"];
Dies funktioniert bei mir:
Code:
        var data = "anzaufgaben=" + anzaufgaben + "&anzrichtig=" + anzrichtig + "&minuten=" + minuten + "&sekunden=" + sekunden;
        var xhr = new XMLHttpRequest();
        var url = "testpost.php";
        xhr.open("POST", url, true);
        xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        xhr.onreadystatechange = function () {
            if (xhr.readyState === 4 && xhr.status === 200) {
                console.log(xhr.responseText);
            }
        };

        xhr.send(data);
testpost.php:
Code:
<?php
        foreach ($_POST as $key => $value) {
            echo $key . ": " . $value . " ";
       }
?>
Ergebnis:
anzaufgaben: 5 anzrichtig: 3 minuten: 5 sekunden: 30
 

0k63

Grünschnabel
Hallo Sempervivum

Danke für deine Antwort. Mit deiner Hilfe scheint's voranzugehen. Jetzt habe ich in der Konsole das gleiche Ergebnis, wie du es oben beschrieben hast. Aber der echo-Befehl in der php-Datei macht gar nichts. Jedenfalls erscheint nichts auf dem Bildschirm. Wie erhalte ich die Werte im php-File, damit ich dort z.B. ein Mail mit dem Inhalt verschicken kann?
 

Sempervivum

Erfahrenes Mitglied
Aber der echo-Befehl in der php-Datei macht gar nichts. Jedenfalls erscheint nichts auf dem Bildschirm.
Das ist deshalb der Fall, weil die Seite nicht direkt im Browser aufgerufen wird, sondern durch Ajax. Alles was in testpost.php mit echo oder sonst wie ausgegeben wird, steht in der Variablen xhr.responseText zur Verfügung und Du musst selber dafür sorgen, dass es auf dem Bildschirm ausgegeben wird. Z. B. so:
Code:
    <div id="ausgabe1"></div>
    <script>
        var anzaufgaben = 5,
            anzrichtig = 3,
            minuten = 5,
            sekunden = 30;
        var data = "anzaufgaben=" + anzaufgaben + "&anzrichtig=" + anzrichtig + "&minuten=" + minuten + "&sekunden=" + sekunden;
        var xhr = new XMLHttpRequest();
        var url = "testpost.php";
        xhr.open("POST", url, true);
        xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        xhr.onreadystatechange = function () {
            if (xhr.readyState === 4 && xhr.status === 200) {
                console.log(xhr.responseText);
                ausgabe1.innerHTML = xhr.responseText;
            }
        };

        xhr.send(data);
    </script>
 

0k63

Grünschnabel
Vielen Dank, aber irgendwie scheine ich da was nicht zu kapieren. Ich brauche ja den responseText gar nicht, weil ich die Variablen schon in javascript habe. Was ich will, ist die Übergabe an php, damit ich dort ein Mail verschicken kann. Den echo-Befehl hatte ich nur drin, um mir den Inhalt der Variablen anschauen zu können, was aber eben auch nicht geklappt hat.

<?php
$ergebnis = $_POST["ergebnis"];

mail ("test@gmail.com", "Test", $ergebnis , "From: test@gmail.com");
?>

Das Mail kommt auch tatsächlich an, aber im $ergebnis ist eben nichts drin. Das Mail ist "leer". Das ist die Krux, die mich zum Verzweifeln bringt ;-)
 

Sempervivum

Erfahrenes Mitglied
Wenn Du meinen Code verwendet hast, gibt es die POST-Variable $_POST["ergebnis"] auch nicht, sondern statt dessen:
$_POST["anzaufgaben"], $_POST["anzrichtig"], $_POST["minuten"], $_POST["sekunden"]
Daraus musst Du deinen Text zusammen bauen, etwa so:
Code:
$ergebnis = 'Anzahl Aufgaben: ' . $_POST["anzaufgaben"] . ' davon richtig: ' . $_POST["anzrichtig"] . ' ' . $_POST["minuten"] . ' Minuten ' . $_POST["sekunden"] . ' Sekunden.';
Natürlich kannst Du den kompletten Text auch clientseitig aufbauen und mit nur einer POST-Variablen an send() übergeben.