Ankündigung

Einklappen
Keine Ankündigung bisher.

Aus JSON encode PHP-Variablen generieren

Einklappen

Neue Werbung 2019

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

  • Aus JSON encode PHP-Variablen generieren

    Hallo Gemeinde,

    mal wieder stehe ich hilflos vis-a-vis...
    Ich habe in der Datei welche die MySQL-Abfrage macht, Code der die Daten per JSON als array übergibt.
    Das sieht so aus:

    PHP-Code:
    $arr = array();
    if(
    $result->num_rows 0) {
        while(
    $row $result->fetch_assoc()) {
            
    $arr[] = $row;    
        }
    }
    # JSON-encode the response
    $json_response json_encode($arrtrue);

    // # Return the response
    print_r($json_response); 
    In der ausgebenden Datei werden die Werte dann in geschweiften Klammern dargestellt, also z.B. so:

    PHP-Code:
    {{data.country}} 
    Ich brauche hier aber PHP-"$variablen" die ich beliebig formatieren kann,- ich kann z.B. ja nicht schreiben
    PHP-Code:
    if({{data.country}} =...){...}; 
    Habe jetzt Stunden mit JSON-decode herumexperimentiert,- es gelingt mir nicht...

    Wie mache ich das richtig?

    Danke und Gruß,
    Thomas

  • #2
    In der ausgebenden Datei werden die Werte dann in geschweiften Klammern dargestellt
    Dann bring deiner Templateengine doch bei PHP-Code zu verarbeiten. Smarty macht das z.B. über den Pipeoperator, und du kannst in Smart auch eigene Funktionen definieren, das kann von Haus aus auch Bedingungen.
    [I]You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.[/I]

    Kommentar


    • #3
      json_encode() liefert einen String. Hier
      PHP-Code:
      $json_response json_encode($arrtrue); 
      ist der 2.Parameter Unsinn, schau ins Manual. Zeig mal ein Beispiel was in $json_response wirklich drin steht. Dann haben wir hier eine Basis.
      Wenn sich im $json_response ein valider Json-String befindet, erhältst du dein Array mit json_decode()
      PHP-Code:
      $arrCopy json_decode($json_response,true); 
      zurück.

      Kommentar


      • #4
        Erstmal danke für Euer Bemühen.
        Ich komme damit nicht klar. Habe viele Stunden den Gockel gefragt, etliche Codes probiert, meine Liste bleibt leer...

        Nochmals wie das Ganze aussieht:
        In der "select-Datei" steht (gekürzt) dies:

        PHP-Code:
        <?php
        include('../includes/config.php');

        $query="select distinct c.id, c.vorname, c.nachname, c.auftrnr from qi_kunden c where c.kdnr=4444 order by c.nachname";
        $result $mysqli->query($query) or die($mysqli->error.__LINE__);

        $arr = array();
        if(
        $result->num_rows 0) {
            while(
        $row $result->fetch_assoc()) {
                
        $arr[] = $row;    
            }
        }
        # JSON-encode the response
        $json_response json_encode($arrtrue);

        // # Return the response
        print_r($json_response);
        ?>
        Der Inhalt des Controllers:

        PHP-Code:
        var app angular.module('myApp', ['ui.bootstrap']);

        app.filter('startFrom', function() {
            return function(
        inputstart) {
                if(
        input) {
                    
        start = +start//parse to int
                    
        return input.slice(start);
                }
                return [];
            }
        });
        app.controller('customersCrtl', function ($scope$http$timeout) {
            
        $http.get('ajax/getCustomers.php').success(function(data){
                
        $scope.list = data;
                
        $scope.currentPage 1//current page
                
        $scope.entryLimit 12//max no of items to display in a page
                
        $scope.filteredItems $scope.list.length//Initially for no filter  
                
        $scope.totalItems $scope.list.length;
            });
            
        $scope.setPage = function(pageNo) {
                
        $scope.currentPage pageNo;
            };
            
        $scope.filter = function() {
                
        $timeout(function() { 
                    
        $scope.filteredItems $scope.filtered.length;
                }, 
        12);
            };
            
        $scope.sort_by = function(predicate) {
                
        $scope.predicate predicate;
                
        $scope.reverse = !$scope.reverse;
            };
        }); 
        und die Datei welche die Tabelle erstellt (gekürzt):

        PHP-Code:
        <table class="table table-striped table-bordered">
                    <
        thead>
                    <
        th>Vorname&nbsp;<a ng-click="sort_by('domainname');"><class="glyphicon glyphicon-sort"></i></a></th>
                    <
        th>Nachname<a ng-click="sort_by('tld');"><class="glyphicon glyphicon-sort"></i></a></th>
                    </
        thead>
                    <
        tbody>
                        <
        tr ng-repeat="data in filtered = (list | filter:search | orderBy : predicate :reverse) | startFrom:(currentPage-1)*entryLimit | limitTo:entryLimit">
                            <
        td>{{data.vorname}}</td>
                            <
        td>{{data.nachname}}</td>
                        </
        tr>
                    </
        tbody>
                    </
        table
        Ja,- und da wo jetzt z.B. "{{data.vorname}}" steht, da sollte eine PHP-Variable ala "$vorname" stehen...
        Alle möglichen Varianten mit json_decode habe ich probiert,- aber abgesehen davon dass dieser Bereich sich mir ohnehin noch nicht erschlossen hat,- hat nichts zum Erfolg geführt.

        Kommentar


        • #6
          OT: kaminbausatz Habe eine gefühlte Ewigkeit nichts mehr mit JS gemacht bzw. kein JS gebraucht. Scheint aber "IN" zu sein bestimmte Inhalte sich per JS zu holen. In diesen Zusammenhang meine Fragen:

          1. Kann es sein das dein Skript #5 einen aktuellen Browser braucht? Das hier
          Request URL:https://jsonplaceholder.typicode.com/users/
          wird in meinen alten Chrome angemeckert, im FF läuft es.

          2. Habe das mal auf die Schnelle mit PHP probiert:
          PHP-Code:
          $jsonStr file_get_contents("https://jsonplaceholder.typicode.com/users/");

          $data json_decode($jsonStr);

          $title = array(
            
          'name' => 'Name',
            
          'username' => 'User',
            
          'email' => 'E-Mail'
          );

          echo 
          html::Table('border=1',$title,$data,HTML::KEYSEL); 
          Ausgabe: (Titelzeile wird hier im Forum ausgeblendet)
          Leanne Graham Bret Sincere@april.biz
          Ervin Howell Antonette Shanna@melissa.tv
          Clementine Bauch Samantha Nathan@yesenia.net
          Patricia Lebsack Karianne Julianne.OConner@kory.org
          Chelsey Dietrich Kamren Lucio_Hettinger@annie.ca
          Mrs. Dennis Schulist Leopoldo_Corkery Karley_Dach@jasper.info
          Kurtis Weissnat Elwyn.Skiles Telly.Hoeger@billy.biz
          Nicholas Runolfsdottir V Maxime_Nienow Sherwood@rosamond.me
          Glenna Reichert Delphine Chaim_McDermott@dana.io
          Clementina DuBuque Moriah.Stanton Rey.Padberg@karina.biz

          Sehe jetzt nicht so richtig den Vorteil einer JS-Lösung.

          Kommentar


          • #7
            Zitat von jspit Beitrag anzeigen
            OT: kaminbausatz
            1. Kann es sein das dein Skript #5 einen aktuellen Browser braucht? Das hier
            Nein, es läuft sogar auf meinem alten IE11..

            Ich selber nutze Angular auch nur sehr sehr selten, ich habe im Laufe der Jahre eine riesigen Fundus selbst geschriebener Module entwickelt um eben auf vorgefertigte Libs verzichten zu können. .

            Das Beispiel dient nur dem Zweck dem TE zu vermitteln, dass er seine angeforderten Daten scheinbar nicht richtig interpretiert.

            Ansonsten bin ich schon ein Freund davon, möglichst viel clientseitig per JS zu erledigen und lediglich benötigte Daten nachzuladen.

            Kommentar


            • #8
              Warum verwendest du print_r() für die Ausgabe? Warum setzt du keinen Content-Type im HTTP-Header?

              Außerdem seh ich kein Debugging. Wie sehen HTTP-Request und -Response aus? Erscheinen irgendwelche Meldungen in der Browser-Konsole?

              Zitat von jspit Beitrag anzeigen
              Kann es sein das dein Skript #5 einen aktuellen Browser braucht?
              Nein, AngularJS ist uralt. Heutzutage würde ich keine neue Anwendung mehr mit AngularJS schreiben. Würde mich stark wundern, wenn dafür ein aktueller Browser notwendig wäre.

              Kommentar


              • #9
                Zitat von kaminbausatz Beitrag anzeigen
                Ansonsten bin ich schon ein Freund davon, möglichst viel clientseitig per JS zu erledigen und lediglich benötigte Daten nachzuladen.
                Ich weniger. Spart etwas Traffic beim eigenen Server und verschiebt dies zum Nutzer.
                Dazu mal ein paar Zeiten aus der Netzwerkanalyse mit leeren Browsercache (Ist die Zeit welcher der Nutzer in der Regel beim Erstaufruf der Seite wartet):
                Beispiel mit js-Nachladen #5: 422ms Angular + 266ms json = 688 ms
                PHP mit leeren Servercache: 280 ms
                PHP mit Servercache: 30 ms

                Nur mal so am Rande. Brauchen wir hier nicht weiter zu diskutieren. Gehört nicht so richtig zum Thema.


                Kommentar


                • #10
                  Zitat von jspit Beitrag anzeigen
                  Ich weniger. Spart etwas Traffic beim eigenen Server und verschiebt dies zum Nutzer.
                  Es wird auch Rechenlast zum Client verschoben. Das heißt pro Server können mehr Clients bedient werden. Und heutzutage mit den vielen dynamischen Elementen auf einer Webseite ist es wesentlich sauberer und einfacher ein client-only Frontend zu entwickeln als dieser komische Mischmasch aus serverseitigem HTML und clientseitigem JavaScript, wo im Endeffekt dann doch auch zusätzlich HTML vom Client generiert/manipuliert wird.

                  Kommentar


                  • #11
                    Hallo zusammen,
                    also ich bedanke mich für das Interesse,- aber leider sind solche Diskussionen für mich nicht hilfreich.
                    Ich habe nun wirklich Vieles probiert und Stunden recherchiert.
                    Ich weiß dass es nur eine winzige Kleinigkeit sein kann, kriege es aber nicht auf die Reihe.

                    Muss ich mir eben was Anderes basteln...

                    Kommentar


                    • #12
                      Für die PHP Seite nutze bitte nicht print_r sondern einfach Echo. Und dann bitte Contest Header setzen.
                      PHP-Code:


                      $data 
                      = Array("what ever");
                      header
                      ('Content-Type: application/json');
                      echo 
                      json_encode($data);
                      ​​​​​​ 
                      das würde hier im Vorfeld ja auch schon erwaehnt

                      Wenn du keinen expliziten Header sendenst, dann sendet der Webserver i.d.R. Text/HTML, damit ist es dann im JS einfach nur ein String.
                      Sendest du json Header, dann wird der Inhalt der Response "automatisch Decodet" und deine JS variable $scope.list enthält dann direkt die object/Array Struktur

                      Aktuell enthält deine JS variable nur einem String und du kannst dann natürlich nicht auf die Elemente zugreifen.

                      Lässt sich im JS auch einfach Mal mit dem alert() oder console.Log() prüfen. Oder auch mit dem JSdebugger im browser oder ... Oder...

                      Sich auch einfach Mal nach ja debuggen Mechanismen oder vielleicht gibt es ja auch nen angular Dev Plugin für Browser, für vue.js gibt es sowas jedenfalls.

                      Kommentar


                      • #13
                        Hallo,
                        mein Script funktioniert doch...!
                        Ich hatte mehrfach geschrieben dass alles funktioniert,- nur auf der ausgebenden Seite stehen die Variablen als "{{data.variable}}" da.
                        Mit diesen Variablen kann ich aber nicht arbeiten und fragte wie ich diese ins "$variable" konvertiere?
                        Ich habe dies aber mittlerweile gelöst, ich bin nun einen ganz anderen Weg gegangen,- ohne JSON, nur reines PHP.

                        Kommentar


                        • #14
                          Das print_r sagt mir: das "funktioniert doch" hört schon viel früher auf.
                          [SIZE="1"]Atwood's Law: any application that can be written in JavaScript, will eventually be written in JavaScript.[/SIZE]

                          Kommentar


                          • #15
                            Zitat von lottikarotti Beitrag anzeigen
                            Das print_r sagt mir: das "funktioniert doch" hört schon viel früher auf.
                            Hm,- dann sagt es Dir was Falsches.
                            Es funktioniert tatsächlich einwandfrei. Kann aber mit den Variablen auf der Tabellenseite nicht arbeiten. Soweit ich mittlerweile weiß, ist "print_r" dafür zuständig dass {{data.variable}} "gedruckt" / ausgegeben wird.

                            Kommentar

                            Lädt...
                            X