csv nach mysql??

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

  • csv nach mysql??

    Bin seit Tagen an dieser Aufgabe am verzweifeln! Kann mir bitte wer helfen?!

    Will eine csv Datei nach mysql importieren - per Scriptund nicht per dump o.ä., ich später nur einzelne Felder der csv importieren möchte und per schleife da die csv später verdammt lang wird...

    So sieht mein Script jetzt aus:

    <html>
    <head>
    <title>test</title>
    </head>
    <body>
    <?php
    $dateiname="beispiel.csv";
    $datei=fopen($dateiname,"r");
    $daten=fread($datei,filesize($dateiname));
    fclose($datei);

    $datensaetze=explode("\n",$daten);

    for($i=0;$i<sizeof($datensaetze);$i++) {
    $datenfeld[$i]=explode(";",$datensaetze[$i]);
    }



    $dbHost = "localhost";
    $dbUser = "root";
    $dbPass = "";
    $dbName = "test";

    $connect = mysql_connect($dbHost, $dbUser, $dbPass) or die("Verbindung zum Server nicht hergestellt!<br>");
    $selectDB = mysql_select_db($dbName) or die("Konnte die Datenbank <b>$dbName</b> nicht auswählen");



    for($i=0;$i<sizeof($datensaetze);$i++) {
    if($datensaetze[$i] != "") {

    mysql_query("INSERT INTO testing (id, name1, name2, name3, name4, name5, name6) VALUES('$datenfeld[$i][0]','$datenfeld[$i][1]','$datenfeld[$i][2]','$datenfeld[$i][3]','$datenfeld[$i][4]','$datenfeld[$i][5]','$datenfeld[$i][6]')");

    }
    }

    mysql_close();

    ?>


    </body>
    </html>

    So sieht meine csv aus:

    1;kraut;ist;gut;für;die;seele;root00
    2;topf;mit;kraut;und;rueben;zahl;root01
    3;gewusst;wie;ohne;wenn;und;aber;root02
    4;der;landwirt;schlägt;den;guten;knecht;root03
    5;frieden;für;alle;freiheit;für;mich;root04
    6;die;fliege;weiß;wie;es;geht;root05
    7;vögel;die;FLIEGEN;beißen;sehr;selten;root06
    8;gut;besser;günther;er;gewinnt;immer;root07
    9;wer;kennt;das;problem;des;denkens;root08
    10;wer;überlegt;sich;solche;blöden;platzhalter;root09


    Und so die MySQL Tabelle nach dem anwenden:

    id name1 name2 name3 name4 name5 name6
    Array[0] Array[1] Array[2] Array[3] Array[4] Array[5] Array[6]

    Das heißt er schrebt nur eine zeile in die Datenbank und die Arrayvariablen werden auch nicht verarbeitet, wer weiß was ich da falsch mache???

  • #2
    wenn du shell zugriff hast gehts auch einfacher:

    load data infile "PFAD ZUR DATEI" into table TABELLE
    fields terminated by ';' enclosed by '"';


    mfg
    Skrok

    Kommentar


    • #3
      Original geschrieben von Skrok
      wenn du shell zugriff hast gehts auch einfacher:
      geht auch ohne shellzugriff.

      ist ja schliesslich ein sql-command.

      csv hochladen, dann ist sie auf dem server und dann LOAD ... machen.

      tipp: schaue dir mal an, wie es phpmyadmin macht. da kannst du notfalls auch abkupfern....
      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


      Kommentar


      • #4
        Und wie sag ich ihm welches feld der csv zu welchem feld der sql tabelle gehört?

        Gibt es keine Möglichkeit, den import via script zu realisieren???

        Kommentar


        • #5
          1) ein feld nach dem anderen. du musst also in der csv alle felder drinnen haben.

          2) geht auch. musst du nur erstellen.

          - lade csv
          - trenne beim trenner
          - gib an, welches feld wohin in die DB soll (muss in deinem script passieren)
          - mache INSERT in die DB


          ---
          mach kann auch beim sql-import felder angeben. musst du mal bei www.mysql.com suchen
          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


          Kommentar


          • #6
            Ich habe vollen root zugriff auf den server...
            Kannst du mir die Parameter zur spalten auswahl (csv & MySQl) nennen,
            hab von SQL/debian/linux nicht alzu viel ahnung...

            Kommentar


            • #7
              welchen teil von ....
              Original geschrieben von Abraxax
              mach kann auch beim sql-import felder angeben. musst du mal bei www.mysql.com suchen
              ... verstehst du nicht?
              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


              Kommentar


              • #8
                @Abraxax:

                Ja, die Überlegungen sind ja nicht schlecht, nur krieg ich's nicht hin, was würdest Du anders machen bei Script bzw. wo is mein Denkfehler??

                Kommentar


                • #9
                  schaue, dass in der csv die daten so sind, wie die reihenfolge in der tabelle.

                  wenn du die csv nicht ändern kannst, änder die reihenfolge der felder in der tabelle.

                  schaue bei phpmyadmin nach, wie der das macht. davon kannst du auch noch lernen.
                  INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                  Kommentar


                  • #10
                    Falls jmd die Lösung interessiert...

                    Man beachte die Änderung in mysql_query("INSERT INTO .....

                    PHP-Code:
                    <html>
                    <head>
                    <title>test</title>
                    </head>
                    <body>
                    <?php
                    $dateiname
                    ="beispiel.csv";
                    $datei=fopen($dateiname,"r");
                    $daten=fread($datei,filesize($dateiname));
                    fclose($datei);

                    $datensaetze=explode("\n",$daten);

                    for(
                    $i=0;$i<sizeof($datensaetze);$i++) {
                         
                    $datenfeld[$i]=explode(";",$datensaetze[$i]);
                         }

                    ?>

                    <table border="2">

                    <?php
                    for($i=0;$i<sizeof($datensaetze);$i++) {
                    if(
                    $datensaetze[$i] != "") {
                    ?>

                     <tr>
                     <td nowrap><? echo $datenfeld[$i][0] ?></td>
                     <td nowrap><? echo $datenfeld[$i][1] ?></td>
                     <td nowrap><? echo $datenfeld[$i][2] ?></td>
                     <td nowrap><? echo $datenfeld[$i][3] ?></td>
                     <td nowrap><? echo $datenfeld[$i][4] ?></td>
                     <td nowrap><? echo $datenfeld[$i][5] ?></td>
                     <td nowrap><? echo $datenfeld[$i][6] ?></td>
                     </tr>

                    <?php
                     
                    }
                     }
                    ?>

                    </table>

                    <?
                    $dbHost = "localhost";
                    $dbUser = "root";
                    $dbPass = "";
                    $dbName = "test";

                    $connect = mysql_connect($dbHost, $dbUser, $dbPass) or die("Verbindung zum Server nicht hergestellt!<br>");
                    $selectDB = mysql_select_db($dbName) or die("Konnte die Datenbank <b>$dbName</b> nicht auswählen");

                    for($i=0;$i<sizeof($datensaetze);$i++) {
                         $datenfeld[$i]=explode(";",$datensaetze[$i]);


                    mysql_query("INSERT INTO testing (id, name1, name2, name3, name4, name5, name6) VALUES('".$datenfeld[$i][0]."','".$datenfeld[$i][1]."','".$datenfeld[$i][2]."','".$datenfeld[$i][3]."','".$datenfeld[$i][4]."','".$datenfeld[$i][5]."','".$datenfeld[$i][6]."')");



                     }

                    mysql_close();

                    ?>

                    EDIT:
                    php.tags ergänzt. damit kann man das bunt lesen...
                    Abraxax

                    Zuletzt geändert von Abraxax; 27.03.2003, 13:20.

                    Kommentar


                    • #11
                      klappt jetzt alles, oder hast du noch ne frage?
                      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                      Kommentar


                      • #12
                        zu dieser Thematik hätte ich noch eine Frage.

                        folgendes Script funktioniert nicht, Werte werden nicht in die Datenbank eingetragen.

                        PHP-Code:
                        <?

                        $datei=fopen($file,"rb");
                        $daten=fread($datei,filesize($file));
                        fclose($datei);

                        $datensaetze=explode("\n",$daten);
                        for($i=0;$i<sizeof($datensaetze);$i++) 
                            {
                             $datenfeld[$i]=explode(";",$datensaetze[$i]);
                        mysql_query("INSERT INTO Sportplan (Sparte, Wday, Start, Stop, Ort, Leitung, Phalter1, Phalter2, Phalter3,
                         Phalter4) VALUES('".$datenfeld[$i][0]."','".$datenfeld[$i][1]."','".$datenfeld[$i][2]."'
                        ,'".$datenfeld[$i][3]."','".$datenfeld[$i][4]."'
                        ,'".$datenfeld[$i][5]."','".$datenfeld[$i][6]."')");            
                            }
                        ?>

                        die csv wird vie datei upload ($file) eingelesen, liegt hier vielleicht der fehler?

                        und ja, der mysql connect besteht

                        Kommentar


                        • #13
                          Original geschrieben von nicker
                          ...funktioniert nicht,
                          neue Fehlermeldung von PHP? welche PHP-Version hast du denn? Bei mir kommt so 'ne Meldung bisher noch nicht!
                          PHP-Code:
                          <?
                          ...
                          mysql_query("INSERT INTO Sportplan (Sparte, Wday, Start, Stop, Ort, Leitung, Phalter1, Phalter2, Phalter3,
                           Phalter4) VALUES('".$datenfeld[$i][0]."','".$datenfeld[$i][1]."','".$datenfeld[$i][2]."'
                          ,'".$datenfeld[$i][3]."','".$datenfeld[$i][4]."'
                          ,'".$datenfeld[$i][5]."','".$datenfeld[$i][6]."')");
                          1. zähle mal die Anzahl der Spalten und der Werte
                          2. mysql_error() ist dein Freund.

                          Kommentar

                          Lädt...
                          X