Ergebnis 1 bis 2 von 2

Thema: PHP, SimpleXML - Import nach MySQL mit doppelten Node-Namen

  1. #1
    HTML Newbie
    Registriert seit
    14.08.2016
    Beiträge
    1
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard PHP, SimpleXML - Import nach MySQL mit doppelten Node-Namen

    Hallo Allerseits,
    ich habe da ein Problem, wo ich im Moment nicht weiterkomme. Alle Tutorials die ich bisher gefunden habe, haben mir nicht weitergeholfen. Vielleicht habe ich auch mit falschen Begriffen gesucht.

    Vielleicht kann mir hier jemand helfen.

    Ich importiere eine XML Datei in eine MySQL Tabelle.

    Die XML Datei hat folgende Struktur:

    Code:
    <amateures>
      <amateur>
        <id>
        <login>
        <figur>
        <vote_rating>
        <haarfarbe>
        <gewicht>
        <groesse>
        <plz>
        <sternzeichen>
        <vorlieben>
        <vorlieben_en>
        <uebermich>
        <uebermich_en>
        <geschlecht>
        <staat>
        <gebtag>
        <regdate>
        <urls>
          <profil>
          <register>
        </urls>
        <images>
          <overview>
          <overview_fsk16>
          <overview_big>
          <overview_fsk16_big>
        </images>
        <videos>
          <video>
            <title>
            <title_en>
            <beschreibung>
            <beschreibung_en>
            <playtime>
            <id>
            <img_fsk16>
            <img>
            <imgani>
            <videourl>
            <category>
            [...]
            <category>
          </video>
          <video>
            [...]
          </video>
        </videos>
      </amateur>
      <amateur>
        [...]
      </amateur>
    </amateures>
    Mein Script für den Import sieht wie folgt aus:

    Code:
    #!/usr/bin/php -n
    <?php
    function OpenDB () {
      $connect = mysqli_connect('localhost','#','#');
      if(!$connect)
        die ("Connection to SQL-Server failed!");
      $database = mysqli_select_db($connect, "DATENBANK");
      if(!$database)
        die ("Selection of Database failed!");
      return $connect;
    }
    $connect = OpenDB();
    
    $count = 0;
    $countnew = 0;
    $countvid = 0;
    $starttime = time();
    
    $xml = simplexml_load_file("DATEN.xml");
    
    if(!$xml) {
      $fsize = filesize("DATEN.xml");
      mail($email, "[parser.php] XML Error", "Fehler beim Einlesen der DATEN.xml ($fsize Bytes)!");
      die("XML Error\n\n");
    }
    
    $query = "update TABLE1 set deleted = 1";
    mysqli_query($connect, $query);
     
    $query = "delete from TABLE2";
    $res = mysqli_query($connect, $query);
     
    foreach ($xml->amateur as $amateur) {
      $count++;
      $amateur_id                 = $amateur->id;
      $amateur_login              = utf8_decode($amateur->login);
      $amateur_figur              = $amateur->figur;
      $amateur_vote_rating        = $amateur->vote_rating;
      $amateur_haarfarbe          = $amateur->haarfarbe;
      $amateur_gewicht            = $amateur->gewicht;
      $amateur_groesse            = $amateur->groesse;
      $amateur_plz                = $amateur->plz;
      $amateur_sternzeichen       = $amateur->sternzeichen;
      $amateur_vorlieben          = $amateur->vorlieben;
      $amateur_vorlieben_en       = $amateur->vorlieben_en;
      $amateur_uebermich          = $amateur->uebermich;
      $amateur_uebermich_en       = $amateur->uebermich_en;
      $amateur_geschlecht         = $amateur->geschlecht;
      $amateur_staat              = $amateur->staat;
      $amateur_gebtag             = $amateur->gebtag;
      $amateur_regdate            = $amateur->regdate;
    
      foreach ($amateur->urls as $url) {
        $amateur_profil             = $url->profil;
        $amateur_register           = $url->register;
      }
    
      foreach ($amateur->images as $image) {
        $amateur_overview           = $image->overview;
        $amateur_overview_fsk16     = $image->overview_fsk16;
        $amateur_overview_big       = $image->overview_big;
        $amateur_overview_fsk16_big = $image->overview_fsk16_big;
      }
    
      $amateur_vorlieben          = mysqli_escape_string($connect, $amateur_vorlieben);
      $amateur_vorlieben_en       = mysqli_escape_string($connect, $amateur_vorlieben_en);
      $amateur_uebermich          = mysqli_escape_string($connect, $amateur_uebermich);
      $amateur_uebermich_en       = mysqli_escape_string($connect, $amateur_uebermich_en);
    
      $query = "select * from amateur where amateur_id = $amateur_id";
      $res = mysqli_query($connect, $query);
    
      if(mysqli_num_rows($res) == 0) {
        $countnew++;
        $query = "insert into amateur (amateur_id, amateur_login, amateur_figur, amateur_vote_rating, amateur_haarfarbe, amateur_gewicht, amateur_groesse, amateur_plz, amateur_sternzeichen, amateur_vorlieben, amateur_vorlieben_en, amateur_uebermich, amateur_uebermich_en, amateur_geschlecht, amateur_staat, amateur_gebtag, amateur_regdate, amateur_profil, amateur_register, amateur_overview, amateur_overview_fsk16, amateur_overview_big, amateur_overview_fsk16_big) values ($amateur_id, '$amateur_login', '$amateur_figur', '$amateur_vote_rating', '$amateur_haarfarbe', '$amateur_gewicht', '$amateur_groesse', '$amateur_plz', '$amateur_sternzeichen', '$amateur_vorlieben', '$amateur_vorlieben_en', '$amateur_uebermich', '$amateur_uebermich_en', '$amateur_geschlecht', '$amateur_staat', '$amateur_gebtag', '$amateur_regdate', '$amateur_profil', '$amateur_register', '$amateur_overview', '$amateur_overview_fsk16', '$amateur_overview_big', '$amateur_overview_fsk16_big')";
        $res = mysqli_query($connect, $query);
      } else {
        $query = "update amateur set amateur_login='$amateur_login', amateur_figur='$amateur_figur', amateur_vote_rating='$amateur_vote_rating', amateur_haarfarbe='$amateur_haarfarbe', amateur_gewicht='$amateur_gewicht', amateur_groesse='$amateur_groesse', amateur_plz='$amateur_plz', amateur_sternzeichen='$amateur_sternzeichen', amateur_vorlieben='$amateur_vorlieben', amateur_vorlieben_en='$amateur_vorlieben_en', amateur_uebermich='$amateur_uebermich', amateur_uebermich_en='$amateur_uebermich_en', amateur_geschlecht='$amateur_geschlecht', amateur_staat='$amateur_staat', amateur_gebtag='$amateur_gebtag', amateur_regdate='$amateur_regdate', amateur_profil='$amateur_profil', amateur_register='$amateur_register', amateur_overview='$amateur_overview', amateur_overview_fsk16='$amateur_overview_fsk16', amateur_overview_big='$amateur_overview_big', amateur_overview_fsk16_big='$amateur_overview_fsk16_big', deleted=0 where amateur_id = $amateur_id";
        $res = mysqli_query($connect, $query);
        if(!$res)
          die($query);
      }
     
      foreach ($amateur->videos as $videos) {
        foreach ($videos->video as $video) {
          $vids_title         = $video->title;
          $vids_title_en      = $video->title_en;
          $vids_beschreibung  = $video->beschreibung;
          $vids_beschreibung_en = $video->beschreibung_en;
          $vids_playtime        = $video->playtime;
          $vids_id              = $video->id;
          $vids_img_fsk16       = $video->img_fsk16;
          $vids_img             = $video->img;
          $vids_imgani          = $video->imgani;
          $vids_videourl        = $video->videourl;
          $vids_category        = $video->category;
    
          $query = "insert into amateur_vid (amateur_id, vids_title, vids_title_en, vids_beschreibung, vids_beschreibung_en, vids_playtime, vids_id, vids_img_fsk16, vids_img, vids_imgani, vids_videourl, vids_category) values ($amateur_id, '$vids_title', '$vids_title_en', '$vids_beschreibung', '$vids_beschreibung_en', '$vids_playtime', '$vids_id', '$vids_img_fsk16', '$vids_img', '$vids_imgani', '$vids_videourl', '$vids_category')";
          $res = mysqli_query($connect, $query);
          $setid = mysqli_insert_id($connect);
          $countvid++;
        }
      }
    
    }
    
    $query = "delete from TABLE1 where deleted = 1";
    mysqli_query($connect, $query);
    ?>
    Soweit funktioniert auch alles einwandfrei.

    Nur bei den Kategorien (<category>) hapert es. Mit meinem Script wird immer nur eine Kategorie in das entsprechende Feld eingelesen.

    Ich bräuchte eine Lösung, die mir alle Kategorien - möglichst wo doppelte Kategorien aussortiert sind - in eine separate Tabelle schreibt. Alternativ würde mir auch eine Lösung reichen, wo alle Kategorien einer Sektion kommagetrennt in das entsprechende Feld geschrieben wird.


    Kann mir da jemand helfen?
    Auch wenn es nicht üblich ist, fertige Lösungen zu präsentieren, so würde ich mich über eine funkionsfähige Lösung sehr freuen.


    VG
    Torsten
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!

  2. #2
    Moderator Avatar von Arne Drews
    Registriert seit
    20.01.2016
    Ort
    Friedrichstadt, NF
    Beiträge
    1.231
    Danke
    21
    Bekam 120 mal "Danke" in 119 Postings

    Standard AW: PHP, SimpleXML - Import nach MySQL mit doppelten Node-Namen

    Hallo,

    Du solltest mal den ErrorReport einschalten und Debugging betreiben.
    SimpleXML ist sehr strikt und verzeiht nicht viel. Deine XML ist nicht konform und wird vermutlich deshalb gar nicht verarbeitet.

    Ich würde das ganze mal mit DOMDocument und XPath probieren, das ist toleranter und ebenso einfach.
    Hier ein kleines verständliches Tutorial: http://www.php-rocks.de/thema/74-ein...-domxpath.html

Ähnliche Themen

  1. nach csv-import werden einige Artikel mit 0 Euro ausgewiesen
    Von Hilf im Forum Computer - Internet Forum
    Antworten: 10
    Letzter Beitrag: 13.03.2013, 22:35
  2. Ähnliche Namen nach Muster
    Von lukasn im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 2
    Letzter Beitrag: 07.12.2012, 16:31
  3. Fehlertext nach dem Import!?
    Von hans2000 im Forum Zope & Plone - das deutsche Hilfeforum
    Antworten: 3
    Letzter Beitrag: 15.03.2011, 00:20
  4. Import in mysql tabelle per .sql file per php
    Von .Shanii im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 3
    Letzter Beitrag: 13.04.2010, 10:43
  5. Lieder nach Namen sotieren
    Von Manni0780 im Forum Computer - Internet Forum
    Antworten: 5
    Letzter Beitrag: 26.10.2007, 09:29

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •