Ankündigung

Einklappen
Keine Ankündigung bisher.

XML Datei auslesen und in 2. Datei was herraussuchen und in Datenbank abspeichern

Einklappen

Neue Werbung 2019

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

  • XML Datei auslesen und in 2. Datei was herraussuchen und in Datenbank abspeichern

    Hallo
    Habe darüber im Internet nichts gefunden.

    Meine scripte:
    PHP-Code:
    <?php
    $verbindung 
    mysql_connect ("localhost" "max" "max")
        or die (
    "Fehler im System");
    $anlegen "CREATE DATABASE monat";

        
    $Anleg mysql_query($anlegen$verbindung);
    if(! 
    $Anleg )
        {
          die(
    'Konnte Datenbank nicht erstellen: ' mysql_error());
        }


    mysql_close($verbindung);
            
            
    $xmlFile 'Monatssummen.xml';

    set_time_limit(150);

    if (
    file_exists($xmlFile)) {
        
    $xml simplexml_load_file($xmlFile);
        foreach ( 
    $xml->Monatssummen as $summe )  
            {   unset(
    $Preis);
                
    $Name $summe->Name;
                
    $Besitzer $summe->Besitzer;
                
    $Monat $summe->Monat;
                
    $Futtersorte $summe->Futtersorte;
                
    $Menge $summe->Menge;
                
    $Vorrat $summe->Vorrat_x0020_Heute;
                
    $Rest $summe->Rest;
                
    $Besuche $summe->Besuche;
            
            
    $verbindung mysql_connect ("localhost" "max" "max")
            or die (
    "Fehler im System");

            
    mysql_select_db("monat")
            or die (
    "Verbindung zur Datenbank war nicht m&ouml;glich....<br>");

            
    /*------------------------------ erstellen*/
            
    $create "    CREATE TABLE $Name (
                        id INT(6) NOT NULL AUTO_INCREMENT ,
                        Name VARCHAR(30) NOT NULL,
                        Besitzer VARCHAR(30) NOT NULL,
                        Monat VARCHAR(30) NOT NULL,
                        Sattelschrank VARCHAR(30) NOT NULL,
                        Sonstiges VARCHAR(30) NOT NULL,
                        Getraenke VARCHAR(30) NOT NULL,
                        Futtersorte VARCHAR(30) NOT NULL,
                        Menge VARCHAR(30) NOT NULL,
                        Preis VARCHAR(30) NOT NULL,
                        Vorrat VARCHAR(30) NOT NULL,
                        Rest VARCHAR(30) NOT NULL,
                        Besuche VARCHAR(30) NOT NULL,
                        submission_date DATE,
                        PRIMARY KEY ( id )
                    );"
    ;

            
    $ergebnisC mysql_query($create$verbindung);
            

            
    /*------------------------------ Preis ausrechnen*/

        
            
    $P_Hafer=0.00056;
            
    $P_Alternativ=0.00094;
            
    $P_NHC=0.00700;
            
    $P_Mifu=0.00200;
            
    $P_Leinkuchen=0.00156;
            
    $P_Dinkel=0.00092;

            if (
    $Futtersorte == "Hafer") {$Preis = ($Menge*$P_Hafer) ;}
            elseif (
    $Futtersorte == "Mineral NHC") {$Preis = ($Menge*$P_NHC) ;}
            elseif (
    $Futtersorte == "Mineral Mühldorfner") {$Preis = ($Menge*$P_Mifu) ;}
            elseif (
    $Futtersorte == "N. alternativ") {$Preis = ($Menge*$P_Alternativ) ;}
            elseif (
    $Futtersorte == "Leinkuchen") {$Preis = ($Menge*$P_Leinkuchen) ;}
            elseif (
    $Futtersorte == "Dinkel") {$Preis = ($Menge*$P_Dinkel) ;}
            else { 
    $Preis=0;}
            

            
    /*------------------------------ eintragen*/

    $Sonstiges " " ;
    $Getraenke " " ;
            
    $insert "INSERT INTO $Name (Name, Besitzer, Monat, Sattelschrank, Sonstiges, Getraenke, Futtersorte, Menge, Preis, Vorrat, Rest, Besuche) VALUES ('$Name', '$Besitzer', '$Monat', '$Sattelschrank', '$Sonstiges', '$Getraenke', '$Futtersorte', '$Menge', '$Preis', '$Vorrat', '$Rest', '$Besuche')";
            
    $ergebnisI mysql_query($insert$verbindung);
            if(! 
    $ergebnisI )
            {
              die(
    'Konnte nichts in Tabelle eingefügt werden: ' mysql_error());
            }

        




            
    mysql_close($verbindung);

        
            } echo 
    "Erfolgreich eingetragen";  
    } else { echo 
    "Datei $xmlFile kann nicht geöffnet werden.";}
    ?>
    Code:
    <?xml version="1.0" standalone="yes"?>
    
    <DocumentElement>
        <Monatssummen>
        <Name>Alex</Name>
        <Besitzer>Max</Besitzer>
        <Monat>März</Monat>
        <Futtersorte>Hafer</Futtersorte>
        <Menge>10724</Menge>
        <Vorrat_x0020_Heute>11172</Vorrat_x0020_Heute>
        <Rest>448</Rest>
        <Besuche>414</Besuche>
      </Monatssummen>
      <Monatssummen>
        <Name>Alex</Name>
        <Besitzer>Max</Besitzer>
        <Monat>März</Monat>
        <Futtersorte>Heu</Futtersorte>
        <Menge>2345</Menge>
        <Vorrat_x0020_Heute>2850</Vorrat_x0020_Heute>
        <Rest>505</Rest>
        <Besuche>247</Besuche>
      </Monatssummen>
    ...
    </DocumentElement>
    soweit noch alles ok

    nun will ich aber $Name in einem 2. XML Document suchen und dem zugehörigen Wert im Sattelschrank tag zuweisen

    Code:
    <?xml version="1.0" standalone="yes"?>
    
    <DocumentElement>
        <Row>
           <Name>Alex</Name>
           <Sattelschrank>2</Sattelschrank>
        </Row>    
        <Row>
            <Name>Peter</Name>
            <Sattelschrank>1</Sattelschrank>
        </Row>
    ...
    </DocumentElement>
    PHP-Code:
    <?php
    $verbindung 
    mysql_connect ("localhost" "max" "max")
        or die (
    "Fehler im System");
    $anlegen "CREATE DATABASE monat";

        
    $Anleg mysql_query($anlegen$verbindung);
    if(! 
    $Anleg )
        {
          die(
    'Konnte Datenbank nicht erstellen: ' mysql_error());
        }


    mysql_close($verbindung);
            
            
    $xmlFile 'Monatssummen.xml';

    set_time_limit(150);

    if (
    file_exists($xmlFile)) {
        
    $xml simplexml_load_file($xmlFile);
        foreach ( 
    $xml->Monatssummen as $summe )  
            {   unset(
    $Preis);
                
    $Name $summe->Name;
                
    $Besitzer $summe->Besitzer;
                
    $Monat $summe->Monat;
                
    $Futtersorte $summe->Futtersorte;
                
    $Menge $summe->Menge;
                
    $Vorrat $summe->Vorrat_x0020_Heute;
                
    $Rest $summe->Rest;
                
    $Besuche $summe->Besuche;
                
        
    /*$xml2 = simplexml_load_file('Sattelschrank.xml');
        foreach ( $xml2->Row as $zeile )  
            {  
                $Name2 = $zeile->Name;
                $Sattelschrank2 = $zeile->Sattelschrank;
                
             if(eregi($Name, $Name2)) { $Sattelschrank = $Sattelschrank2 ;} */
            
            
    $verbindung mysql_connect ("localhost" "max" "max")
            or die (
    "Fehler im System");

            
    mysql_select_db("monat")
            or die (
    "Verbindung zur Datenbank war nicht m&ouml;glich....<br>");

            
    /*------------------------------ erstellen*/
            
    $create "    CREATE TABLE $Name (
                        id INT(6) NOT NULL AUTO_INCREMENT ,
                        Name VARCHAR(30) NOT NULL,
                        Besitzer VARCHAR(30) NOT NULL,
                        Monat VARCHAR(30) NOT NULL,
                        Sattelschrank VARCHAR(30) NOT NULL,
                        Sonstiges VARCHAR(30) NOT NULL,
                        Getraenke VARCHAR(30) NOT NULL,
                        Futtersorte VARCHAR(30) NOT NULL,
                        Menge VARCHAR(30) NOT NULL,
                        Preis VARCHAR(30) NOT NULL,
                        Vorrat VARCHAR(30) NOT NULL,
                        Rest VARCHAR(30) NOT NULL,
                        Besuche VARCHAR(30) NOT NULL,
                        submission_date DATE,
                        PRIMARY KEY ( id )
                    );"
    ;

            
    $ergebnisC mysql_query($create$verbindung);
            

            
    /*------------------------------ Preis ausrechnen*/

        
            
    $P_Hafer=0.00056;
            
    $P_Alternativ=0.00094;
            
    $P_NHC=0.00700;
            
    $P_Mifu=0.00200;
            
    $P_Leinkuchen=0.00156;
            
    $P_Dinkel=0.00092;

            if (
    $Futtersorte == "Hafer") {$Preis = ($Menge*$P_Hafer) ;}
            elseif (
    $Futtersorte == "Mineral NHC") {$Preis = ($Menge*$P_NHC) ;}
            elseif (
    $Futtersorte == "Mineral Mühldorfner") {$Preis = ($Menge*$P_Mifu) ;}
            elseif (
    $Futtersorte == "N. alternativ") {$Preis = ($Menge*$P_Alternativ) ;}
            elseif (
    $Futtersorte == "Leinkuchen") {$Preis = ($Menge*$P_Leinkuchen) ;}
            elseif (
    $Futtersorte == "Dinkel") {$Preis = ($Menge*$P_Dinkel) ;}
            else { 
    $Preis=0;}
            

            
    /*------------------------------ eintragen*/

    $Sonstiges " " ;
    $Getraenke " " ;
            
    $insert "INSERT INTO $Name (Name, Besitzer, Monat, Sattelschrank, Sonstiges, Getraenke, Futtersorte, Menge, Preis, Vorrat, Rest, Besuche) VALUES ('$Name', '$Besitzer', '$Monat', '$Sattelschrank', '$Sonstiges', '$Getraenke', '$Futtersorte', '$Menge', '$Preis', '$Vorrat', '$Rest', '$Besuche')";
            
    $ergebnisI mysql_query($insert$verbindung);
            if(! 
    $ergebnisI )
            {
              die(
    'Konnte nichts in Tabelle eingefügt werden: ' mysql_error());
            }

        




            
    mysql_close($verbindung);

            
    //}
            
    } echo "Erfolgreich eingetragen";  
    } else { echo 
    "Datei $xmlFile kann nicht geöffnet werden.";}
    ?>
    Hab das in Kommentar eingefügt


    Nun ist aber irgendwo ein Fehler, da mir der Code über die normale Laufzeit weitaus mehr zeit braucht. (150 reichen nicht)
    Hängt auch vielleicht damit zusammen, dass er mir pro Pferd nur noch die erste Futtersorte wiederholt einträgt in die Datenbank.


    Ich hoffe ihr könnt mir helfen.
    Im Vorraus schon einmal Danke
    Max

  • #2
    Hallo!

    Habe darüber im Internet nichts gefunden.
    Hier - wie du deine Fehler am besten findest:

    http://php-de.github.io/jumpto/leitfaden/
    http://php-de.github.io/jumpto/sql/

    Weiters:

    - Die mysql Erweiterung ist veraltet, wird bald nicht mehr funktionieren, nutze PDO oder mysqli stattdessen
    http://php-de.github.io/jumpto/faq/#deprecated-mysql
    http://php-de.github.io/jumpto/pdo/ (PDO)


    - Du versuchst im Script jedes mal die DB(!) monat zu erstellen? Absicht?

    - Warum öffnest und schliesst du die Verbindung mehrmals im Script?

    - So wie ich das sehe verstößt du gegen die Normalisierungsregeln, also dein DB-Design ist nicht korrekt. CREATE TABLE $Name. Machst du für jeden Benutzer eine eigene Tabelle? Dann ist das auf jeden Fall nicht korrekt. Eine DB ist kein Excel. Schau mal hier: http://www.peterkropff.de/site/mysql/normalisierung.htm

    LG

    Kommentar


    • #3
      Danke für die schnelle Antwort
      Also ich bin meinem Latein am Ende was die Fehlersuche angeht.
      werde mich mal in den Seiten von dir reinlesen müssen.
      Danke damit schonmal

      mit dem mysqli oder PDO muss ich mich ebenfalls reinlesen müssen
      danke ebenfalls
      Welche vor und nachteile haben sie?

      Ja ich erstelle jedesmal eine neue datenbank da ich es Später automatisiert für jeden Monat machen will

      Ist mir auch schon aufgefallen dass ich öffne und schliesse :/
      aber wenn ich sie durchlaufen lasse kommt ein fehler hinzu.

      Kann sein aber ich finde so habe ich diese Inhalte schön verschachtelt und kann sie bequem herauslesen
      (siehe Bild)

      Und eigentlich bräuchte ich nur eine schnellere Lösung oder sogar eine andere, die mir 2 große XML Dokumente problemlos "öffnet"


      Danke
      max

      Kommentar

      Lädt...
      X