Ankündigung

Einklappen
Keine Ankündigung bisher.

xml-Inhalt mit getParameter() vergleichen

Einklappen

Neue Werbung 2019

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

  • xml-Inhalt mit getParameter() vergleichen

    Hallo zusammen,

    ich habe mich hier neu angemeldet, weil ich mit einem Problem nicht weiterkomme und auf eure Hilfe hoffe.

    Ich habe eine xml-Datei, die wie folgt aussieht

    Code:
    <list>
    <record>
    <name>Jan</name>
    <id>D9FC5B73A8D78FAD</id>
    </record>
    <record>
    <name>Norbert</name>
    <id>AA942AB2BFA6EBDA</id>
    </record>
    <record>
    <name>Jürgen</name>
    <id>9BE40CEE5B0EEE14</id>
    </record>
    <record>
    <name>Benedikt</name>
    <id>A96B65A721E561E1</id>
    </record>
    <record>
    <name>Kai</name>
    <id>C86A7EE3D8EF0B55</id>
    </record>
    </list>
    Ich rufe ein php-Script mit einem getParameter auf, z.B. example.org/script.php?id=D9FC5B73A8D78FAD

    Das Script soll die xml-Datei einlesen und prüfen, ob die id mit einem Namen verknüpft ist. Wenn ja soll Sie den dazugehörigen Namen ausgeben, wenn nicht soll sie einen entsprechenden Text ausgeben.

    Ich bin noch hziemlicher PHP-Anfänger, habe schon einen php-Kurs gemacht, leider wurde SimpleXML und XPath dort nicht behandelt.

    Momentan sieht mein Script so aus:

    PHP-Code:
    <?php
    $ticketid 
    htmlspecialchars($_GET["id"]);
    $xml_file simplexml_load_file("https://bit.ly/2S3F4cW");
    $result $xml_file->xpath("record/id");
    //Nun folgt mehr Wunsch als Wirklichkeit :-)
      
    if $id=$ticketid
        
    echo "Der Name ist {$name}"
      
    } else {
        echo 
    "Name nicht gefunden"
      
    }
    ?>
    Ich hoffe mein Anliegen wird aus dem Script deutlich.
    Das getParamaet in eine Variable speichern und die XML einlesen sollte klappen.
    Leider weiss ich nicht wie ich $ticketid und die id aus dem xml vergleichen und den dazugehörigen Namen ausgeben kann.

    Über eure Hilfe würde ich mich sehr freuen.

    Vielen Dank und viele Grüße


  • #2
    Du kannst gucken ob ein Knoten mit einem bestimmten Text vorhanden ist

    PHP-Code:
    $result1 $xml_file->xpath('//id[text()="9BE40CEE5B0EEE14"]');
    $result2 $xml_file->xpath('//id[text()="12345"]');
    var_dump($result1);
    var_dump($result2);
    if(
    $result1){ echo 'gefunden 1'; }
    if(
    $result2){ echo 'gefunden 2'; } 
    [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
      Damit kann geprüft werden ob irgendwo eine bestimmte id mit dem Inhalt vorhanden ist. Er möchte aber den Namen zur id haben. Vorab dazu mal die Testdaten formatiert:

      PHP-Code:
      <?xml version="1.0"?>
      <list>
        <record>
          <name>Jan</name>
          <id>D9FC5B73A8D78FAD</id>
        </record>
        <record>
          <name>Norbert</name>
          <id>AA942AB2BFA6EBDA</id>
        </record>
        <record>
          <name>Jürgen</name>
          <id>9BE40CEE5B0EEE14</id>
        </record>
        <record>
          <name>Benedikt</name>
          <id>A96B65A721E561E1</id>
        </record>
        <record>
          <name>Kai</name>
          <id>C86A7EE3D8EF0B55</id>
        </record>
      </list>
      Wir wollen den name aus einem Element record mit der id = "9BE40CEE5B0EEE14" ermitteln.

      PHP-Code:
      $nodes $xml->xpath('//record[id="9BE40CEE5B0EEE14"]/name'); 
      Der var_dump($nodes) liefert:
      PHP-Code:
      array(1) {
        [
      0]=>
        
      object(SimpleXMLElement)#2 (1) {
          
      [0]=>
          
      string(7"Jürgen"
        
      }

      Den XPath-String must du mit deiner Variable $ticketid aus $_GET zusammenbauen. Nicht jedoch ohne die Eingabe zu prüfen. htmlspecialchars ist dafür nicht geeignet und hat an dieser Stelle nichts zu suchen.

      So, fritt , jetzt bist du wieder am Zug.

      Kommentar


      • #4
        Hallo zusammen, chorn und jspit vielen Dank für eure Antworten!

        ich bin ein ganz kleines Stück weiter, mit
        PHP-Code:
        $ticketid $_GET['id'];
        $xml simplexml_load_file("https://bit.ly/2S3F4cW");
        $result $xml->xpath('/list/record/name');
        while(list( , 
        $node) = each($result)) {
            echo 
        $node;

        bekomme ich immerhin alle Namen ausgegeben.
        Ich schaffe es nur nicht die id_url mit der id des Namens zu vergleichen und beides in eine Variable zu speichern.

        Die Ausgabe sollte dann doch mit
        PHP-Code:
        if (strcmp($ticketid$id) !== 0) {
          echo 
        "Die ID ist falsch";
        } else {
            echo 
        "Die ID gehört zu {$Name}";

        funktionieren, oder?

        Wie stelle ich das an..?

        Vielen Dank und viele Grüße

        fritt

        Kommentar


        • #5
          Du musst da nichts vergleichen, du suchst dir den Knoten wie jspit das gezeigt hat, der Code war doch schon fast fertig, bis auf die ID und das IF.
          [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


          • #6
            Ich will dir mal ein wenig auf die Sprünge helfen

            PHP-Code:
            <?php
            // Fehler abschalten
            libxml_use_internal_errors(true);

            $out "nicht vorhanden";

            if ( isset(
            $_GET['id']) ){

                
            $xml simplexml_load_file("https://bit.ly/2S3F4cW");

                
            $nodes $xml->xpath("//record[id='{$_GET['id']}']");  

                if ( !empty(
            $nodes[0]) ) $out $nodes[0]->name;
            }

            echo 
            htmlspecialchars($out);
            ?>
            Wenn du mal ein var_dump auf $nodes machst, siehst du das du ein Array zurückbekommst, wenn der Parameter id vorhanden ist.
            Das wird abgefragt und darauf auf name zugegriffen, das kannnst du auch mal auf id ändern, damit dir das klarer wird, was dort passiert.
            $out dürfte klar sein und der Rest auch.

            Kommentar


            • #7
              Hallo zusammen,

              chorn und protestix : Vielen Dank für eure Antworten und die Hilfe!

              Ich muss mich entschuldigen, dass ich erst jetzt anworte. Ich habe diesen Thread abonniert und auch die Mail zur Registrierungsbestätigung bekommen. Daher hatte ich gedacht auch eine Mail bei einer Antwort zu bekommen und nicht mehr in den Thread geschaut.

              Das Script funktioniert super, alleine wäre ich nicht drauf gekommen. Ich merke gerade, dass mein php-Kurs doch ehr oberflächlich gewesen ist. Könnt Ihr mir einen "vernünftigen" (Online)-php-Kurs empfehlen?

              Ich wollte auch noch erwähnen, dass ich mit dem Script kein Geld verdiene. Für einen kleinen Sportverein, in dessen Vorstand ich tätig bin, habe ich damit ein Zutrittskontrollsystem umgesetzt.


              Vielen, vielen Dank nochmal und viele Grüße


              Kommentar


              • #8
                Hallo zusammen,

                ich krame den Thread nochmal raus, weil mir noch etwas aufgefallen ist.

                Das Script

                PHP-Code:
                <?php
                // Fehler abschalten
                libxml_use_internal_errors(true);

                $out "nicht vorhanden";

                if ( isset(
                $_GET['id']) ){

                    
                $xml simplexml_load_file("https://bit.ly/2S3F4cW");

                    
                $nodes $xml->xpath("//record[id='{$_GET['id']}']");  

                    if ( !empty(
                $nodes[0]) ) $out $nodes[0]->name;
                }

                echo 
                htmlspecialchars($out);
                ?>
                scheint nur auf Homepages ohne https zu funktionieren.

                Ich hatte es auf einer Subdomain, die nur mit http arbeitet eingesetzt, dort funktionierte es super. Wenn ich es jetzt im Domain-root einsetze, wo von http auf https umgeleitet wird, funktioniert es nicht mehr.


                Kann mir jemand sagen wie ich das Schript anpassen muss?


                Über einen Tipp würde ich mich sehr freuen.

                Vielen Dank und viele Grüße

                Kommentar


                • #9
                  Das hier
                  PHP-Code:
                  $xml simplexml_load_file("https://bit.ly/2S3F4cW"); 
                  funktioniert in meinem PHP-Fiddle (localhost) ohne Probleme.
                  Funktioniert nicht war noch nie eine gute Fehlerbeschreibung. Aktiviere das Error-Reporting oder schaue in deine Error-Logs und kopiere die komplette Fehlerausgabe in deine Antwort.

                  Kommentar


                  • #10
                    Der Fehler ist gefunden: allow_url_fopen war deaktiviert.

                    Kommentar

                    Lädt...
                    X