Ankündigung

Einklappen
Keine Ankündigung bisher.

REST POST schreibt keine Daten

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • REST POST schreibt keine Daten

    Servus
    Ich halte mich mit formulierungen kurz ums schneller überfliegen zu können. Soll nicht unhöflich rüberkommen
    Hoffe es is zu verstehen. Vielen Dank schonmal
    Problem:
    Per Restschnittstelle in mysql DB schreiben. GET Funktioniert. POST nicht.

    System Ubuntu lampp.
    TestDB eingerichtet und paar Daten reingehauen.
    Über Postman GET Abfrage gibt die richtigen Daten aus.
    Über Postman POST Abfrage failed.

    Ordnerstruktur:
    rest -> connection.php
    -> v1 -> players.php

    Connection.php
    PHP-Code:
    <?php
    Class dbObj{
        
    /* Database connection start */
        
    var $servername "";
        var 
    $username "";
        var 
    $password "";
        var 
    $dbname "";
        var 
    $conn;
        function 
    getConnstring() {
            
    $con mysqli_connect($this->servername$this->username$this->password$this->dbname) or die("Connection failed: " mysqli_connect_error());

            
    /* check connection */
            
    if (mysqli_connect_errno()) {
                
    printf("Connect failed: %s\n"mysqli_connect_error());
                exit();
            } else {
                
    $this->conn $con;
            }
            return 
    $this->conn;
        }
    }

    ?>
    players.php
    PHP-Code:
     <?php
    // Connect to database
        
    include("../connection.php");
        
    $db = new dbObj();
        
    $connection =  $db->getConnstring();

        
    $request_method=$_SERVER["REQUEST_METHOD"];

    switch(
    $request_method)
        {
            case 
    'GET':
                    
    get_players();
                break;

            case 
    'POST':
            
    // Insert Product
            
    insert_player();
            break;

            default:
                
    // Invalid Request Method
                
    header("HTTP/1.0 405 Method Not Allowed");
                break;
        }

    function 
    get_players()
        {
            global 
    $connection;
            
    $query="SELECT * FROM player";
            
    $response=array();
            
    $result=mysqli_query($connection$query);
            while(
    $row=mysqli_fetch_array($result))
            {
                
    $response[]=$row;
            }
            
    header('Content-Type: application/json');
            echo 
    json_encode($response);
        }


    function 
    insert_player()
        {
            global 
    $connection;
            
    $data json_decode(file_get_contents('php://input'), true);
            
    $name=$data["name"];
            
    $testData=5;
            echo 
    $query="INSERT INTO 'player' ('name') VALUES ('.$name.')";
            if(
    mysqli_query($connection$query))
            {
                
    $response=array(
                    
    'status' => 1,
                    
    'status_message' =>'Player Added Successfully.',
                    
    'data' => $field
                
    );
            }
            else
            {
                
    $response=array(
                    
    'status' => 0,
                    
    'status_message' =>'Player Addition Failed.',
                    
    'data' => $field,
                    
    'Test Data' => $testData,
                    
    'Another Data' => $data
                
    );
            }
            
    header('Content-Type: application/json');
            echo 
    json_encode($response);
        }

    ?>
    .htaccess
    PHP-Code:
    RewriteEngine On # Turn on the rewriting engine
    RewriteRule ^players/?$ players.php [NC,L]
    RewriteRule ^players/([0-9]+)/?$ players.php?id=$[NC,L
    Fehlermeldung bei Postman
    INSERT INTO 'player' ('name') VALUES ('..'){
    "status": 0,
    "status_message": "Player Addition Failed.",
    "data": null, "Test Data": 5,

    "Another Data": null
    }
    Tabellenname: player
    name = varchar
    id = int
    wuerfe = int


  • #2
    PHP-Code:
     if(mysqli_query($connection$query)) 
    mysqli_ hat errror Info Methoden. Was sagen die? https://php-de.github.io/jumpto/sql/

    global ist übrigens pfui, sollte man nicht nutzen. Was eine Funktion / Methode braucht sichtbar als Parameter übergeben und keine Magie.
    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #3
      PHP-Code:
      echo $query="INSERT INTO 'player' ('name') VALUES ('.$name.')"
      Das ist Quatsch. => https://www.php.net/manual/de/langua...ors.string.php

      $data ist null, also schlägt json_decode() wohl fehl. Hast du schon mal file_get_contents() ausgeben lassen?
      Und wenn dort etwas kommt das JSON validieren lassen?

      Kommentar


      • #4
        Zitat von jonas3344 Beitrag anzeigen
        PHP-Code:
        echo $query="INSERT INTO 'player' ('name') VALUES ('.$name.')"
        Das ist Quatsch. => https://www.php.net/manual/de/langua...ors.string.php

        $data ist null, also schlägt json_decode() wohl fehl. Hast du schon mal file_get_contents() ausgeben lassen?
        Und wenn dort etwas kommt das JSON validieren lassen?
        Meinst du so?

        PHP-Code:
        ...
         
        'status_message' =>'Player Addition Failed.',
         
        'data' => $name,
         
        'Data' => $testData,
         
        'Data' => $data,
         
        'File_Get_Contents' => file_get_contents('php://input')
        ... 
        Dann hab ich folgenden output:

        INSERT INTO 'player' ('name') VALUES (''){
        "status": 0,
        "status_message": "Player Addition Failed.",
        "data": null,
        "Test Data": 5,
        "Another Data": null,
        "File_Get_Contents": ""
        }
        Was bedeutet "das json validieren lassen"?

        Kommentar


        • #5
          Die SQL-Query ist syntaktisch falsch. Nutze Prepared Stamtents, dann musst du nicht mit Strings herum-schnibbeln.

          Ausserdem ist es sicherer als das was du jetzt hast. Meines Erachtens ist da aktuell eine Lücke.
          Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
          PHP.de Wissenssammlung | Kein Support per PN

          Kommentar


          • #6
            Meine DB die zum Schluss hergenommen wird läuft bei meinem Webspace Anbieter php-friends. Wenn du sagst des ganze ist eh kacke hast du dann alternativen für mich? Vllt was einfacheres xD Hab des ganze auch nur aus nem Tutorial zusammengeschustert

            Kommentar


            • #7
              Zitat von lancedelgardo Beitrag anzeigen
              Was bedeutet "das json validieren lassen"?
              https://jsonlint.com/

              Kann man php://input 2 Mal abgreifen? Das wüsste ich jetzt nicht.

              PHP-Code:
              $data file_get_contents('php://input');
              var_dump($data); 

              Kommentar


              • #8
                PHP-Code:
                $data file_get_contents('php://input');
                var_dump($data); 
                Ergebnis:
                string(0) ""

                Kommentar


                • #9
                  Machst du dasselbe mal ausserhalb der Funktion? Ganz oben im Script?

                  Kommentar


                  • #10
                    Habs jetzt hier eingefügt:
                    PHP-Code:
                    <?php
                    // Connect to database
                            
                    include("../connection.php");
                            
                    $db = new dbObj();
                            
                    $connection =  $db->getConnstring();

                            
                    $request_method=$_SERVER["REQUEST_METHOD"];

                            
                    $data file_get_contents('php://input');
                            
                    var_dump($data);

                    switch(
                    $request_method)
                            {
                                    case 
                    'GET':
                                            
                    // Retrive Products
                                            //if(!empty($_GET["id"]))
                                            //{
                                            //      $id=intval($_GET["id"]);
                                            //      get_players($id);
                                            //}
                                            //else
                                            //{
                                                    
                    get_players();
                                            
                    //}
                                            
                    break;

                                    case 
                    'POST':
                                    
                    // Insert Product
                                    
                    insert_player();
                                    break;

                                    default:
                                            
                    // Invalid Request Method
                                            
                    header("HTTP/1.0 405 Method Not Allowed");
                                            break;
                            }
                    ...
                    Und es kommt das gleiche Ergebnis wie oben raus.

                    string(0) ""

                    Kommentar


                    • #11
                      Mit $_GET und $_:POST ist es sicher einfacher, aber wenn einfach keine daten ankommen, schickst Du eben Keine.
                      Bitte versuche in Zukunft Code auf da notwenige Minimum zu kürzen.

                      Kommentar


                      • #12
                        Yep, da dürfte der Fehler im Postman liegen.

                        Kommentar


                        • #13
                          Zitat von jonas3344 Beitrag anzeigen
                          Yep, da dürfte der Fehler im Postman liegen.
                          Glaubst? Dann knall ich des mal in meine App rein und probier von da aus nochmal.

                          Danke Leute!

                          Kommentar

                          Lädt...
                          X