Ankündigung

Einklappen
Keine Ankündigung bisher.

Eine Variable mit vielen werten per PUT an JSON-Array/Datenbankfeld übergeben

Einklappen

Neue Werbung 2019

Einklappen
Dieses Thema ist geschlossen.
X
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Eine Variable mit vielen werten per PUT an JSON-Array/Datenbankfeld übergeben

    Hallo zusammen,

    wie kann ich mit dem folgenden Code die Variable $alternativ an das array 'classification_element_name' per PUT übergeben sodass auch alle in der Variable beinhalteten Werte in das Datenbankfeld übernommen werden?

    PHP-Code:
    $url2 "https://bpk.bs.picturemaxx.com/api/v1/editing/classifications/42/elements/2156013";


    $dataj = array (
      
    'classification_element_parent_id' => 0,
      
    'classification_element_matchcode' => '',
      
    'classification_element_foreignref' => '',
      
    'localized' =>
      array (
        
    'en-us' =>
        array (
          
    'classification_element_name' => '',
        ),
        
    'de-de' =>
        array (
          
    'classification_element_name' => $alternativ,
        ),
      ),
    );

            
    $data_json json_encode($dataj);


                  
    $ch curl_init($url2);
                  
    // Set the url
            
    curl_setopt$chCURLOPT_URL$url2 );
            
    curl_setopt($chCURLOPT_USERAGENT$User_Agent);
                    
    curl_setopt($chCURLOPT_HTTPHEADER$request_headers);
            
    curl_setopt($chCURLOPT_ENCODING"");
            
    curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
            
    curl_setopt($chCURLOPT_CUSTOMREQUEST'PUT');
                    
    curl_setopt($chCURLOPT_POSTFIELDS$data_json);

                    
    // Execute
                    
    $result2 curl_exec($ch); // Performs the Request, with specified curl_setopt() options (if any).
                    
    $code curl_getinfo($chCURLINFO_HTTP_CODE);
                    
    // Closing
            
    curl_close($ch); 
    Wenn ich diesen Code ausführe wird lediglich der letzte Wert der Variable $alternativ (siehe nachfolgend) in das Datenbankfeld 'classification_element_name' übernommen. Darin befinden sich aber eigentlich viele Werte, was so aussieht:

    Johann Wolfgang Goethe ; Johan Wolfgang von Goethe ; Johan Wolphgang Goethe ; Johan W. von Goethe ; Joh. Wolfg. v. Goethe ; J. Wolfgang Goethe ; J. W. v. Goethe ; J. W. Goethe ; Jan Wolfgang Goethe ; Jean Wolfgang von Goethe ; Juan Wolfgang von Goethe ; Juan Wolfgang Goethe ; Juan W. Goethe ; João Wolfgang von Goethe ; Iohann Wolfgang Goethe ; Iohan Wolphgang Goethe ; Ioannes W. Goethe ; I. W. Goethe ; Wolfgango Goethe ; Wolfango Goethe ; W. von Goethe ; Volfgango Goethe ;

    usw.

    Die Werte für die Variable $alternativ werden mit dem folgenden Code erfolgreich bezogen

    PHP-Code:
    header('Content-type: text/html; charset=utf-8');
                
    // Inhaltstyp und Zeichenkodierung für Skript festlegen
                    
    $User_Agent 'Mozilla/5.0 (Windows NT 6.1; rv:60.0) Gecko/20100101 Firefox/60.0';

                
    $id $_POST["id"];                
                    
    // Übernahme Formulareingabe
                    
    $url "http://hub.culturegraph.org/entityfacts/$id";
                    
    // URL festlegen

                    
    $request_headers[] = 'Accept: application/json';
                  
    $request_headers[] = 'Content-Type: application/json; charset=utf-8';
                  
    $request_headers[] = 'Accept-Encoding:    gzip, deflate, identity';
                  
    $request_headers[] = 'Accept-Language: de,en-US;q=0.7,en;q=0.3';
                  
    $request_headers[] = 'X-picturemaxx-api-key: key';
                    
    $request_headers[] = "Authorization: Bearer Token";
                
    // Optionale Anfrageoptimierungen

                  
    $ch curl_init($url);
                  
    //  Initiate curl
            
    curl_setopt($chCURLOPT_USERAGENT$User_Agent);
                    
    curl_setopt($chCURLOPT_HTTPHEADER$request_headers);
            
    curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
            
    curl_setopt($chCURLOPT_ENCODING"");
                    
    // Anfrage optimieren
                    // Execute
                    
    $result curl_exec($ch); // Performs the Request, with specified curl_setopt() options (if any).
            
    curl_close($ch);
            
    // Closing

            
    $data json_decode($resulttrue); // Dekodiert eine JSON-Zeichenkette, Übergibt an Variable
            //$file = 'test.txt';
            
    foreach($data['variantName'] as $alternativ) {
            echo 
    $alternativ " ; "
    Danke und Grüße

  • #2
    Ich versteh den Code nicht. Welchen meinst du jetzt, den ersten oder den zweiten? Und was ergibt das Debugging?

    Wie sehen die HTTP-Requests aus und wie sollten sie aussehen?

    Kommentar


    • #3
      Hallo Hellbringer,

      ich meine den ersten Code: "wie kann ich mit dem folgenden Code die Variable $alternativ an das array 'classification_element_name' per PUT übergeben sodass auch alle in der Variable beinhalteten Werte in das Datenbankfeld übernommen werden?"
      Der als zweites angeführte Code wird vor dem als ersten ausgeführt um die Werte zu bekommen die dann mit der Variable $alternativ ausgegeben werden.

      Dabei wird aber eben nur ein Wert von sehr vielen übernommen und dazu nur der letzte.

      Also statt "Johann Wolfgang Goethe ; Johan Wolfgang von Goethe ; Johan Wolphgang Goethe ; Johan W. von Goethe ; Joh. Wolfg. v. Goethe ; J. Wolfgang Goethe ; J. W. v. Goethe ; J. W. Goethe ; Jan Wolfgang Goethe ; Jean Wolfgang von Goethe ; Juan Wolfgang von Goethe ; Juan Wolfgang Goethe ; Juan W. Goethe ; João Wolfgang von Goethe ; Iohann Wolfgang Goethe ; Iohan Wolphgang Goethe ; Ioannes W. Goethe ; I. W. Goethe ; Wolfgango Goethe ; Wolfango Goethe ; W. von Goethe ; Volfgango Goethe ;"

      wird nur der letzte Wert "Volfgango Goethe" in das Datenbankfeld 'classification_element_name' übernommen.

      Kommentar


      • #4
        An dieser Stelle

        PHP-Code:
        $data json_decode($resulttrue);
                foreach(
        $data['variantName'] as $alternativ) {
                echo 
        $alternativ " ; "
        bekomme ich die die Ausgabe

        "Johann Wolfgang Goethe ; Johan Wolfgang von Goethe ; Johan Wolphgang Goethe ; Johan W. von Goethe ; Joh. Wolfg. v. Goethe ; J. Wolfgang Goethe ; J. W. v. Goethe ; J. W. Goethe ; Jan Wolfgang Goethe ; Jean Wolfgang von Goethe ; Juan Wolfgang von Goethe ; Juan Wolfgang Goethe ; Juan W. Goethe ; João Wolfgang von Goethe ; Iohann Wolfgang Goethe ; Iohan Wolphgang Goethe ; Ioannes W. Goethe ; I. W. Goethe ; Wolfgango Goethe ; Wolfango Goethe ; W. von Goethe ; Volfgango Goethe ;"

        also einen String richtig? Aber wieso wird mir dann nur der letzte Name von all den Namen in das Datenbankfeld 'classification_element_name' eingetragen statt der komplette Satz?

        PHP-Code:
        $dataj = array (
          
        'classification_element_parent_id' => 0,
          
        'classification_element_matchcode' => '',
          
        'classification_element_foreignref' => '',
          
        'localized' =>
          array (
            
        'en-us' =>
            array (
              
        'classification_element_name' => '',
            ),
            
        'de-de' =>
            array (
              
        'classification_element_name' => $alternativ,
            ),
          ),
        );

                
        $data_json json_encode($dataj
        ;

        Kommentar


        • #5
          Hier mal noch der komplette Code am Stück

          PHP-Code:
          <?php
                          
          //PHP Infos anzeigen lassen
                         //phpinfo();
                    
          header('Content-type: text/html; charset=utf-8');
                      
          // Inhaltstyp und Zeichenkodierung für Skript festlegen
                          
          $User_Agent 'Mozilla/5.0 (Windows NT 6.1; rv:60.0) Gecko/20100101 Firefox/60.0';

                      
          $id $_POST["id"];                
                          
          // Übernahme Formulareingabe
                          
          $url "http://hub.culturegraph.org/entityfacts/$id";
                          
          // URL festlegen

                          
          $request_headers[] = 'Accept: application/json';
                        
          $request_headers[] = 'Content-Type: application/json; charset=utf-8';
                        
          $request_headers[] = 'Accept-Encoding:    gzip, deflate, identity';
                        
          $request_headers[] = 'Accept-Language: de,en-US;q=0.7,en;q=0.3';
                        
          $request_headers[] = 'X-picturemaxx-api-key: key';
                          
          $request_headers[] = "Authorization: Bearer token";
                      
          // Optionale Anfrageoptimierungen

                        
          $ch curl_init($url);
                        
          //  Initiate curl
                  
          curl_setopt($chCURLOPT_USERAGENT$User_Agent);
                          
          curl_setopt($chCURLOPT_HTTPHEADER$request_headers);
                  
          curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
                  
          curl_setopt($chCURLOPT_ENCODING"");
                          
          // Anfrage optimieren
                          // Execute
                          
          $result curl_exec($ch); // Performs the Request, with specified curl_setopt() options (if any).
                  
          curl_close($ch);
                  
          // Closing

                  
          $data json_decode($resulttrue); // Dekodiert eine JSON-Zeichenkette, Übergibt an Variable
                  
          foreach($data['variantName'] as $alternativ) {
                  echo 
          $alternativ " ; "// Schleifenanweisung um bspw. Variantname zu erhalten

          }


                  echo (
          "<pre>");
                  echo 
          $data['dateOfBirth'] . " ";

                  foreach(
          $data['placeOfBirth'] as $beruf) {
                  echo 
          $beruf['preferredName'] . " ; ";   
          }        
                  echo (
          "<pre>");
                  echo 
          $data['dateOfDeath'] . " ";  

                  foreach(
          $data['placeOfDeath'] as $beruf) {
                  echo 
          $beruf['preferredName'] . " ; ";   
          }           echo 
          "<br><br>";

                  foreach(
          $data['professionOrOccupation'] as $beruf) {
                  echo 
          $beruf['preferredName'] . " ; ";   
          }                

                  echo 
          $data['biographicalOrHistoricalInformation'] . " ; ";  




          $url2 "https://bpk.bs.picturemaxx.com/api/v1/editing/classifications/42/elements/2156013";


          $dataj = array (
            
          'classification_element_parent_id' => 0,
            
          'classification_element_matchcode' => '',
            
          'classification_element_foreignref' => '',
            
          'localized' =>
            array (
              
          'en-us' =>
              array (
                
          'classification_element_name' => '',
              ),
              
          'de-de' =>
              array (
                
          'classification_element_name' => $alternativ,
              ),
            ),
          );

                  
          $data_json json_encode($dataj);


                        
          $ch curl_init($url2);
                        
          // Set the url
                  
          curl_setopt$chCURLOPT_URL$url2 );
                  
          curl_setopt($chCURLOPT_USERAGENT$User_Agent);
                          
          curl_setopt($chCURLOPT_HTTPHEADER$request_headers);
                  
          curl_setopt($chCURLOPT_ENCODING"");
                  
          curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
                  
          curl_setopt($chCURLOPT_CUSTOMREQUEST'PUT');
                          
          curl_setopt($chCURLOPT_POSTFIELDS$data_json);

                          
          // Execute
                          
          $result2 curl_exec($ch); // Performs the Request, with specified curl_setopt() options (if any).
                          
          $code curl_getinfo($chCURLINFO_HTTP_CODE);
                          
          // Closing
                  
          curl_close($ch);



          ?>

          Kommentar


          • #6
            PHP-Code:
            $data json_decode($resulttrue);
                    foreach(
            $data['variantName'] as $alternativ) {
                    echo 
            $alternativ " ; ";  

            Wenn du mit foreach durch einen Array gehst hat $alternativ anschliessend ans foreach immer den Wert des letzten Array-Elements. Wenn du alle Einträge als String in die DB speichern willst (was unsinnig ist, aber das ist ein anderes Thema) musst du dir solch einen String zusammenbauen.
            Und bezeichne mal Deine Variablen richtig, so dass man weiss was drin ist. Du verwendest 3 Mal bei foreach $beruf??

            Kommentar


            • #7
              Hallo Jonas,

              ah entschuldige die weiteren foreach sind erstmal unwichtig. Nur die $alternativ foreach ist gerade wichtig sorry.
              Wie müsste das denn Aussehen solch einen String zusammenzubauen um alle Werte und nicht nur den letzten zu erhalten?

              Kommentar


              • #8
                Wenn du Code hierdrin postest ist er relevant und sollte dementsprechend gepflegt werden/sein. $alternativ ist auch keine gescheite Variablenbenennung, so nebenbei.

                Frag mal die Doku wie das geht:
                http://php.net/manual/de/language.operators.string.php

                Kommentar


                • #9
                  Ok. Also wenn ich
                  PHP-Code:
                  $alternativ_j .= $alternativ
                  nutze erhalte ich wieder nur den letzten Wert.

                  Bei
                  PHP-Code:
                  $alternativ_j $alternativ " ; "
                  ebenfalls.
                  [COLOR=inherit !important]


                  [/COLOR]

                  Kommentar


                  • #10
                    Das erste ist richtig, wenn du da wieder nur den letzten Wert bekommst vermurkst du das sonst irgendwo wieder. Ich hab leider keine Glaskugel. Debuggen musst du selbst.

                    Kommentar


                    • #11
                      Also der Code hat nach Prüfung keine Fehler und sonst funzt ja auch alles wie es soll. Nur wird eben nicht die ganze Zeichenkette sondern nur der letzte Wert übergeben. Zum verrückt werden

                      Ein weiterer Versuch sah so aus. Leider auch ohne Erfolg
                      PHP-Code:
                      $alternativData = array();
                      foreach(
                      $data['variantName'] as $alternativ) {    
                      echo 
                      $alternativ " ; ";    
                      $alternativData[] = $alternativ;
                      }  
                      $dataj = array (  
                      'classification_element_parent_id' => 0,  
                      'classification_element_matchcode' => '',  
                      'classification_element_foreignref' => '',  
                      'localized' =>    
                      array (    
                      'en-us' =>      array (      
                      'classification_element_name' => '',     ),    
                      'de-de' =>      array (       'classification_element_name' => $alternativData,     ),   ), ); 

                      Kommentar


                      • #12
                        Bitte zeige den gesamten Code der Schleife die zu dem Ergebnis geführt hat, so wie Jonas das in #6 gezeigt hat, und lass uns nicht immer raten was du nun umgesetzt hast.

                        EDIT
                        $alternativ_j .= $alternativ; kann ich nicht erkennen in dem Code in #11

                        Kommentar


                        • #13
                          Du müsstest halt wissen was 'classification_element_name' genau erwartet.

                          Kommentar


                          • #14
                            Du zeigst ja auch keinen testbaren Code. Erstelle doch mal ein Beispielcode, bei dem das Fehlverhalten auftritt.

                            Kommentar


                            • #15
                              @ Protestix $alternativ_j .= $alternativ; habe ich wie folgt im Code eingefügt


                              PHP-Code:
                              $url2 "https://bpk.bs.picturemaxx.com/api/v1/editing/classifications/42/elements/2156013";

                              $alternativ_j .= $alternativ;

                              $dataj = array (
                                
                              'classification_element_parent_id' => 0,
                                
                              'classification_element_matchcode' => '',
                                
                              'classification_element_foreignref' => '',
                                
                              'localized' =>
                                array (
                                  
                              'en-us' =>
                                  array (
                                    
                              'classification_element_name' => '',
                                  ),
                                  
                              'de-de' =>
                                  array (
                                    
                              'classification_element_name' => $alternativ_j,
                                  ),
                                ),
                              );

                                      
                              $data_json json_encode($dataj);


                                            
                              $ch curl_init($url2);
                                            
                              // Set the url
                                      
                              curl_setopt$chCURLOPT_URL$url2 );
                                      
                              curl_setopt($chCURLOPT_USERAGENT$User_Agent);
                                              
                              curl_setopt($chCURLOPT_HTTPHEADER$request_headers);
                                      
                              curl_setopt($chCURLOPT_ENCODING"");
                                      
                              curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
                                      
                              curl_setopt($chCURLOPT_CUSTOMREQUEST'PUT');
                                              
                              curl_setopt($chCURLOPT_POSTFIELDS$data_json);

                                              
                              // Execute
                                              
                              $result2 curl_exec($ch); // Performs the Request, with specified curl_setopt() options (if any).
                                              
                              $code curl_getinfo($chCURLINFO_HTTP_CODE);
                                              
                              // Closing
                                      
                              curl_close($ch);



                              ?> 
                              Jonas 'classification_element_name' erwartet einen String. Hier ein Beispielcode der API

                              Code:
                              {
                                "classification_element_parent_id": 0,
                                "classification_element_matchcode": "string",
                                "classification_element_foreignref": "string",
                                "localized": {
                                  "de-de": {
                                    "classification_element_name": "string"
                                  },
                                  "en-us": {
                                    "classification_element_name": "string"
                                  }
                                }
                              }
                              hellbringer leider kann ich den Code nicht testbar hinterlegen da ich mit Admin-Token an der API arbeite.

                              Kommentar

                              Lädt...
                              X