Ankündigung

Einklappen
Keine Ankündigung bisher.

Import von User via PDO und CSV-Upload

Einklappen

Neue Werbung 2019

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

  • Import von User via PDO und CSV-Upload

    Hallo liebe PHP-Community,

    leider plagt mich gerade der Import von Usern. Ich möchte gerne eine CSV hochladen und dann pro Zeile einen INSERT ausführen. Später sollen fehlende Attribute dynamisch gesetzt werden (folgt noch). Aktuell klappt weder der CSV Import, noch das Anlegen der User (wenn das CSV manuell abgelegt wurde). Die CSV Datei soll nur temp. vorhanden bleiben und abschließend verfallen.

    Der Aufbau der CSV sieht so aus, also pro Zeile ein Datensatz, Attribute mit Komma getrennt, Datensatz mit Semikolon getrennt

    HTML-Code:
    WERT_1, WERT_2, WERT_3;
    WERT_1, WERT_2, WERT_3;
    WERT_1, WERT_2, WERT_3;
    Fehlermeldung
    Beim Ausführen erhalte ich jedoch folgende Fehlermeldung, kann diese aber nicht nachvollziehen Problem scheint in der "Execute"-Zeile zu bestehen. Auch scheint die Zuordnung der Attribute (Spalten) nicht ganz zu klappen.

    HTML-Code:
    Fatal error: Uncaught PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'Email' cannot be null in XXX.php:XX Stack trace: #0 XXX.php(XX): PDOStatement->execute() #1 {main} thrown in XXX.php on line XX

    Mein PHP Script
    PHP-Code:

        <?php

        
    if (!empty($_POST['submitimport'])) {

            
    $db getDB();
            
    $db->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);

            
    // get the csv file and open it up
            
    $file $_FILES['uploadedfile']['tmp_name'];
            if((
    $handle fopen($file'r')) !== false)
            {                                          
                
    // loop through the file line-by-line
                
    while(($data fgetcsv($handle1000',')) !== false)
                {
                    
    $db getDB();
                    
    $stmt $db->prepare("INSERT INTO users (Firstname, Name, Email) VALUES (:data0, :data1, :data2)");  
                    
    $stmt->bindParam('data0'$data[0], PDO::PARAM_STR);
                    
    $stmt->bindParam('data1'$data[1], PDO::PARAM_STR);
                    
    $stmt->bindParam('data2'$data[2], PDO::PARAM_STR);

                    
    $stmt->execute();  

                }
                
    fclose($handle);

            }

        }
        
    ?>

    Mein HTML Formular für den Upload
    HTML-Code:
       <form enctype="multipart/form-data" method="post" action="">
    
            <fieldset >
                <input name="uploadedfile" type="file">                                                            
            </fieldset>
    
            <fieldset>
                <input type="submit" name="submitimport" value="Submit"/>
            </fieldset>
        </form>

    Hoffe ihr könnt einem Anfänger aus der Patsche helfen!

    Danke vorab für eure hilfreichen Kommentare

    Gruß Frundaa

  • #2
    Willst du das standardmäßig über ein Form machen, oder darf es auch anders gehen? z. B. PHPmyadmin oder direkt in SQL mit LOCAL DATA INFILE?

    Kommentar


    • #3
      Deine CSV ist kommagetrennt, du gibst aber im Code Semikolon an.
      sorry, shift-taste kaputt

      Kommentar


      • #4
        Deine CSV ist genaugenommen durch Komma und Leerzeichen getrennt. Und am Zeilenende ist noch ein Semikolon. Deine Werte musst du noch nach dem Einlesen noch von führenden Leerzeichen und dem Semikolon bereinigen.

        Kommentar


        • #5
          Hallo zusammen,

          grundsätzlich soll der Import vorerst über File Upload und CSV erfolgen. In Zukunft ist ein Import über LDAP/Exchange angedacht.

          Ich habe im Snippet oben des Semikolon durch das Komma ersetzt. Allerdings wen das Script ausgeführt wird, landen dennoch keine Datensätze in der DB?

          Gibt es hierzu noch ein weiteres Feedback, was eine mögliche Fehlerquelle betrifft?

          EDIT: Der Import funktioniert nun, das SQL Statement war falsch. So sollte das nun funktionieren ...

          EDIT 2: Der Aufbau der CSV sieht nun so aus

          HTML-Code:
          Max,Muster,WertXZ
          Mia,Muster,WertXYZ
          usw.
          Hoffe die Lösung hilft dem ein oder anderen beim import via PDO und CSV

          Danke und Gruß Frundaa

          Kommentar


          • #6
            Integrity constraint violation:

            Um den Fehler zu beheben braucht es
            erstens die korrekten Daten und keine Scheinwerte und
            zweitens das Script(hast du ja oben bereits zur Verfügung gestellt) und
            drittens ein SQL Dump deiner DB damit man die Struktur kennt.

            Nur wenn alles vorliegt kann man sich auf Fehlersuche begeben.

            siehe auch den Abschnitt https://php-de.github.io/#debugging in der Wissenssamlung.

            Kommentar


            • #7
              protestix Danke für deinen Beitrag. Das Problem wurde jedoch bereits gelöst. Siehe hierzu meinen editierten Kommentar

              Kommentar

              Lädt...
              X