Ankündigung

Einklappen
Keine Ankündigung bisher.

XML auslesen und auswerten

Einklappen

Neue Werbung 2019

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

  • XML auslesen und auswerten

    Hallo ich habe ein Problem,
    ich hab ein Script geschrieben was eine XML datei auslesen und auswerten soll
    allerdings mach ich irgendwas falsch

    PHP-Code:
    <?php
    if (file_exists('update/uni.xml')) {
        
    $xml simplexml_load_file('update/uni.xml');

    $Datum date("d.m.Y");

    } else {
        exit(
    'Konnte uni.xml nicht öffnen.');
    }
    if(
    $xml) {
    include(
    'config/db.inc'); // Hier werden die Zugangsdaten importiert
        // Verbindung zum Datenbankserver herstellen
        
    $link=mysql_connect($dbserver$dbuser$dbpasswd);
        if (
    $link == FALSE)
        {
            echo 
    "<br><br><p><b>Leider kann keine Verbindung zur Datenbank hergestellt werden.
            Bitte versuchen Sie es später noch einmal.\n"
    ;
            echo 
    "</BODY></HTML>\n"// HTML Dokument abschliessen
            
    exit (); // PHP-Script beenden
        
    }

        
    // Datenbank auswaehlen
        
    $dblink=mysql_select_db($dbname);
        if (
    $dblink == FALSE)
        {
            echo 
    "<br><br><p><b>Leider kann die Datenbank nicht geöffnet werden.
            Bitte versuchen Sie es später noch einmal.\n"
    ;
            echo 
    "</BODY></HTML>\n"// HTML Dokument abschliessen
                
    exit (); // PHP-Script beenden
        
    }

        foreach(
    $xml->sector as $sektor) {
            foreach(
    $sektor->planet as $planet) {
                
    $planet['coords'] = sprintf("%06d"$planet['coords']);
                
    $planet['coords'] = sprintf("%s-%s-%s",
                
    substr($planet['coords'],0,2),
                
    substr($planet['coords'],2,2),
                
    substr($planet['coords'],4,2));
    // Prüfen ob der Planet einen User Name hat. Wenn ja wird die Zeile ausgeben, wenn nein, passiert nichts
    if(!empty($planet['user_name'])) {
    if(empty(
    $planet['alli_tag'])) { $planet['alli_tag'] = 'keine'; }
       echo 
    'Notiz=Keine Koordinaten=' $planet['coords'] . ' Spieler=' $planet['user_name'] . ' Allianz=' $planet['alli_tag'] . ' Datum=' $Datum '<br>';      
        
    $query1 'SELECT * FROM Uni1 WHERE Koordinaten like "'.$planet["coords"].'";';
        
    $result1 mysql_query($query1);
        if (
    $num) {
    $query2 'UPDATE Uni1 SET Spieler="' $planet['user_name'] . '",
           Allianz="' 
    $planet['alli_tag'] . '",
            Notiz="Keine",    
            Datum="'
    .$Datum.'"
            WHERE Koordinaten like "'
    .$planet["coords"].'";';
    $result2 mysql_query($query2);
    $query3 'UPDATE Uni1 SET Allianz="' $planet['alli_tag'] . '"
            WHERE Spieler like "'
    .$planet["user_name"].'";';
    $result3 mysql_query($query3);
            echo 
    "Datenbankeintrag aktualisiert!";
        } 
        else 
        { 
         
    $query4 'Insert into Uni1 SET Spieler="' $planet['user_name'] . '",
            Allianz="' 
    $planet['alli_tag'] . '",
            Notiz="Keine",    
            Datum="'
    .$Datum.'",
            Koordinaten="'
    .$planet["coords"].'";';
    $result4 mysql_query($query4);


            if (
    $result4)
            { 
                echo 
    "Spieler wurde erfolgreich aufgenommen.";
            }
            else
            { 
                echo 
    "Datenbankfehler! Spieler konnte nicht aufgenommen werden!<br>";
    echo 
    "query1 $query1 <br>";
    echo 
    "result1 $result1 <br>";
    echo 
    "query2 $query2 <br>";
    echo 
    "result2 $result2 <br>";
    echo 
    "query3 $query3 <br>";
    echo 
    "result3 $result3 <br>";
    echo 
    "query4 $query4 <br>";
    echo 
    "result4 $result4 <br>";
    echo 
    "num $num<br><br>";
            }

        } 





       }
        }
    }
    mysql_close();
    }
    ?>

    Code:
    Notiz=Keine Koordinaten=00-00-23 Spieler=Rhognal Allianz=IW Datum=21.05.2008
    Datenbankfehler! Spieler konnte nicht aufgenommen werden!
    query1 SELECT * FROM Uni1 WHERE Koordinaten like "00-00-23"; 
    result1 Resource id #5 
    query2  
    result2  
    query3  
    result3  
    query4 Insert into Uni1 SET Spieler="Rhognal",         Allianz="IW",         Notiz="Keine",             Datum="21.05.2008",         Koordinaten="00-00-23"; 
    result4  
    num 
    
    Notiz=Keine Koordinaten=00-00-26 Spieler=Rhognal Allianz=IW Datum=21.05.2008
    Datenbankfehler! Spieler konnte nicht aufgenommen werden!
    query1 SELECT * FROM Uni1 WHERE Koordinaten like "00-00-26"; 
    result1 Resource id #6 
    query2  
    result2  
    query3  
    result3  
    query4 Insert into Uni1 SET Spieler="Rhognal",         Allianz="IW",         Notiz="Keine",             Datum="21.05.2008",         Koordinaten="00-00-26"; 
    result4  
    num
    Weis jemand woran das liegt ?

  • #2
    "irgendwas falsch" achso und wir sollen jetzt raten was das heisst oder wie?

    Kommentar


    • #3
      Du solltest mal in deinem query " und ' (double quotes und single quotes)überprüfen

      Kommentar


      • #4
        Zitat von PeopleSaw Beitrag anzeigen
        Weis jemand woran das liegt ?
        Woran was liegt? Du hast ja nicht beschrieben was das Problem ist.

        Edit: Also das Verschieben scheint jetzt nicht so geklappt zu haben ..
        "[URL="http://www.youtube.com/watch?v=yMAa_t9k2VA&feature=youtu.be&t=25s"]Mein Name ist Lohse, ich kaufe hier ein.[/URL]"

        Kommentar


        • #5
          Das sieht mir jetzt auch etwas sehr kaputt aus.

          Kommentar


          • #6
            lol ähm hmm ich guck mal was sich da machen lässt...

            [edit]
            jetzt hab ich den einen post nochmal verschoben und er ist im nichts verschwunden oO

            Kommentar


            • #7
              include('config/db.inc'); // Hier werden die Zugangsdaten importiert
              Wenn .inc beim Webserver nicht mit PHP verknüpft ist, wird es vermutlich als Klartext zum Download ausgeliefert - mit samt den MySQL Zugangsdaten. Deshalb besser db.inc.php als Dateinamen verwenden.
              // Verbindung zum Datenbankserver herstellen
              $link=mysql_connect($dbserver, $dbuser, $dbpasswd);
              if ($link == FALSE)
              {
              echo "<br><br><p><b>Leider kann keine Verbindung zur Datenbank hergestellt werden.
              Bitte versuchen Sie es später noch einmal.\n";
              echo "</BODY></HTML>\n"; // HTML Dokument abschliessen
              exit (); // PHP-Script beenden
              }

              // Datenbank auswaehlen
              $dblink=mysql_select_db($dbname);
              if ($dblink == FALSE)
              {
              echo "<br><br><p><b>Leider kann die Datenbank nicht geöffnet werden.
              Bitte versuchen Sie es später noch einmal.\n";
              echo "</BODY></HTML>\n"; // HTML Dokument abschliessen
              exit (); // PHP-Script beenden
              }
              Verpack das doch gleich alles mit in der db.inc.php.
              $mysql = db_connect('datenbankname') und fertig. Vielleicht noch eine default-Datenbank für $link=db_connect(); Jedefnalls irgendetwas, damit Du den Code da an der Stelle los wirst.
              }

              }





              }
              }
              }
              mysql_close();
              }
              So etwas sollte man mE wenn möglich vermeiden. Du verwendest im Fehlerfall eh schon exit(). Dann zieh die Fehlerbehandlung einfach vor und handel dann "ungestört" den Regelfall ab.
              PHP-Code:
              if (!file_exists('update/uni.xml')) {
                exit(
              'Konnte uni.xml nicht öffnen.');
              }

              $xml simplexml_load_file('update/uni.xml');
              if(!
              $xml) {
                exit(
              'Konnte uni.xml nicht einlesen.');
              }

              $Datum date("d.m.Y"); 
              foreach($xml->sector as $sektor) {
              foreach($sektor->planet as $planet) {
              $planet['coords'] = sprintf("%06d", $planet['coords']);
              $planet['coords'] = sprintf("%s-%s-%s",
              substr($planet['coords'],0,2),
              substr($planet['coords'],2,2),
              substr($planet['coords'],4,2));
              // Prüfen ob der Planet einen User Name hat. Wenn ja wird die Zeile ausgeben, wenn nein, passiert nichts
              if(!empty($planet['user_name'])) {
              wenn nein, passiert nichts
              doch doch, da ist schon was passiert. Du hast die Koordinaten unnötigerweise aufbereitet.
              $planet['coords'] = sprintf("%s-%s-%s",
              Wenn Du die Koordinaten so in der Datenbank speicherst, kannst Du mit SQL effizient nur noch nach einzelnen gesamt Koordinaten suchen, nicht mehr nach "alle Planeten von Spieler X in den Galaxien 3 bis 9". Dafür brauchst Du die Komponenten einzeln.
              PHP-Code:
              foreach($xml->sector as $sektor) {
                  foreach(
              $sektor->planet as $planet) {
                      if(!empty(
              $planet['user_name'])) {
                          
              $coords str_split(sprintf("%06d"$planet['coords']), 2);
                          if(empty(
              $planet['alli_tag'])) { $planet['alli_tag'] = 'keine'; } 
              an der Stelle hast Du die Daten aufbereitet. Was danach kommt, dient der Speicherung. Und dafür ist es egal, wo die Daten herkommen oder wie sie aufbereitet wurden. Das würde ich in eine Funktion auslagern.
              PHP-Code:
              foreach($xml->sector as $sektor) {
                foreach(
              $sektor->planet as $planet) {
                  if(!empty(
              $planet['user_name']))
                  {
                    
              $coords str_split(sprintf("%06d"$planet['coords']), 2);
                    if(empty(
              $planet['alli_tag'])) { $planet['alli_tag'] = 'keine'; }
                    
              foo($mysql$coords$planet);
                  }
                }

              Und schon sieht es wesentlich übersichtlicher aus.

              Kommentar


              • #8
                Zitat von PeopleSaw Beitrag anzeigen
                allerdings mach ich irgendwas falsch
                Nein, du machst vieles falsch!
                1. Hast du mal die Forumsregeln nicht gelesen, oder mindestens nicht eingehalten.
                2. Du hast du keine konkrete Frage gestellt.
                3. Du machst SELECT-Abfrage, die du nie auswertest
                4. Du benutzst SELECT * FROM
                5. Wozu die Ausgabe von Datenbank-Resourcen ($resultx) gut sein soll, weiss ich auch nicht
                6. Du hast error_reporting nicht auf E_ALL gesetzt
                7. Du fragst mysql_error() nicht ab
                8. Einiges hat dir David schon gesagt
                Wenn du dann alle diese Punkte bereinigt hast, dann bist du sicher auch in der Lage, eine konkrete Frage zu stellen.
                Gruss
                L

                Kommentar

                Lädt...
                X