Ankündigung

Einklappen
Keine Ankündigung bisher.

API Anbindung an bestehende Seite

Einklappen

Neue Werbung 2019

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

  • API Anbindung an bestehende Seite

    Hallo zusammen,

    aktuell entwickel ich für jemanden in meinem näheren Umfeld ein kleines System, mit dem ich mir PHP gleichermaßen auch beigebracht habe.

    Nun geht es darum eine API an dieses System anzubinden um bestimmte Daten von Benutzern an den entsprechenden Dienstleister zu überbringen und diese natürlich auch auszulesen.

    Ich habe mich nun längere Zeit damit beschäftigt und verzweifel schlicht weg nur noch - Nach meiner Selbsteinschätzung sehe ich mich einfach noch nicht weit genug um dieses Problem ordnungsgemäß zu lösen.


    Die API ist wie folgt aufgebaut:

    Von dem entsprechenden Dienstleister habe ich eine URL zur Verfügung gestellt bekommen, an die weitere Parameter anzuhängen sind.

    Beispiel: www.dienstleister.de/admin/state.php?

    Diese Parameter setzen sich wie folgt zusammen:

    1 ) Benutzererkennung
    2 ) Passwort
    3 ) Funktion (get oder set)
    4 ) Cons (Login des Benutzers)
    5 ) verschiedene Parameter zur Auslesung oder Änderung

    Also: http://www.dienstleister.de/admin/st...=benutzername&...


    Problem:
    Wie oben bereits erwähnt fehlen mir für solche Fortgeschrittenen-Arbeiten wirklich die Kenntnisse, von dessen Aneignung ich noch gefühlte 100 Jahre entfernt bin. Ich habe die Grundlagen von PHP recht zügig gelernt und die meisten Dinge verstehe ich, allerdings fehlt es mir noch an der Praxis, was es in meinem Fall dringend nachzuholen gilt.

    Das erste Problem liegt schon darin, dass ich wirklich überhaupt keine Ahnung habe was ich mit der URL anfangen soll. Klar, ich gebe sie mit den entsprechenden Parametern in irgendeinen Browser ein und bekomme entweder Fehlermeldungen oder OKs zurück, was mir aber nicht wirklich hilft die URL in einem bestehenden System auszulesen.

    Das zweite Problem liegt in der Auswahl (XML, CSV, JSON), die der Dienstleister zum Auswerten oder Beschreiben zur Verfügugn stellt - Denn weder von dem einen noch von dem anderen habe ich wirklich Ahnung (in Kombination mit PHP).



    Auch wenn das hier die Script-Börse ist bin ich sehr daran interessiert die Dinge, mit denen ich es zu tun habe, auch zu lernen und zu verstehen. Ich suche also jemanden (für den schmalen Taler ) mit dem ich das Auslesen und Beschreiben der XML, JSON oder CSV (die drei Möglichkeiten bietet der Dienstleister) gemeinsam entwickeln und lösen kann.

    Ich würde mich wirklich sehr darüber freuen, wenn sich jemand mit etwas Zeit (und vielleicht auch ein wenig Geduld) melden würde.



    - zon3y

  • #2
    Zitat von zon3y Beitrag anzeigen
    Diese Parameter setzen sich wie folgt zusammen:

    1 ) Benutzererkennung
    2 ) Passwort
    3 ) Funktion (get oder set)
    4 ) Cons (Login des Benutzers)
    5 ) verschiedene Parameter zur Auslesung oder Änderung

    Also: http://www.dienstleister.de/admin/st...=benutzername&...
    Was verstehst du daran nicht? Ganz normale GET-Parameter.
    Result abfragen geht am einfachsten mit [MAN]file_get_contents[/MAN]

    PHP bietet für alle 3 Result-arten Funktionen oder Klassen an, am einfachsten ist allerdings [MAN]json_decode[/MAN] denke ich.
    [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

    Kommentar


    • #3
      Hallo Tkausi,

      vielen Dank für deine schnelle Rückmeldung und entschuldige bitte die verspätete meine.
      Ich befinde mich im Moment noch in einem Umzug, so dass es hier etwas stressig zugeht.

      Vor diesem Post hier habe ich mich noch ein wenig mit dem file_get_contents-Parameter beschäftigt, aber er führt mich noch nicht so recht auf die richtige Fährte.

      Von dem Provider der API-Schnittstelle bekomme ich wie oben bereits beschrieben folgenden Link:

      Code:
      ...de/admin/state_consctc.php/uctc=benutzername&pctc=passwort&function=get/set&cons=user&format=xml/csv/json&cons_props=1
      Wenn ich nun beispielsweise den User "Test" als JSON abfrage, dann erhalte ich folgenden Wert zurück:

      PHP-Code:
      [{"name":"Test","username":"test101","destination":"043213344345","price":"49","showStats":"1","chngDest":"0","chngPrice":"0"}] 
      Der "username" ist dabei der "username" des Users, nicht wie oben im GET-Paramter der Benutzername des Admins.



      Die Frage, die sich für mich als erstes stellt ist: Was mache ich mit diesen Werten und was mache ich mit diesem Link?
      Letzten Endes soll über diese API ja ein Wert abgefragt oder vermittelt werden, doch wüsste ich ehrlich gesagt nicht wie ich diesen Wert abfragen sollte.

      Wenn ich den Link direkt in den Browser eintippe, dann ist klar, dass ich beispielsweise "showStats" = 1 erhalte, jedoch benötige ich ja eine Abfrage in PHP, die "showStats" erst einmal auswertet um dann entsprechend sagen zu können "User" ist "showStats = 0" oder ist "showStats = 1" um daraus dann ein Resultat, also das If-Ergebnis zu ziehen.


      Für mich ist JSON Decode völliges Neuland - Ebenso wie eine Stringabfrage über File-Get-Contents, was mich gerade tierisch überfordert.
      Ich habe weder Ahnung wohin der Link soll, noch was ich mit diesem Link mache, noch wo das Resultat (z.B. in JSON) gespeichert wird und wo ich es abfragen kann.

      Wie schon genannt bin ich ein echter Neuling und auch, wenn ich die Basics sicherlich beherrsche, bin ich an dieser Stelle wirklich überfordert.


      LG zon3y

      Kommentar


      • #4
        Hallo zon3y,

        es freut mich das du mit der Web-Entwicklung angefangen hast und versuchst selbstständig alles zu lernen.

        Ich versuche mal dir die Funktionen etwas zu erklären, sodass du verstehst was da vor sich geht und du diese mit Leichtigkeit selbst benutzen kannst.

        Lass es mich mal mit Umschreibungen versuchen.

        Fangen wir mit file_get_contents an:

        Diese Funktion macht nichts weiter als das aus was der Endpunkt ausgibt, in ein String zu speichern. Eine API sollte nur das nötigste Wiedergeben, daher sollte ausschließlich das wichtigste Enthalten sein. Da du nur die Adresse der API bekommen hast, ist es die Aufgabe des Kunden das die API korrekte Ausgaben tätigt.

        Kommen wir zu den Formaten.

        XML, JSON, CSV. Diese sind einfach nur verschiedene Arten, bestimmte Daten auszugeben.

        Lass es mich mit folgendem Beispiel erläutern:

        Ein Wettrennen mit 10 Teilnehmern findet statt. Es wird die Zeit gemessen und man hat 10 unterschiedliche Zeiten.

        Nun könnte man eine Tabelle erstellen:

        # - Name - Nachname - Zeit
        1 - Hans - Mustermann - 12345
        2 - Peter - Mustermann - 514124
        ..
        ..


        Man könnte es aber auch wie folgt ausgeben:


        # - 1 - 2 - 3 ..
        Name - Hans - Peter - ..
        Nachname - Mustermann - Mustermann - ..
        Zeit - 12345 - 514124 - ..


        Oder man findet sogar eine andere Möglichkeit der Ausgabe..

        So in der Art ist das auch mit den Formaten.

        PHP-Code:
        [XML]
        <
        Teilnehmer>
            <
        Name>Hans</Name>
            <
        Nachname>Mustermann</Nachname>
            <
        Zeit>12345</Zeit>
        </
        Teilnehmer>
        <
        Teilnehmer>
            <
        Name>Peter</Name>
            <
        Nachname>Mustermann</Nachname>
            <
        Zeit>514124</Zeit>
        </
        Teilnehmer>
        [/
        XML]

        [
        CSV] (Es gibt unterschiedliche Arten von CSV Formaten!)
        1;Hans;Mustermann;12345
        2
        ;Peter;Mustermann;514124
        ..
        ..
        [/
        CSV]

        [
        JSON]
        [{
        "name":"Hans","nachname":"Mustermann","zeit":"12345"},{"name":"Peter","nachname":"Mustermann","zeit":"514124"}]
        [/
        JSON

        Der Vorteil von Json in diesem Punkt ist, das es einerseits so wenig "unnützer Zeichen" wie möglich hat, aber dennoch sämtliche erforderlichen Werte liefert, um damit arbeiten zu können.

        Merke dir folgende Zeichen:

        { } = Objekte
        [ ] = Arrays

        Falls du irgendwann mal Javascript lernen möchtest, wirst du später dankbar für diese Freunde sein

        Folgend teile ich das obige JSON Beispiel mal etwas auf, sodass du siehst was ich meine:

        PHP-Code:
        // *edit* Hier sind einige Erklärungen nicht zu 100% korrekt, aber zum Verständnis sollte es ausreichen. In der PHP.Net Doku sieht man wie es ganz richtig ist */edit*

        // <-- Array, das was du auch von JSON_DECODE wieder bekommst *edit* Wenn du als zweiten Parameter "true" angibst */edit*
            
        // <-- Objekt
                
        "name""Hans",
                
        "nachname""Mustermann",
                
        "zeit""12345"
            
        }, // Der erste Wert des Arrays ist ein Objekt mit den obigen Eigenschaften
            
        // Der zweite Wert des Arrays ist auch ein Objekt mit den selben Eigenschaften, nur andere Werte
                
        "name""Peter",
                
        "nachname""Mustermann",
                
        "zeit""514124"
            
        }

        Würde man den Obigen Wert in die JSON_DECODE Funktion werfen, würde man ein Array mit den Objekten zurück bekommen:

        PHP-Code:
        $ausgabe_von_filegetcontents "[{"name":"Hans","nachname":"Mustermann","zeit":"12345"},{"name":"Peter","nachname":"Mustermann","zeit":"514124"}]";

        $ausgabe json_decode$ausgabe_von_filegetcontents,true ); // Zweiter Parameter gibt an, ob die Ausgabe als Array ausgegeben werden soll oder nicht. True = Ja soll | False oder leer lassen = Nein soll nicht
        $ausgabe2 json_decode$ausgabe_von_filegetcontents );

        foreach( 
        $ausgabe as $key => $val ){
            echo 
        $key.": ".$val."<br>";
        }

        echo 
        "<br>Direkte Ausgabe: ".$ausgabe[1]["name"];
        echo 
        "<br>Ausgabe eines Objektes: ".$ausgabe2[1]->zeit
        Ausgabe:

        Code:
        name: Hans
        nachname: Mustermann
        zeit: 12345
        name: Peter
        nachname: Mustermann
        zeit: 514124
        Direkte Ausgabe: Peter
        Ausgabe eines Objektes: 514124
        Was du lediglich beachten -solltest- ist folgendes:

        Angenommen du möchtest über die API ein Login realisieren.

        PHP-Code:
        $check file_get_contents"www.dieadresse.de/login.php?loginname=".$_POST'loginname' ]."&password=".$_POST'password' ] ); 
        Dann mach das bitte nicht 1:1 so. Alle Usereingaben sollten ausreichend gefiltert werden, z.B. wie folgt:

        PHP-Code:
        $login filter_var$_POST'loginname' ], FILTER_SANITIZE_STRING );
        $password filter_var$_POST'loginname' ], FILTER_SANITIZE_STRING ); 

        Das war es im Prinzip schon. Wenn du noch Probleme hast, schaue dir die Dokumentation auf php.net an (einfach php.net/das_was_du_suchst) oder Google und das jeweilige php.net Ergebnis anschauen. Nicht zu verachten sind die Kommentare weiter unten, da sind meistens sehr nützliche Informationen von anderen Programmierern enthalten!

        Wichtig ist auch: Probieren geht über studieren. Schaue dir einfach mal an, was du von file_get_contents zurück bekommst:

        PHP-Code:
        $file_get_contents = ....
        var_dump$file_get_contents );

        $json_decode = ...
        var_dump$json_decode ); 
        Sobald du verstehst wie du diese Ausgaben zu interpretieren hast, kannst du zum Gottkönig in der Fehleranalyse werden.. natürlich mit viel viel viel Fehler machen und lernen wie man die Fehler findet und zukünftig verhindert

        Viel Erfolg!
        Spiegel Funktion Live: https://www.youtube.com/watch?v=JI3Df7-KFtw

        Kommentar


        • #5
          Hallo zorndyuke,

          erstmal vielen, vielen Dank für diese lange und ausgiebige Nachricht.
          Ich habe mich nun einige Stunden mit XML beschäftigt und mir deinen Text dabei immer wieder durchgelesen.

          Was soll man sagen? Es funktioniert!


          Jetzt gibt es nur noch ein Problem:
          Ich habe heute voller Verzweiflung versucht dein "Tutorial" und die Hilfestellungen von php.net direkt mit dem API-Link umzusetzen, was leider immer wieder fehl schlug. Der Provider sagte mir, dass die Schnittstelle mit XML "aktuell" fehlerhaft ist, so dass ich auf andere Möglichkeiten zugreifen soll.

          Ich habe mich dann für (simple)XML entschieden und auch das funktioniert einwandfrei. Ich erhalte alle Daten und alle Informationen die ich benötige um damit arbeiten zu können.


          Mein Code sieht aktuell so aus:


          api.php
          PHP-Code:

          // Liest die XML-Daten aus der ClickToCall24-Schnittstelle aus.

          $api_username '[I]benutzer[/I]';
          $api_password '[I]passwort[/I]';
              
              
          $api simplexml_load_file(rawurlencode('provider .de/admin/state_consctc24.php?' 'uctc24=' $api_username '&pctc24=' $api_password '&function=' 'get' '&cons=' 'all' '&format=' 'xml' '&cons_props=' '1'));

          $api_active    simplexml_load_file(rawurlencode('provider .de/admin/state_consctc24.php?' 'uctc24=' $api_username '&pctc24=' $api_password '&function=' 'get' '&cons=' 'all' '&format=' 'xml'));



          // Definiert die notwendigen XML-Daten in notwendige Variablen.
              
          $ctc_id 1;
              
          $ctc_username    =    $api->single_data_set[$ctc_id]->name;                /* Benutzername */
          $ctc_price        =    $api->single_data_set[$ctc_id]->name;        /* Preis (pro Minute) */
          $ctc_phone        =    $api->single_data_set[$ctc_id]->destination;        /* Zielrufnummer */ 

          Auch dieser Code funktioniert einwandfrei - Mit einer Ausnahme!

          Ich muss die einzelnen Benutzer aus meiner MySQL-Datenbank laden. Dafür habe ich eine While-Schleife erstellt in der die einzelnen Echos die entsprechenden DIV-Blöcke inklusive der Daten aufrufen. Das funktionierte mit reinen Datenbankeinträgen wunderbar, durch XML leider aber nicht mehr so wirklich und ich kann mir auf die Fehlermeldung aktuell keinen Reim machen, auch wenn ich weiß was sie bedeutet (und sie leider schon oft genug gesehen habe ).


          Meine index.php schaut so aus (Snippet):

          PHP-Code:

          $online 
          mysql_query("SELECT * FROM account WHERE userrole = '1' ORDER BY rand()"); 
                          

          while(
          $row mysql_fetch_object($online)) {
                          

             echo 
          '<strong>ID ' $row->id '</strong>';
                          
             echo 
          '<div class="adviser">';
             echo 
          '<div class="id">';
             echo 
          '<div class="name">' . [B][U]$api->single_data_set[1]->name[/U][/B] . '</div>';
             echo 
          '<div class="name"><h2><a class="name" href="/berater/' $row->id '.php' '">' $row->firstname ' ' $row->lastname '</a></h2></div>';
             echo 
          '<div class="info">' $row->info ' ...' '</div>';
             echo 
          '</div>';
             echo 
          '<div class="call"><a class="call-button" href="' '?call=' '">Jetzt anrufen!*</a></div>';
             echo 
          '<div class="conditions">*' '€ / Minute <br> mobil ggf. abweichend</div>';
             echo 
          '<div class="like-result"><br><h3>' '1.249' '</h3></div>';
             echo 
          '<div class="like-text"><br>zufriedene Kunden</div>';
             echo 
          '</div>';
                      
                      
             echo 
          '<br><br><br>';
                              
             } 
          Bitte achte noch nicht auf die genaue Formatierung, es geht mir erstmal um den funktionellen Teil.


          Das Problem habe ich direkt mal fett markiert.
          Um eine bestimmte Zeile aus einer Liste auslesen zu können benötige ich folgendes Format:

          $variable->xmlformat[string]->xmlformat, also in meinem Fall $api->single_data_set[string]->name.


          Hier soll sich der String, also single_data_set[das hier] an den aktuellen Datenbankeintrag anpassen und lediglich die ID des Users wählen.

          Bei User-ID 1 in der Datenbank also: single_data_set[1]->name
          Bei User-ID 2 in der Datenbank also: single_data_set[2]->name
          Bei User-ID 3 in der Datenbank also: single_data_set[3]->name




          Ich habe folgende Methoden ausprobiert:

          1. single_data_set[$row->id]->name
          2. single_data_set[$id]->name, hier habe ich der Variable $id in der vorherigen Zeile den Wert $row->id gegeben.
          3. Ich habe statt mysql_fetch_object() auch mysql_fetch_array() ausprobiert.


          Folgende Fehlermeldung erhalte ich (bei allen Versuchen):

          PHP-Code:
          [B]Notice[/B]: Trying to get property of non-object in /homepages/15/dxxxxxxxx/htdocs/developer/core/api.php on line 36 
          Bei Line 36 handelt es sich um echo '<div class="name">' . $api->single_data_set[1]->name . '</div>'; aus oben genannter index.php.


          Die Frage ist also wie ich dieses Problem anständig lösen kann und ich komme auf keinen grünen Nenner.
          Ich hatte mir einige Tutorials ergooglet, einige auf YouTube angesehen und auch auf PHP.de geschaut, jedoch scheint kein Fall auf dieses bestimmte Bedürfnis zu passen, so dass ich hier keine vernünftige Antwort erhalte.

          Kommentar


          • #6
            Guten Morgen,

            Ich habe mich nun einige Stunden mit XML beschäftigt und mir deinen Text dabei immer wieder durchgelesen.
            Ja!! Ich glaube du bist der ERSTE User in diesem Forum der dieses Forum verstanden hat! Genau sowas will man sehen. Dadurch steigt die Lust zu helfen doch enorm.

            Danach folgt eine ausführliche Erklärung was bereits gemacht wurde und sogar weiter gehende Versuche auf Erfolg.. mir kommen die Freudentränen :')

            Also um dir zu helfen benötige ich noch einige Infos:

            - Gibt dir die API auch mehrere Benutzer zurück? Also existiert $api->single_data_set[1]->name überhaupt?
            (Tipp: "var_dump( $api->single_data_set );")

            - Folgender Versuch war auch mein erster Gedanke: single_data_set[$row->id]->name.

            Man muss aber bedenken, dass ID's grundsätzlich bei 1 anfangen, während Arrays bei 0 anfangen.

            So kann bei einem einzigen User, $api->single_data_set[1]->name garnicht existieren, sondern ausschließlich $api->single_data_set[0]->name. (Also Index 0, statt die 1)

            So würde ich folgendes vorschlagen einmal auszuprobieren: single_data_set[($row->id-1)]->name. Also ID minus 1.

            So würde der erste User den Index 0, also den ersten Wert im Array, auswählen.

            Zum Fehler selbst nur noch als Bestätigung von meiner Seite aus:

            Tabelle "Users" hat 10 User

            PHP-Code:
            $sql $db->query'SELECT * FROM `users`' ); // Benutze lieber PDO statt MySQL. Ist gar nicht mal so schwer, aber viel besser

            while( $row $sql->fetch() ){
                echo 
            "Benutzer: ".$row->id."<br>";
            }

            $nummer11 $sql->fetch();

            echo 
            "Benutzer: ".$nummer11->id."<br>"// Zeile 9 
            Ausgabe
            Code:
            Benutzer: 1
            Benutzer: 2
            Benutzer: 3
            Benutzer: 4
            Benutzer: 5
            Benutzer: 6
            Benutzer: 7
            Benutzer: 8
            Benutzer: 9
            Benutzer: 10
            Notice: Trying to get property of non-object in {PFAD} on line 9
            Das liegt daran das es keinen 11 User gibt, dennoch so umgegangen wird, als wurde die Variable erfolgreich mit Daten gefüllt. Daher mache ich gerne Sicherheitshalber diverse Checks, damit solche Fehler nicht auftauchen können.

            Angenommen bei einem News System:

            PHP-Code:
            $sql $db->query'SELECT * FROM `news`' );

            if( 
            $sql->rowCount() > ){
                
            // News Ausgabe
            } else {
                echo 
            "Es sind keine News vorhanden.";

            Spart auch die Wartezeit falls gar keine News existieren. Falls woanders noch irgendwo etwas verfälscht oder "nicht vorhanden" sein kann, dann checke ich das auch. Bei Dateien checke ich mit file_exists ob eine Datei überhaupt existiert, bevor man versucht diese zu öffnen.

            Hoffe ich konnte dir helfen, falls das Problem weiterhin besteht, bräuchte ich weitere Informationen.. versuch einfach das was dir am wichtigsten vorkommt zu erläutern.
            Spiegel Funktion Live: https://www.youtube.com/watch?v=JI3Df7-KFtw

            Kommentar


            • #7
              Guten Morgen Dir auch!

              Ja!! Ich glaube du bist der ERSTE User in diesem Forum der dieses Forum verstanden hat! Genau sowas will man sehen. Dadurch steigt die Lust zu helfen doch enorm. Danach folgt eine ausführliche Erklärung was bereits gemacht wurde und sogar weiter gehende Versuche auf Erfolg.. mir kommen die Freudentränen :')
              Ich musste wirklich herzlich lachen.. :'D

              Vor meiner Anmeldung habe ich hier schon einige Zeit verbracht und hab immer wieder gedacht "Leute.. probiert es doch selbst?!", vor allem weil es logischerweise nur unfreundliche Antworten hagelt, wenn man sich die Lösungen vorkauen lässt - Der Spaß am Lernen geht ja auch verloren, wenn man immer nur "spickt".



              Zu meinem Problem:

              Nachdem Du geschrieben hattest, dass IDs in Arrays immer mit 0 (und nicht mit 1) anfangen musste ich mir fast den Kopf gegen die Tischkante schlagen, weil der Wald vor Bäumen mal wieder nicht sichtbar und die Lösung des Problems in offenbar kleinem Abstand von mir war.

              Aber: Pustekuchen! :'D

              Leider besteht das Problem auch weiterhin - Und ich begreife beim besten Willen nicht, warum.
              Zu deiner Frage nach der Auflistung der Benutzer in der XML komme ich direkt im Anschluss, vorab aber der damit zusammenhängende - und ich schätze wichtige - Teil.


              In meiner Datenbank habe ich eine separate Spalte mit dem namen 'ctcid' angelegt, also einer mit 0 beginnenden ID.
              • Testnutzer 1 trägt die 'ctcid' = 0
              • Testnutzer 2 trägt die 'ctcid' = 1
              • Testnutzer 3 trägt die 'ctcid' = 2



              Das Script in der While-Schleife habe ich entsprechend angepasst.
              Dieses verwendet aktuell den folgenden Befehl: $api->single_data_set[$row->ctcid]->username

              Ausprobiert habe ich folgende Befehle bzw. Änderungen am Grundbefehl:

              - ...->single_data_set["row->ctcid"]->...(Mit " )
              - ...->single_data_set['row->ctcid']->...(Mit ' )
              - ...->single_data_set[row->ctcid]->... (Ohne ' oder ")

              Wenn ich ' verwende zeigt mir der Editor (Notepad++) keine Farbveränderung des Befehls an (woran ich mich manchmal ganz gerne orientiere um die Korrektheit einer Schreibweise einzuschätzen), verwende ich ", dann wertet er die Variable aus (da Farbveränderung wie bei einem mysqli_query z.B.). Wenn weder ' noch " verwendet werden zeigt er die Variable blau und das abgefragte Array weiß an.


              ('ctcid' beginnt wie gesagt laut Datenbank mit 0 und ist eine ganz gewöhnliche INT-Spalte)


              Um die Variable samt ihres Strings auch auf die Richtigkeit testen zu können habe ich sie etwas weiter im Code nochmals als Echo ausgeführt und ausgeben lassen - So wollte ich sicher gehen, dass die IDs auch korrekt angezeigt werden. (echo $row->ctcid;)


              Wenn man sich die index.php im Frontend ansieht, dann bekomme ich an der Stelle, an der das Echo platziert wurde, wie erwartet die entsprechende Zahlenreihe (0, 1, 2) als einfachen HTML-Text angezeigt.

              An der Stelle jedoch, an der ich die XML nach den Daten Frage, bekomme ich lediglich wieder ein:
              Notice: Trying to get property of non-object in /.../.../.../htdocs/index.php on line 36


              Es scheint mir, als könne er die XML-Datei durch den String in [ ] nicht abfragen, denn trage ich eine 0, eine 1 oder auch eine 2 in die Eckklammern ein, so zeigt er mir fehlerfrei alle Daten an, die ich abfragen wollte.

              Das Script wirft den Fehler als wirklich ausschließlich aus, wenn ich [$row->ctcid] statt eines festen Wertes eintrage.


              Um keine Fehler zu übersehen habe ich zudem noch in die erste Spalte der index.php error_reporting(-1) eingetragen, jedoch kamen keine verborgenen Fehlermeldungen mehr zum Vorschein.


              Zur XML-Datei (und damit natürlich auch zu deiner Frage):

              Es ist möglich, eine bestimmte Person abzufragen oder alle. Diese Abfrage kann man im Paramter "cons" eintragen.

              cons = benutzername
              Nur die Daten von 'benutzername' erscheinen.

              cons = all
              Die Daten aller Benutzer erscheinen.


              Den Link habe ich bereits kontrolliert und er zeigt definitiv 'all', also alle Benutzer an, so dass hier eigentlich ein Wert statt eines Fehlers ausgewertet werden müsste.


              Die XML-Datei sieht im Quellcode dann folgendermaßen aus:

              Code:
              SimpleXMLElement Object
              (
                  [single_data_set] => Array
                      (
                          [0] => SimpleXMLElement Object
                              (
                                  [name] => Test1
                                  [username] => test100
                                  [destination] => xxxx
                                  [price] => 49
                                  [showStats] => 1
                                  [chngDest] => 0
                                  [chngPrice] => 0
                              )
              
                          [1] => SimpleXMLElement Object
                              (
                                  [name] => Test2
                                  [username] => test101
                                  [destination] => xxxx
                                  [price] => 49
                                  [showStats] => 1
                                  [chngDest] => 1
                                  [chngPrice] => 1
                              )
              
                          [2] => SimpleXMLElement Object
                              (
                                  [name] => Test3
                                  [username] => test102
                                  [destination] => xxxx
                                  [price] => 49
                                  [showStats] => 1
                                  [chngDest] => 0
                                  [chngPrice] => 0
                              )
                      )
              )
              *Die Auswahl 'destination' steht für Festnetz- und Mobilfunknummern, die ich in dem Fall durch XXXX ersetzt habe, da bereits gültige enthalten sind.



              ERGÄNZUNG:

              Statt eines mysql_fetch_object habe ich des Spaßes halber mal ein mysql_fetch_array verwendet und die Variable $array für diesen Zweck definiert.
              Wenn ich nun eintrage $api->single_data_set[$array[10]]->username, dann erhalte ich die Meldung: undefined Offset 10 in ... (gleiche Line wie oben).

              Wichtig dabei ist, dass ich [10] gewählt habe, weil es die Spalte 10 in der Datenbank nicht gibt.

              Gebe ich aber eine existierende Spalte ein, egal ob 'ctcid' oder eine andere, dann erhalte ich grundsätzlich wieder die Meldung:
              Notice: Trying to get property of non-object in ... (gleiche Line wie oben).

              Im Umkehrschluss heißt das für mich, dass er die Datenbankabfrage sehr wohl erfolgreich meistert und die entsprechenden Objekte in dieser findet, diese bei der Abfrage
              in single_data_set[...] nicht definiert und daher nicht verarbeiten kann.

              Liege ich da ungefähr richtig?




              LG und vielen Dank für deine Zeit!

              Kommentar


              • #8
                "Leute.. probiert es doch selbst?!"
                Das Frage ich mich auch meistens, vorrangig bei Fragen die mit den offensichtlichsten Suchbegriffen, sofort als erstes Ergebnis das perfekte Ergebnis erzielen. Dann sinkt bei mir die Motivation zu antworten und statt den User anzumaulen, bekommt er einfach gar keine Antwort.. zumindest nicht von mir^^


                Also wenn ich das richtig verstanden habe, ist derzeit folgendes der Stand:

                PHP-Code:
                 echo $api->single_data_set[0]; // Gibt das Objekt wieder

                 
                echo $row->ctcid// Gibt 0 aus

                 
                echo $api->single_data_set[$row->ctcid]; // Gibt die Fehlermeldung aus

                 // Mit mysql_fetch_array bzw. mysql_fetch_assoc sollte es wie folgt aussehen

                 
                echo $api->single_data_set$row'ctcid' ] ]; 

                 
                // nebenbei, was kommt hierbei für eine Meldung? Fehlermeldung oder Ergebnisse?
                 
                var_dump$api->single_data_set[$row->ctcid] ); 
                Bezüglich Arrays kannst du dir folgendes merken:

                Einzelnde ' solltest du bei normalen Strings benutzen. Diese parsen aber keine Variablen, daher ist hier nicht notwendig, nur bei meinem mysql_fetch_array/assoc Beispiel, da "ctcid" in dem Fall der Key/Index-Name ist.

                Doppelte " kannst du wie die einzelnden verwenden, diese parsen jedoch diverse Zeichen und auch Variablen. Daher dürfte $row->single_data_set[ "row->name" ] funktionieren, jedoch ist dieser zusätzliche Schritt sinnlos und sollte vermieden werden.

                Bei Variablen verwendet man keine. Wenn man mehrere Variablen verbinden will, kommt einfach ein Punkt "." zum Einsatz, z.B. echo $id.$user;

                Also wenn ich das, wie oben beschrieben, richtig verstanden habe, dann ist das recht Merkwürdig...

                An dieser Stelle würde ich mal zur Sicherheit nachfragen, ob sich eventuell irgendwo Fehler eingeschlichen haben? Kleine Fehler können gerne mal untertauchen und für Stundenlange Nerven sorgen.

                Als Beispiel:
                - ...->single_data_set["row->ctcid"]->...(Mit " )
                - ...->single_data_set['row->ctcid']->...(Mit ' )
                - ...->single_data_set[row->ctcid]->... (Ohne ' oder ")
                Hier fehlt z.B. das Dollarzeichen für die Variable. Ich gehe zwar davon aus das der Fehler nur im Forum gemacht wurde, aber zur Sicherheit kann man ja mal nachfragen.

                Ansonsten würde ich vorschlagen sämtliche Inhalte nach jedem erdenklichen Schritt ausgeben zu lassen, sodass man die Fehlerquelle findet.
                Wir wissen zwar jetzt das es an der XML Ausgabe liegt, aber nicht was genau den Fehler auslöst.

                Zur Sicherheit schreibe ich mal noch etwas kleines zum Thema Scoping auf, eventuell ist da ein Fehler unterlaufen?

                PHP-Code:
                $public "Public Variable";

                while( {
                Bedingung} ){
                  
                $private "Private Variable";
                  echo 
                $public;
                }

                echo 
                $private
                Ausgabe:
                Code:
                Public Variable
                ** Hier die Fehlermeldung das die Variable $private nicht existiert, da diese nur innerhalb des Geltungsbereichs (Scope) vom "while" existiert.
                Lösung:
                PHP-Code:
                $private "";

                while( {
                Bedingung} ){
                    
                $private "Private Variable";
                }

                echo 
                $private
                Ausgabe:
                Code:
                Private Variable
                Ich warte mal deine Antwort ab, eventuell findest du ja bereits den Fehler.

                Abschließend zum Thema Coding Umgebung:

                Notepad++ ist zwar echt Fett, aber noch besser ist Sublime 2/3. Das unterstützt dich gleich 100 mal mehr und für die ersten wichtigsten Sachen, braucht man noch nicht mal eine große Anleitung über das Programm. Kannst einstellen das der dir die Syntax für PHP machen soll und sobald du dich an die Farben gewöhnt hast, wird dir das Syntax Highlighting enorm weiter helfen.

                Desweiteren soll das Programm "Brackets" von Adobe ziemlich gut sein, jedoch hatte ich noch keine Zeit das auszutesten. Da Adobe bisher ausschließlich hoch qualitative Lösungen angeboten hat, würde ich von einem echt fetten Programm ausgehen.

                Lg
                Spiegel Funktion Live: https://www.youtube.com/watch?v=JI3Df7-KFtw

                Kommentar


                • #9
                  Hallo Zorn

                  Ich habe nun auch noch einige Spielereien betrieben um Fehlerquellen auszusortieren, bin aber erst nach deiner Antwort wirklich weiter gekommen - Zumindest teilweise, was ich schon als großen Erfolg werte.


                  Also wenn ich das richtig verstanden habe, ist derzeit folgendes der Stand
                  Der von Dir aktuell genannte Stand ist absolut richtig.
                  Hinzufügen können wir noch die von Dir vorgeschlagenen Methoden:

                  mysql_fetch_assoc / mysql_fetch_array
                  PHP-Code:
                  echo $api->single_data_set[$row['ctcid']]; 
                  - Wenn ich $api mit einem fetch_assoc ansteuer, dann erhalte ich tatsächlich die IDs aus 'ctcid', allerdings nur die Einträge aus der Datenbank, nicht aus der XML-Datei.

                  Wenn ich dein Code-Snippet erweitere ( z.B.: echo $api->single_data_set[$row['ctcid']]->name ), dann erhalte ich lediglich wieder unsere übliche Fehlermeldung.

                  Er sagt mir immer und immer wieder, dass er nichts aus dem Objekt entnehmen könnte, was auf meine Anfrage zutreffen würde.

                  Das heißt unabhängig von dem ...->single_data_set sucht er nur noch in der Datenbank herum, statt sich auf die XML-Datei zu konzentrieren.

                  Mit fetch_array erhalte ich das ein absolut identisches Ergebnis wie bei fetch_assoc.



                  var_dump
                  PHP-Code:
                  var_dump($api->single_data_set[$row->ctcid]); 
                  Hier erhalte ich lediglich die Ausgabe NULL - Was für mich erstmal überraschend positiv war, da mir die NULL erstmal gesagt hat, dass eine weitere Angabe fehlt, die für die entsprechenden Informationen sorgt.

                  Aber auch hier:
                  Erweitere ich den String um ein ...->... ( z.B: var_dump( $api->single_data_set[$row->ctcid]->username ) ), dann erhalte ich wie gewohnt das mittlerweile etwas verhasste "Trying to get property of non-object in Line ...".



                  Fehlerquellen im Code

                  Hier fehlt z.B. das Dollarzeichen für die Variable. Ich gehe zwar davon aus das der Fehler nur im Forum gemacht wurde, aber zur Sicherheit kann man ja mal nachfragen.
                  Ich hatte die gestrige Nacht komplett durchgezecht um es doch noch irgendwie zu schaffen und hatte mir auch irgendwann gesagt: "Es reicht.., erstmal Abstand vom Code nehmen, bevor man den Wald vor lauter Bäumen nicht mehr sieht."

                  Als ich dann vorhin wieder rein geschaut habe sind mir soweit keine Fehler aufgefallen - Zwei Stunden später ebenfalls nicht.

                  Das kann natürlich auch an meinen aktuell noch sehr geringen PHP-Fähigkeiten liegen, aber die grundlegenden Probleme und üblichen Verdächtigen kann ich sicher ausschließen.

                  Die $-Zeichen waren übrigens nur im Forum nicht zu sehen..


                  Zur völligen Sicherheit hier aber nochmal mein (aktueller) Code:


                  API.php
                  PHP-Code:
                  <?php 

                      
                  /* 
                      
                      Diese Datei liest die unten angegebenen Variablen aus und fügt ihre Definitionen
                      der Linkabfrage der 'adivser-list.php' hinzu. 
                      
                      Die Logindaten entsprechenen denen auf www.clicktocall24.de.    
                      
                      */
                                      

                      
                  $api_username    'xxxxxxx';                // Adminname CTC24 
                      
                  $api_password    'xxxxxx';                                // Adminpasswort CTC24
                      
                      
                  $format     'xml';                        // XML, CSV oder JSON
                      
                  $function   'get';                        // GET oder SET wählbar
                      
                  $cprob      '1';                            // Wert muss '1' sein 
                      
                  $consult     'all';                        // All oder Beratername
                      

                      
                  $api            =    simplexml_load_file(rawurlencode('https://clicktocall24.de/admin/state_consctc24.php?' 'uctc24=' .    
                  $api_username '&pctc24=' $api_password '&function=' $function '&cons=' $consult '&format=' $format '&cons_props=' $cprob));

                      
                  $api_active    =    simplexml_load_file(rawurlencode('https://clicktocall24.de/admin/state_consctc24.php?' 'uctc24=' $api_username '&pctc24=' $api_password '&function=' $function '&cons=' $consult '&format=' $format));    

                  ?>

                  index.php
                  PHP-Code:
                  <?php
                      
                      $online    
                  =    mysql_query("SELECT * FROM account ORDER BY rand()"); /* WHERE userrole = '1' */ 
                      
                  $assoc     mysql_fetch_array($online);
                          
                          
                      while(
                  $row mysql_fetch_object($online)) {
                      
                          echo 
                  '<div class="adviser">';
                          echo 
                  '<div class="profile"><img src="img/adviser/1.jpg" width="100" height="120" alt=""/></div>';
                          echo 
                  '<div class="id">';
                          echo 
                  '<div class="name"><h2><a class="name" href="/berater/' $row->username '.php' '">' $row->username '</a></h2>' ' | ' $row->ctcid ' | </div>';
                          echo 
                  '<div class="info">' $row->prename ' ...' '</div>';
                          echo 
                  '</div>';
                          echo 
                  '<div class="call">';
                                      
                              echo 
                  '<img class="clickImg" id="ctc24show_' $row->prename '" alt="jetzt anrufen" src="' 'https://clicktocall24.de/images/jetzt_anrufen.png' '" />';
                              echo 
                  '<div id="DVctc24show_' $row->prename '" class="openbox obh1" style="z-index:1">';
                              echo 
                  '<div class="headSolImg">' '<img id="ctc24hide_' $row->prename '" width="15" height="15" alt="close" src="' 'https://clicktocall24.de/images/close.png' '" />' '</div>';
                              echo 
                  '<div style="text-align:center;">';
                              echo 
                  '<iframe id="ctc24iiframe_' $row->prename '" src="" frameborder="0" height="395" width="100%"></iframe></div></div>';
                                      
                          echo 
                  '</div>';
                          echo 
                  '<div class="conditions">*' var_dump$api->single_data_set[$row->ctcid]->username ) . ' €/ Minute <br> mobil ggf. abweichend</div>';
                          echo 
                  '<div class="like-result"><br><h3>' $row->ctcid '</h3>' '</div>';
                          echo 
                  '<div class="like-text"><br>zufriedene Kunden</div>';
                          echo 
                  '</div>';
                          
                      }    
                          
                  ?>

                  Deinen Ratschlag mit dem Scope kann ich offen gestanden noch nicht so recht nachvollziehen.
                  Die Logik leuchtet mir sofort ein - Und auch das Variablen nur innerhalb eines geschlossenen Bereichs funktionieren (z.B. wie bei Functions, oder eben While-Schleifen).

                  Wie Du oben anhand meines Quellcodes siehst ist die Variable $assoc überhalb des Geltungsbereichs von While, sie funktioniert aber einwandfrei.

                  Ebenso, wenn ich die Variable $assoc in den entsprechenden Geltungsbereich von While einfüge.

                  Die einzige Folge, die das hat, ist, dass sich $assoc nicht auf $online beziehen kann, so dass ich, wenn ich im Geltungsbereich von While arbeite, ein zusätzliches mysql_query einbinden muss. So bekommt $assoc Bezug zum Query und kann die Daten aus der Datenbank entnehmen.

                  An dem Umstand, dass $api->single_data_set[$assoc...]->username den Benutzernamen nicht aus der XML importiert, ändert das leider nichts.


                  PHP-Code:
                  <?php
                      
                      $online    
                  =    mysql_query("SELECT * FROM account ORDER BY rand()"); /* WHERE userrole = '1' */ 
                          
                          
                      
                  while($row mysql_fetch_object($online)) {
                      
                          
                  $asso    =    mysql_query("SELECT * FROM account ORDER BY rand()");
                          
                  $assoc     mysql_fetch_array($asso);
                      
                          echo 
                  '<div class="adviser">';
                          echo 
                  '<div class="profile"><img src="img/adviser/1.jpg" width="100" height="120" alt=""/></div>';
                          echo 
                  '<div class="id">';
                          echo 
                  '<div class="name"><h2><a class="name" href="/berater/' $row->username '.php' '">' $row->username '</a></h2>' ' | ' $row->ctcid ' | </div>';
                          echo 
                  '<div class="info">' $row->prename ' ...' '</div>';
                          echo 
                  '</div>';
                          echo 
                  '<div class="call">';
                                      
                              echo 
                  '<img class="clickImg" id="ctc24show_' $row->prename '" alt="jetzt anrufen" src="' 'https://clicktocall24.de/images/jetzt_anrufen.png' '" />';
                              echo 
                  '<div id="DVctc24show_' $row->prename '" class="openbox obh1" style="z-index:1">';
                              echo 
                  '<div class="headSolImg">' '<img id="ctc24hide_' $row->prename '" width="15" height="15" alt="close" src="' 'https://clicktocall24.de/images/close.png' '" />' '</div>';
                              echo 
                  '<div style="text-align:center;">';
                              echo 
                  '<iframe id="ctc24iiframe_' $row->prename '" src="" frameborder="0" height="395" width="100%"></iframe></div></div>';
                                      
                          echo 
                  '</div>';
                          echo 
                  '<div class="conditions">*' $api->single_data_set$assoc'ctcid' ] ]->username ' €/ Minute <br> mobil ggf. abweichend</div>';
                          echo 
                  '<div class="like-result"><br><h3>' $row->ctcid '</h3>' '</div>';
                          echo 
                  '<div class="like-text"><br>zufriedene Kunden</div>';
                          echo 
                  '</div>';
                          
                      }    
                          
                  ?>


                  Notepad++ ist zwar echt Fett, aber noch besser ist Sublime 2/3.
                  Notepad++ gefällt mir wirklich gut.
                  Ich habe mir aber direkt mal Sublime 2/3 heruntergeladen und muss sagen, dass mir das auch sehr gut gefällt und auch die Vorschau-Gifs mit der Autovervollständigung sehr attraktiv ausgesehen haben.

                  Nach dem wir das hier gemeistert haben werde ich mir Sublime direkt mal näher ansehen



                  Dir auch LG

                  Kommentar


                  • #10
                    Kurzer Nachtrag, nach dem ich nochmal ein wenig herum getüftelt habe.

                    Bei Code:
                    PHP-Code:
                    var_dump($row->ctcid
                    Erhalte ich lediglich folgende Ausgabe:
                    Code:
                    string(1) "1"

                    Bei der Ausgabe ist mir natürlich klar, dass ich nichts zurück bekomme, denn string(1) "1" ist nicht der Wert, der ausgegeben werden soll.
                    Der Wert, der gebraucht wird, muss als einfache Zahl dargestellt werden.

                    Mache ich das allerdings mit $row->ctcid ohne var_dump, dann erhalte ich zwar die Zahl als einzelne Ausgabe, bekomme aber den üblichen Fehler zurück.

                    Kommentar


                    • #11
                      Es wurde vermeintlich noch nicht gesagt, jedoch ist es ungut Passwörter via GET zu übergeben. Die Passwörter tauchen zumindest im Server-Log im Klartext auf, was sehr ungünstig ist. Zudem ermöglicht das Einbinden eines entfernten Bildes das Auslesen des Refferer.
                      [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

                      Kommentar


                      • #12
                        Hallo Christian,

                        danke für deine Antwort!

                        Das die Passwörter über GET sehr unsicher sind ist mir bekannt.

                        Leider habe ich die Wahl zwischen GET und POST nicht in der Hand, da mir der Anbieter dieser Schnittstelle nur diesen API-Link zur Verfügung stellt und hier ausschließlich mit der GET-Methode arbeitet.. Mir wäre eine vernünftige Alternative, wie ein API-Key oder ein Secret-Token auch wesentlich lieber..

                        Ob GET, POST oder Token: Es bringt aktuell leider alles nichts, wenn nichts funktioniert :/


                        - zon3y

                        Kommentar


                        • #13
                          Hallo Zon3y,

                          Mit fetch_array erhalte ich das ein absolut identisches Ergebnis wie bei fetch_assoc.
                          Jop, das liegt daran das diese "fast" das selbe machen und es eigentlich jedem selbst überlassen bleibt, welches man nimmt.

                          Der Unterschied ist, dass du bei mysql_fetch_array die Spalten auch per numerischen Wert erhalten kannst:

                          PHP-Code:
                          $sql $db->query( ... );
                          $row $sql->fetch();

                          echo 
                          $row]; // Damit liest er die 4. Spalte in der Tabelle aus 
                          Ich persönlich finde die Auswahl per numerischem Wert zerstört die Übersichtlichkeit. Wenn man mal schnell überfliegen will und da eine Stelle mit 5 sieht, dann wieder 8, dann 3.. ist das ziemlich nichts sagend, im Gegensatz zu "username", "birthdate" und "email".

                          Hier erhalte ich lediglich die Ausgabe NULL
                          Das ist bereits eine wichtige Information! Das heißt das ab dem Punkt der Wert leer ist und somit auch keine weitere Optionen möglich sind. Also sämtliche .. -> .. werden dann auch fehlschlagen, da kein Objekt existiert.

                          Es kommt mir vor, als würde er die Variable $api nicht kennen.

                          Hast du die Datei api.php in der index.php auch inkludiert?

                          Sprich:

                          PHP-Code:
                          include( 'app.php' ); 

                          Ansonsten das var_dump($row->ctcid) eine Zahl ausgibt, aber als String ist egal, die Variable funktioniert. (PHP macht auf unserer Coding-Ebene nur wenig mit Formaten. Du kannst checken, ob etwas den boolischen Regeln entspricht oder eine Zahl ist, aber sowas wie typecasting wird maximal an den Punkten verwendet, an denen wir kein Finger rühren)

                          Und zu guter Letzt: Dein Anbieter sollte wissen, dass https mittels Man-In-The-Middle austricksbar ist und somit auch nicht den perfekten Schutz bietet. Also kannst du maximal den Betreiber darauf aufmerksam machen, wenn er der Meinung ist dieses Risiko einzugehen, muss er mit den Konsequenzen leben.

                          Lg
                          Spiegel Funktion Live: https://www.youtube.com/watch?v=JI3Df7-KFtw

                          Kommentar


                          • #14
                            Hallo Zorn,

                            das NULL eine wichtige Information darstellt hatte ich mir wirklich sehnlichst erhofft und mich parallel zum Thread auch noch in var_dump sowie den Unterschied von assoc und array eingelesen.

                            Umso mehr ich lese, je mehr wird mir dieser Fehler hier zum absoluten Rätsel.

                            Es sind alle wichtigen Daten inkludiert.
                            In der index.php ist die includes.php eingebunden.

                            In dieser befindet sich dann über require_once der notwendige Kram:

                            PHP-Code:
                            require_once('_connect.php');        // Datenbankkonfigurationen
                            require_once('_functions.php');     // Funktionen
                            require_once('_api.php');        // API-Schnittstelle 
                            Anschließend ist in die index.php nach einigen DIV-Tabellen und dem vorherigen Head-Kram auch die user-list.php eingebunden, also die Datei, in der der Fehler verursacht wird.



                            Wie auf Seite 1, ganz unten, in meinem Code sehen kannst werden ja viele Abfragen gemacht.

                            Zum Beispiel:
                            PHP-Code:
                            $row->username
                            $row
                            ->prename
                            $row
                            ->ctcid 
                            ALLE diese Abfragen funktionieren einwandfrei. Das System gibt mir immer das richtige Ergebnis ohne Fehlermeldungen zurück.
                            Selbst wenn ich $row->ctcidirgendwo verwende und irgendwo anders dann $api->single_data_set[$row->ctcid]->name, bekomme ich vom reinen $row->ctcid das richtige Ergebnis als Echo zurück.

                            Gebe ich allerdings ausschließlich $api->single_data_set[$row->ctcid] ein, ohne darauffolgend noch etwas mit -> anzufordern, bekomme ich kein Ergebnis - Aber auch keine Fehlermeldung.



                            "Er kennt die Variable nicht"

                            So scheint es zumindest auszusehen.
                            Aus diesem Grunde habe ich die index.php mal völlig außer Acht gelassen und den Stylesheet und die includes.php direkt in die user-list.php eingebunden und diese auch im Browser aufgerufen.


                            Hier war das Ergebnis für meine Verhältnisse sehr überraschend, denn:

                            - Rufe ich die index.php mit der inkludierten user-list.php auf, dann erhalte ich die "Trying to get property of non Object"-Meldung zurück.

                            - Rufe ich die user-list.php direkt im Browser auf, dann erhalte ich ebenfalls "Trying to get property of non Object".

                            - Rufe ich dieser user-list.php direkt im Browser auf, sage ihm statt [$row->ctcid] jedoch einfach nur [0] oder [1], erhalte ich den Namen des Users 0/1.


                            Ergo: Er lädt die XML-Datei korrekt, denn mit festen Werten in [] kommt er super klar. Er lädt die Datenbank - Auch damit kommt er super klar.

                            Mit
                            PHP-Code:
                            var_dump$api->single_data_set[$row->ctcid] ) 
                            Erhalte ich im gleichen Moment aber wieder NULL zurück.
                            Gebe ich
                            PHP-Code:
                            var_dump$api->single_data_set[$row->ctcid]->username 
                            ein, dann erhalte ich ebenfalls NULL zurück.

                            Kommentar


                            • #15
                              Hallo Zon3y,

                              funktionieren folgende Variablen den richtig?

                              $ctc_id = 1;

                              $ctc_username = $api->single_data_set[$ctc_id]->name; /* Benutzername */
                              $ctc_price = $api->single_data_set[$ctc_id]->name; /* Preis (pro Minute) */
                              $ctc_phone = $api->single_data_set[$ctc_id]->destination; /* Zielrufnummer */
                              Ansonsten versuche mal bitte folgendes:

                              PHP-Code:
                              $api->single_data_set[(string)$row->ctcid]->username 
                              falls das nicht funktioniert folgendes:

                              PHP-Code:
                              $id $row->ctcid;

                              $api->single_data_set[$id]->username

                              var_dump
                              $id ); // nur um zu schauen, ob da der richtige Wert kommt
                              var_dump$api ); // und nochmal hier schauen was raus kommt 
                              und zu guter letzt als Versuch:

                              PHP-Code:
                              $userdaten = (object)$api->single_data_set[0];

                              var_dump$userdaten->username ); 

                              Also im großen und ganzen scheinen wir irgendwas zu übersehen, ich könnte noch anbieten das du mir die Dateien mal zukommen lässt, so kann ich gezielter nach dem Fehler suchen oder wir versuchen weiterhin hier langsam zum Ziel zu kommen..
                              Spiegel Funktion Live: https://www.youtube.com/watch?v=JI3Df7-KFtw

                              Kommentar

                              Lädt...
                              X