CSV mit PHP

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

  • CSV mit PHP

    Hallo liebe Community,

    ich habe mich nun ein paar Tage lang damit beschäftigt, wie es funktioniert, eine CSV-Datei in die Datenbank zu importieren und das mittels PHP. Hier erstmal mein Quellcode:

    PHP-Code:
    <?
    session_start();
    if(!session_is_registered(meinusername)){
    header("location:index.php");
    }
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Aktualisierung der Datenbank</title>
    <link rel="stylesheet" type="text/css" href="include/style.css">
    </head>
    <br><br><br>
    <table width="1000" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
    <tr>
    <td>
    <table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
    <?php
    include("include/config.php");

    $sqldel 'DELETE FROM `test`';
    $delete mysql_query($sqldel);

    $fcontents file("../".$erlaubte_datei);
    echo 
    "<tr><td colspan=\"3\"><b>MySQL lieferte folgendes Ergebnis: </b><br><br></td></tr>";
    for (
    $i 0$i sizeof($fcontents); $i++)
    {
        
    $line trim($fcontents[$i]);
        echo 
    "<tr bgcolor=\"#D3D3D3\"><td colspan=\"3\">$line <br></td></tr>";
        
    $arr explode(";" $line);
        
    #Wenn die CSV Datei TAB separiert ist, muss "," durch "/t" ersetzt werden
        
    $sql "insert into test values ('"implode("','",$arr) ."')";
        
    #TABELLENNAME durch den Namen der Tabelle in der Datenbank ersetzen
        
        
    mysql_query($sql);
        echo 
    "<tr bgcolor=\"#32CD32\"><td colspan=\"3\">" $sql "<br>\n</td></tr>";
        
        if(
    mysql_error())
        {
            echo 
    "<tr bgcolor=\"red\"><td colspan=\"3\">" mysql_error() . "<br>\n</td></tr>";
        }
    }
    ?>
    <tr><td colspan="3">
    <br><br><center>
    <form action="upload.php" method="post">
    <input type="submit" value="Zurück" class="eingabefeldgelb">
    </form><br><br>
    <form action="logout.php" method="post">
    <input type="submit" value="Ausloggen" class="eingabefeldrot">
    </form>
    </td></tr>
    <body>
    </body>
    </html>
    Das Problem, das mir erst im Nachhinein eingefallen ist, ist, dass das dieses Script nur Zeile für Zeile liest. Das habe ich mein Programmieren überhaupt net bedacht. Naja wie auch immer. Es tut seine Pflicht für eines meiner Arbeiten. Aber nun brauche ich genau das Selbe, welches Spalte für Spalte liest. (1 Spalte = 1 Datensatz)

    Ich hab keine Ahnung, wie ich mein Script umfunktionieren soll, damit dies klappt.
    Ich denke mal, dass das genannte Problem hier gelöst werde könnte:
    PHP-Code:
    $line trim($fcontents[$i]); 
    Ich danke euch allen für eure kommenden Antworten. Freue mich schon auf Lösungsvorschläge und auf eine schöne Diskussion.

    Mit freundlichen Grüßen

    sk4r
    Höre nie auf zu versuchen. Versuche nicht aufzuhören.

  • #2
    Re: CSV mit PHP

    Bitte lies die Regeln, und brich den Code um - vor deiner nächsten Antwort.

    Original geschrieben von sk4r
    Aber nun brauche ich genau das Selbe, welches Spalte für Spalte liest. (1 Spalte = 1 Datensatz)
    Was meinst du damit genau?

    Zeile #1 mit drei Spalten a, b, c - entspricht drei zu erstellenden Datensätzen mit den Inhalten von a, b und c?

    Oder möchtest du die Spalteninhalte aller Zeilen zu jeweils einem Datensatz zusammenfügen?


    Schon mal fgetcsv zum lesen aus CSV-Dateien angeschaut?
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      PHP-Code:
      $arr explode(";" $line); 
      scheint so, als wären die daten, die du in der csv hast schön mit ";" getrennt, und dass du jede zeile nacheinander in die db schreiben willst.

      schau dir doch mal folgendes an, vielleicht ists ja genau das, was du brauchst und du kannst auf den ganzen implode und explode kram verzichten (alternativ zu fgetcsv):



      PHP-Code:
      $query mysql_query("LOAD DATA INFILE {datei} FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n'"); 
      **********
      arkos
      **********

      Kommentar


      • #4
        <<dass das dieses Script nur Zeile für Zeile liest. Das habe ich mein Programmieren überhaupt net bedacht>>

        sowas habe ich noch nie gehört.
        PHP-Code:
        foreach($fcontents as $k=>$v){
        $fcontents[$k]=explode(";" $v);
        }

        function 
        getspaltenarray($index,$array){
        $arr=array();
        foreach(
        $array[$index] as $ding){$arr[]=$ding;}
        return 
        $arr;
        }
        //spalte 2
        print_r(getspaltenarray(1,$fcontents)); 
        Slava
        bituniverse.com

        Kommentar


        • #5
          Original geschrieben von Slava
          <<dass das dieses Script nur Zeile für Zeile liest. Das habe ich mein Programmieren überhaupt net bedacht>>

          sowas habe ich noch nie gehört.
          Was hast du noch nie gehört? Ich kanns dir gerne beweisen, dass dieses Script genau das macht, wie oben beschrieben. Sollte du es ausprobieren wollen, schicke ich dir gerne mein Script und dann kannst du mal schauen.

          Also nochmal für alle. Ich glaube ich habs falsch erklärt. Hab folgendes Problem.

          --------------------------------------------------------------------------------------
          |1|| || || || |
          | || || || || |
          | || || || || |
          | || || || || |
          | || || || || |
          | || || || || |
          | || || || || |
          | || || || || |
          | || || || || |
          | || || || || |
          | || || || || |
          | || || || || |
          | || || || || |
          | || || || || |
          | || || || || |
          | || || || || |
          | || || || || |
          | || || || || |
          | || || || || |
          Höre nie auf zu versuchen. Versuche nicht aufzuhören.

          Kommentar


          • #6
            Original geschrieben von sk4r

            --------------------------------------------------------------------------------------
            |1|| || || || |
            | || || || || |
            | || || || || |
            | || || || || |
            | || || || || |
            | || || || || |
            | || || || || |
            | || || || || |
            | || || || || |
            | || || || || |
            | || || || || |
            | || || || || |
            | || || || || |
            | || || || || |
            | || || || || |
            | || || || || |
            | || || || || |
            | || || || || |
            | || || || || | [/B]

            eins a erklärung

            dann mach doch

            "/(/"&"(/"/("&/(/"(/&""/(/"&"(/"/("&/(/"(/&""/(/"&"(/"/("&/(/"(/&""/(/"&"(/"/("&/(/"(/&""/(/"&"(/"/("&/(/"(/&"
            "/(/"&"(/"/("&/(/"(/&""/(/"&"(/"/("&/(/"(/&"
            "/(/"&"(/"/("&/(/"(/&"

            also erklärs noch mal bitte verständlich - oder ich bin gerade zu blöd dafür und entschuldige mich
            **********
            arkos
            **********

            Kommentar


            • #7
              soll das gepostete die csv datei sein??
              **********
              arkos
              **********

              Kommentar


              • #8
                Original geschrieben von Slava
                <<dass das dieses Script nur Zeile für Zeile liest. Das habe ich mein Programmieren überhaupt net bedacht>>

                sowas habe ich noch nie gehört.
                Was hast du noch nie gehört? Ich kanns dir gerne beweisen, dass dieses Script genau das macht, wie oben beschrieben. Sollte du es ausprobieren wollen, schicke ich dir gerne mein Script und dann kannst du mal schauen.

                Also nochmal für alle. Ich glaube ich habs falsch erklärt. Hab folgendes Problem.



                Mein Script liest von links nach rechts und das ist für den ein Datensatz (eine Zeile in SQL (text1= einleitung (erste spalte), text2= haupttext (zweite spalte), text3=schlussteil (dritte spalte)).
                So ich hoffe, dass ich einiger Maßen besser erklären konnte mit dem nicht so gut gelungenen Schaubild.

                Trotzdem danke für die schnell hilfe.
                Höre nie auf zu versuchen. Versuche nicht aufzuhören.

                Kommentar


                • #9
                  Original geschrieben von arkos
                  eins a erklärung

                  dann mach doch

                  "/(/"&"(/"/("&/(/"(/&""/(/"&"(/"/("&/(/"(/&""/(/"&"(/"/("&/(/"(/&""/(/"&"(/"/("&/(/"(/&""/(/"&"(/"/("&/(/"(/&"
                  "/(/"&"(/"/("&/(/"(/&""/(/"&"(/"/("&/(/"(/&"
                  "/(/"&"(/"/("&/(/"(/&"

                  also erklärs noch mal bitte verständlich - oder ich bin gerade zu blöd dafür und entschuldige mich
                  Nein tut mir sehr leid. Das war ein Fehler von meinem Browser.
                  Höre nie auf zu versuchen. Versuche nicht aufzuhören.

                  Kommentar


                  • #10
                    poste mal bitte eine beispielhafte csv datei (also den inhalt),
                    um den genauen aufbau mal zu sehen
                    **********
                    arkos
                    **********

                    Kommentar


                    • #11
                      Original geschrieben von sk4r
                      Hab folgendes Problem.

                      http://t.sunnynation.de/test/sql.jpg

                      Mein Script liest von links nach rechts und das ist für den ein Datensatz (eine Zeile in SQL (text1= einleitung (erste spalte), text2= haupttext (zweite spalte), text3=schlussteil (dritte spalte)).
                      Ja, schön - und?

                      Wenn es das ist, was du willst - dann hast du also gar kein Problem.

                      Wenn es nicht ist, was du willst - was zum Geier willst du dann?

                      Ich hatte dir explizite Rückfragen gestellt - wieso geht's du darauf nicht ein?
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar


                      • #12
                        So hier ist die CSV die ich mittel Excel exportiert habe.

                        CSV-DATEI
                        Höre nie auf zu versuchen. Versuche nicht aufzuhören.

                        Kommentar


                        • #13
                          Re: Re: CSV mit PHP

                          Original geschrieben von wahsaga
                          Bitte lies die Regeln, und brich den Code um - vor deiner nächsten Antwort.


                          Was meinst du damit genau?

                          Zeile #1 mit drei Spalten a, b, c - entspricht drei zu erstellenden Datensätzen mit den Inhalten von a, b und c?

                          Oder möchtest du die Spalteninhalte aller Zeilen zu jeweils einem Datensatz zusammenfügen?


                          Schon mal fgetcsv zum lesen aus CSV-Dateien angeschaut?


                          Ja, schön - und?

                          Wenn es das ist, was du willst - dann hast du also gar kein Problem.

                          Wenn es nicht ist, was du willst - was zum Geier willst du dann?

                          Ich hatte dir explizite Rückfragen gestellt - wieso geht's du darauf nicht ein?
                          Also ich bin kein kleines Kind. Ich bin nur nicht so fit in solchen Sachen. Das gibt euch aber noch lange nicht das Recht in der art und weise mit mir umzugehen. Ich kann gerne auf euer board verzichten. So ist das nicht. Das www ist voll von solchen boards. Ich bin nur hier, weil ich bisher immer meine fragen hier gepostet hab und antwort darauf bekommen habe.

                          nun zu deinen rückfragen. es wird horizontal in die datenbank gespeichert. ich brauche aber das script, welches vertikal die datensätze ablegt. jetzt sag mir, dass du das nicht verstanden hast.
                          Höre nie auf zu versuchen. Versuche nicht aufzuhören.

                          Kommentar


                          • #14
                            du hast die felder schon in excel mit ; getrennt, oder?

                            deshalb steht über den editor nun das drin:

                            "1;";"2;"
                            "blub tex;";"blubtex2;"
                            "fasdfad;";"fasdfad2;"
                            "dfaefdfasdf;";"dfaefdfasdf2;"

                            wenn du sie richtig speichers (aus excel raus) kommt sowas bei raus:

                            1;2
                            blub tex;blubtex2
                            fasdfad;fasdfad2
                            dfaefdfasdf;dfaefdfasdf2
                            asdf;asdf2
                            asdf;asdf2
                            fasdfad;fasdfad2
                            dfaefdfasdf;dfaefdfasdf2
                            asdf;asdf2


                            dann kannst du die nummer ganz einfach mit dem load data infile befehl, denn ich vorhin erwähnt zeile für zeile wie du es willst in die db hämmern.
                            **********
                            arkos
                            **********

                            Kommentar


                            • #15
                              ah sorry, hab das mit den spalten überlesen...

                              da muss ich noch mal drüber nachdenken und eine rauchen.
                              warum muss es vertikal sein (am rande gefragt) - wieviele flags hat dann deine db, oder wird die immer über "alter table" erweitert...

                              musst du nicht, aber erklär doch mal bitte warum du das so machst...
                              **********
                              arkos
                              **********

                              Kommentar

                              Lädt...
                              X