Ankündigung

Einklappen
Keine Ankündigung bisher.

csv datei einlesen

Einklappen

Neue Werbung 2019

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

  • csv datei einlesen

    wir haben eine kleine seite aller schulen von tirol. wir möchten gern die absolventen hier eintragen und administrieren um klassentreffen ermöglichen zu können.

    meine frage: ich habe eine excel datei mit folgenden spalten:
    vorname, nachname, klasse, jahrgang.

    könnt ihr mir einen tipp geben (kein script!) wie ich das realisieren könnte die datei mittels einer php seite in eine mysql datenbank zu lesen? später soll die datei dann wieder exportiert werden können. das ist nicht das problem. einfach die daten auslesen und mit einer while schleife in das textdocument lesen oder?

    aber wie könnte ich das machen dass ich die daten in die db bekomme? muss ich da für jede while schleife beim auslesen eine db entry machen?
    mfg Alex

  • #2
    http://de.php.net/manual/de/function.fgetcsv.php

    Und dann Zeile für Zeile einfügen, wo ist das Problem?

    Gruß
    phpfan

    Kommentar


    • #3
      PHP-Code:
      <?php
      $csv 
      file("datei.csv");
      $count count($csv);
      $sql "";
      for (
      $i 0$i $count$i++) { // oder $sql = '('.implode('), (', $csv).')';
        // *1
        
      $sql .= '('.$csv.'), ';
      }
      if (
      $count 0) {
        
      $sql substr($sql0, -2); // letzte komma abschneiden
      }
      mysql_query("INSERT INTO (vorname, nachname, klasse, jahrgang) VALUES $sql");
      ?>
      Du musst vorher im Excel dafür sorgen, dass die Ausgabe im CSV Komma-separiert und in einfachen Anführungszeichen steht.
      Ansonsten hier *1 ein str_replace einfügen.

      Hilfreiche Funktionen wären sonst explode(). Natürlich geht auch fgetcsv(), halte ich aber für unnötig.

      Kommentar


      • #4
        Zitat von Zergling
        Natürlich geht auch fgetcsv(), halte ich aber für unnötig.
        Würde ich auf jeden Fall der Funktion file vorziehen, denn bei großen CSV-Dateien kannst du mit file Probleme bekommen.

        Gruß
        phpfan

        Kommentar


        • #5
          Hmm der Arbeitsaufwand wird halt verdoppelt. Eine interne Schleife zum Einlesen, eine in PHP zum abarbeiten.
          Hast du Recht.

          Kommentar


          • #6
            Nimm doch phpMyAdmin

            Kommentar


            • #7
              ich danke euch erstmal f�r eure denkans�tze. hab das ganze jetzt so gel�st. was sagt ihr dazu?

              PHP-Code:
              <?php
              $handle 
              fopen("daten_orig.csv","r");
              $datensatz 0;
              while(
              $data fgetcsv($handle1000";")) {
                
              $spaltenanzahl count($data);
                
              $sql_start '';
                
              $sql_start.= 'INSERT INTO absolventen (nachname, 
                                                 vorname, 
                                                 anrede, 
                                                 klasse, 
                                                 abschluss, 
                                                 strasse, 
                                                 postleitzahl, 
                                                 ort, 
                                                 land, 
                                                 email, 
                                                 telefon, 
                                                 bemerkung, 
                                                 status) 
                                         VALUES ('
              ;
                
              $sql_values '';
                for(
              $spalte 0$spalte $spaltenanzahl$spalte++) {
                  
              $sql_values.= "'".$data[$spalte]."',";
                }
                
              $sql_values substr($sql_values0, -1);
                
              $sql_end ')';
                
              $datensatz++;
                
              $sql $sql_start.$sql_values.$sql_end;
                
              mysql_query(sql);
              }
              fclose ($handle);
              ?>
              mfg Alex

              Kommentar


              • #8
                Du brauchst nicht jedes mal ein Insert into, das geht auch so:
                Code:
                INSERT INTO `tabelle` 
                            ( `s1` , `s2` , `s3` , `s4`)
                VALUES 
                            ('$v1', '$v2', '$v3', '$v4'),
                            ('$v5', '$v6', '$v7', '$v8');
                Gruß
                phpfan

                Kommentar


                • #9
                  du meinst so?
                  PHP-Code:
                  <?php
                  $handle 
                  fopen("daten_orig.csv","r");
                  $datensatz 0;
                  $sql '';
                  $sql.= 'INSERT INTO absolventen (nachname,
                                                   vorname,
                                                   anrede,
                                                   klasse,
                                                   abschluss,
                                                   strasse,
                                                   postleitzahl,
                                                   ort,
                                                   land,
                                                   email,
                                                   telefon,
                                                   bemerkung,
                                                   status) VALUES '
                  ;
                  $sql_values '';
                  while(
                  $data fgetcsv($handle1000";")) {
                    
                  $spaltenanzahl count($data);
                    
                  $values '';
                    for(
                  $spalte 0$spalte $spaltenanzahl$spalte++) {
                      
                  $values.= "'".$data[$spalte]."',";
                    }
                    
                  $values substr($values0, -1);
                    
                  $values '('.$values.')
                  '
                  ;
                    
                  $datensatz++;
                    
                  $sql_values.= $values;
                  }
                  echo 
                  $sql.$sql_values;
                  fclose ($handle);
                  ?>
                  danke nochmal für eure hilfe. eine frage hätte ich noch...
                  jetzt wird ja immer auch die kopfzeile, sprich die spaltenbenennung im 1. datensatz mitgespeichert.
                  soll ich dann einfach eine mysql delete from anhängen um den zu löschen?
                  oder wie könnte ich das sonst lösen?
                  mfg Alex

                  Kommentar


                  • #10
                    Lass eine Variable bei jedem Durchlauf erhöhen und überspringe alle Anweisungen für den ersten Durchlauf.

                    Kommentar


                    • #11
                      also mit for() {} anstatt while() oder?
                      statt
                      Code:
                      while($data = fgetcsv($handle, 1000, ";")) {
                      so oder?
                      Code:
                      $data = fgetcsv($handle, 1000, ";");
                      $count = count($data);
                      for($i=0; $i < $count; $i++) {
                        if($i > 0) {
                          // jetzt wie oben
                        }
                      }
                      mfg Alex

                      Kommentar


                      • #12
                        Ja, zum Beispiel. Du könntest aber auch while benutzen und eine zusätzliche Variable definieren:
                        PHP-Code:
                        <?php
                            $i 
                        0;
                            while(...) {
                                if(++
                        $i 1) {
                                    
                        //  weitermachen
                                
                        }
                            }
                        ?>

                        Kommentar

                        Lädt...
                        X