Datenbank mit javascript variable Updaten / javascript variable zu php mit ajax

TheJoniii

Grünschnabel
Hallo,

Das ist mein javascript Code:
Javascript:
var testusersGeld = 111;

var sendUsersGeld = new XMLHttpRequest();

sendUsersGeld.open("POST", "usersGeldSenden.inc.php");
sendUsersGeld.setRequestHeader("Content-Type", "application/json");
sendUsersGeld.send(testusersGeld);
Das ist mein PHP Code:
PHP:
<?php

session_start();

$requestPayload = file_get_contents("php://input");

$object = json_decode($requestPayload);

var_dump($object);

if(isset($_POST['update']))
{

    require_once 'includes\dbh.inc.php';

    $query = "UPDATE users SET usersGeld='".$object."' WHERE usersName LIKE '{$_SESSION["usersName"]}'";
  
    $result = mysqli_query($conn, $query );

    if($result)
    { 
        echo $object;
        echo 'Data Updated';
    }else{
        echo 'Data Not Updated';
    }
    mysqli_close($conn);
}

Mit var_dump kann ich die 111 sehen aber wenn ich z.b ein echo mache funktioniert es nicht. Woran könnte das liegen? Wen ich den Datentyp ändere bringt es nichts.
 
Zuletzt bearbeitet von einem Moderator:
$object ist - genau wie der Name es sagt - ein Objekt. Und ein Objekt kann man nicht mit Echo ausgeben.
Zeig doch mal, was var_dump() wirklich ausgibt. Kaum nur 1111.
 
In diesem Fall gilt: "Namen sind Schall und Rauch". Was beim Server ankommt ist das, was vom Client gesendet wurde und zwar ein integer mit dem Wert 111, der im Javascript testusersGeld heißt und auf dem Server in die Variable $object eingetragen wird.

@TheJoniii
1. Dieses Javascript und die Auswertung im PHP bis vor das if(isset(... ist zwar nicht falsch und funktioniert aber wenn Du nur einen integer übertragen willst, ist das Verfahren mit JSON überflüssig.
2. Dies ist jetzt ein wenig subjektiv aber ich ziehe die neuere fetch-API dem XMLHttpRequest vor, weil ich sie für klarer und übersichtlicher halte. Sieh dir die folgende Demo an und versuche, sie auf deinen Fall zu übertragen:
Code:
    <!-- In den folgenden Container wird die Antwort vom Server eingetragen: -->
    <span id="out"></span>
    <script>
        // Neues FormData-Objekt erzeugen:
        const params = new FormData();
        // ... und die Parameter, die übertragen werden sollen, eintragen:
        params.append('param1', 'some-param');
        params.append('param2', 'some-other-param');
        params.append('numparam', '1.24');
        // Parameter mit der Methode POST an das Skript testpost.php schicken:
        fetch('testpost.php', {
            method: 'post',
            body: params
        }).then(res => {
            // Die Antwort vom Server wird als Text ausgewertet:
            return res.text();
        }).then(res => {
            // Antwort vom Server in der Console ausgeben:
            console.log(res);
            // ... und in HTML-Element eintragen:
            document.getElementById('out').innerHTML = res;
        });
    </script>
Damit findest Du die Variablen, die Du in params eingetragen hast, im PHP als POST-Variablen wieder und kannst damit arbeiten.

In deinem PHP sehe ich das Problem, dass Du zwar den richtigen Wert in $object einträgst aber bei dem isset dann eine POST-Variable abfragst, die es nicht gibt.
 
$object ist - genau wie der Name es sagt - ein Objekt. Und ein Objekt kann man nicht mit Echo ausgeben.
Zeig doch mal, was var_dump() wirklich ausgibt. Kaum nur 1111.

Bei var_dump() kommt string(3) "111" raus. Wenn ich das object mit $int = (int) $requestPayload; in einen int ändere ist der value 0. Woran liegt das? Wenn ich den $int mit var_dump() ausgebe wird mir aber int(111) angezeigt.
 
Zurück