Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] csv Datei über Formular hochladen, bearbeiten und in DB importieren

Einklappen

Neue Werbung 2019

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

  • [Erledigt] csv Datei über Formular hochladen, bearbeiten und in DB importieren

    Hallo,

    die Schritte sind im Titel beschrieben:

    1. csv Datei über Formular hochladen
    2. csv Datei bearbeiten -> sprich eine Spalte einfügen mit immer dem selben Wert, der im Formular festgelegt wird
    3. Daten importieren

    Mein Code:

    PHP-Code:
        <h1>Import</h1>

        <br />

    <?
      if(isset($_POST['check'])){
        $check = $_POST['check'];
      }else{
        $check = "0";
      }

    /* Wenn check == 0 --> Uploadmenue zeigen */
    if($check == 0){
    ?>

        <table style="width:500px;" class="cmsView" cellpadding="3" cellspacing="1" border="0">
        <tr><td class="bg_box_0" colspan="2">CSV-Import:</td></tr>
        <tr>
            <td style="width:150px;" class="bg_box_1">Shop:</td>
            <td class="bg_box_2">
                <!-- BEGIN Upload File -->
                <form action="import.php" method="post" enctype="multipart/form-data">
                
                <input type="hidden"     name="check"    value="1" />

                <select name="shop" size="1">

                    <option value="Shop">Shop</option>

                </select>
            </td>
        </tr>

        <tr>
            <td class="bg_box_1">CSV-Datei ausw&auml;hlen:</td>
            <td class="bg_box_2">
                <input type="File" name="csv_import" value="" />
            </td>
        </tr>
        <tr>
            <td class="bg_box_1">&nbsp;</td>
            <td class="bg_box_2"">
                <input type="submit" value="CSV-Daten jetzt einlesen" />
                </form>
                <!-- END Upload File -->
            </td>
        </tr>
        </table>


    <?php

    }
    /* Wenn check == 0 AND SHOP == empty AND Datei == empty --> Fehlermeldung */
    if($check == 1  AND (empty($_POST['shop']) OR empty($_POST['csv_import']))){
    ?>

     FEHLERMELDUNG: Es wurde entweder kein Shop eingetragen oder Sie haben keine Datei eingespielt !!!

    <?php
    }
    /* Wenn check == 1 --> Upload starten */
    if($check == 1  AND (!empty($_POST['shop']) OR !empty($_POST['csv_import']))){

    include(
    '../inc/mysql.inc.php');
    $db mysql_connect($sql['host'],$sql['uid'],$sql['psw']) or die ("Keine Verbindung zu der Datenbank möglich.");
    mysql_select_db($sql['db'], $db);


    $fp fopen($_POST['csv_import'], "r");


    define("Shop"$_POST['shop']);
    define("ProductId"0);
    define("ProgramId"1);
    define("MerchantProductNumber"2);
    define("ProductName"3);
    define("ProductPrice"4);
    define("ProductLongDescription"5);
    define("Status"6);
    define("MerchantProductCategory"7);
    define("ZanoxProductCategory"8);
    define("ImageSmallURL"9);
    define("ImageMediumURL"10);
    define("ProductManufacturerBrand"11);
    define("ZanoxProductLink"12);
    define("ZanoxProductCategoryNumber"13);
    define("MerchantProductCategoryNumber"14);
    define("DeliveryTime"15);
    define("TermsOfContract"16);
    define("ProductEAN"17);
    define("ProductPriceOld"18);
    define("CurrencySymbolOfPrice"19);
    define("UpdateDate"20);
    define("ValidFromDate"21);
    define("ValidToDate"22);
    define("ProductShortDescription"23);
    define("ImageLargeURL"24);


     
    $query "INSERT INTO xxx
                     (Shop,
                     ProductId,
                     ProgramId,
                     MerchantProductNumber,
                     ProductName,
                     ProductPrice,
                     ProductLongDescription,
                     Status,
                     MerchantProductCategory,
                     ZanoxProductCategory,
                     ImageSmallURL,
                     ImageMediumURL,
                     ProductManufacturerBrand,
                     ZanoxProductLink,
                     ZanoxProductCategoryNumber,
                     MerchantProductCategoryNumber,
                     DeliveryTime,
                     TermsOfContract,
                     ProductEAN,
                     ProductPriceOld,
                     CurrencySymbolOfPrice,
                     UpdateDate,
                     ValidFromDate,
                     ValidToDate,
                     ProductShortDescription,
                     ImageLargeURL) VALUES "
    ;
     
    $cc=0;
    while( !
    feof($fp) ) {
      
    $zeile fgetcsv  $fp  4096 ";"  );
      if (
    $cc>0) {

      
    $values " ('".mysql_real_escape_string($zeile[Shop])."',
                    '"
    .mysql_real_escape_string($zeile[ProductId])."',
                    '"
    .mysql_real_escape_string($zeile[ProgramId])."',
                    '"
    .mysql_real_escape_string($zeile[MerchantProductNumber])."',
                    '"
    .mysql_real_escape_string($zeile[ProductName])."',
                    '"
    .mysql_real_escape_string($zeile[ProductPrice])."',
                    '"
    .mysql_real_escape_string($zeile[ProductLongDescription])."',
                    '"
    .mysql_real_escape_string($zeile[Status])."',
                    '"
    .mysql_real_escape_string($zeile[MerchantProductCategory])."',
                    '"
    .mysql_real_escape_string($zeile[ZanoxProductCategory])."',
                    '"
    .mysql_real_escape_string($zeile[ImageSmallURL])."',
                    '"
    .mysql_real_escape_string($zeile[ImageMediumURL])."',
                    '"
    .mysql_real_escape_string($zeile[ProductManufacturerBrand])."',
                    '"
    .mysql_real_escape_string($zeile[ZanoxProductLink])."',
                    '"
    .mysql_real_escape_string($zeile[ZanoxProductCategoryNumber])."',
                    '"
    .mysql_real_escape_string($zeile[MerchantProductCategoryNumber])."',
                    '"
    .mysql_real_escape_string($zeile[DeliveryTime])."',
                    '"
    .mysql_real_escape_string($zeile[TermsOfContract])."',
                    '"
    .mysql_real_escape_string($zeile[ProductEAN])."',
                    '"
    .mysql_real_escape_string($zeile[ProductPriceOld])."',
                    '"
    .mysql_real_escape_string($zeile[CurrencySymbolOfPrice])."',
                    '"
    .mysql_real_escape_string($zeile[UpdateDate])."',
                    '"
    .mysql_real_escape_string($zeile[ValidFromDate])."',
                    '"
    .mysql_real_escape_string($zeile[ValidToDate])."',
                    '"
    .mysql_real_escape_string($zeile[ProductShortDescription])."',
                    '"
    .mysql_real_escape_string($zeile[ImageLargeURL])."' )";


               echo 
    $query.$values."<br>";

            
    mysql_unbuffered_query($query.$values) or die(mysql_error());
       }
       
    $cc++;
    }

    }

    ?>
    Habe jetzt einige Dinge bei denen ich mal Unterstützung oder Denkanstöße brauche:

    1. Warum führt er auch wenn ich keine Datei zum hochladen einfüge den Import aus und nicht nur die Fehlermeldung?

    2. Kann ich einfach so mit den Zeilen

    PHP-Code:
    ...
    define("Shop"$_POST['shop']);
    define("ProductId"0);
    ... 
    bestimmen, dass er die Datei "bearbeitet" -> mir ist klar er bearbeitet die Datei nicht, sondern er ergänzt diese quasi.

    3. Anscheinend kann ich es nicht so einfach es werden nämlich nur leere Felder importiert und die anscheinend in einer endlosschleife...

  • #2
    Zitat von Rutor Beitrag anzeigen
    1. Warum führt er auch wenn ich keine Datei zum hochladen einfüge den Import aus und nicht nur die Fehlermeldung?
    In dem Fall ist $_POST['check'] undefined, PHP wirft dann zwar eine Notice aber behandelt den Wert wie NULL. Es gilt 0==NULL, da der == Operator im Gegensatz zu === nicht typsicher ist.

    Zitat von Rutor Beitrag anzeigen
    2. Kann ich einfach so mit den Zeilen

    PHP-Code:
    ...
    define("Shop"$_POST['shop']);
    define("ProductId"0);
    ... 
    bestimmen, dass er die Datei "bearbeitet" -> mir ist klar er bearbeitet die Datei nicht, sondern er ergänzt diese quasi.
    Keine Ahnung, was du meinst, mit diesen Zeilen bestimmst du überhaupt nichts sondern definierst Konstanten. Da $_POST['shop'] aber ganz sicher kein konstanter Wert ist, ist das eine gehörige Zweckentfremdung.

    Zitat von Rutor Beitrag anzeigen
    3. Anscheinend kann ich es nicht so einfach es werden nämlich nur leere Felder importiert und die anscheinend in einer endlosschleife...
    Kann ich auf die Schnelle nicht nachvollziehen, deine while-Schleife sieht aber tatsächlich seltsam aus. Was soll $cc bedeuten/machen?
    [IMG]https://g.twimg.com/twitter-bird-16x16.png[/IMG][URL="https://twitter.com/fschmengler"]@fschmengler[/URL] - [IMG]https://i.stack.imgur.com/qh235.png[/IMG][URL="https://stackoverflow.com/users/664108/fschmengler"]@fschmengler[/URL] - [IMG]http://i.imgur.com/ZEqflLv.png[/IMG] [URL="https://github.com/schmengler/"]@schmengler[/URL]
    [URL="http://www.schmengler-se.de/"]PHP Blog[/URL] - [URL="http://www.schmengler-se.de/magento-entwicklung/"]Magento Entwicklung[/URL] - [URL="http://www.css3d.net/"]CSS Ribbon Generator[/URL]

    Kommentar


    • #3
      Auf jeden Fall mal ansehen: http://www.php.net/manual/de/features.file-upload.php

      Kommentar


      • #4
        auch wenn ein wenig spät hoffe ich weiter auf Hilfe.

        Also:

        Zitat von fab Beitrag anzeigen
        In dem Fall ist $_POST['check'] undefined, PHP wirft dann zwar eine Notice aber behandelt den Wert wie NULL. Es gilt 0==NULL, da der == Operator im Gegensatz zu === nicht typsicher ist.
        $_POST[check] muss definiert sein -> sonst würde er ja gar nicht in die DB importieren - er importiert allerdings nur "0" in jedes Feld.

        Zitat von fab Beitrag anzeigen
        Keine Ahnung, was du meinst, mit diesen Zeilen bestimmst du überhaupt nichts sondern definierst Konstanten. Da $_POST['shop'] aber ganz sicher kein konstanter Wert ist, ist das eine gehörige Zweckentfremdung.
        In der CSV Datei ist es wie folgt:

        Spalte 1 Spalte 2 Spalte 3 ...
        Parameter1 Paramter 2 Parameter 3 ...
        Wert 1 Wert 2 Wert 3 ....
        Wert 4 Wert 5 ....

        Ich möchte damit bezwecken, dass mysql beim import denkt, dass vor Spalte eins noch eine Spalte existiert -> Bei mir Spalte "0" mit dem Parameter "Shop" und immer dem selben Wert, der beim CSV Upload Formular im selben bestimmt wird.


        Zitat von fab Beitrag anzeigen
        Kann ich auf die Schnelle nicht nachvollziehen, deine while-Schleife sieht aber tatsächlich seltsam aus. Was soll $cc bedeuten/machen?
        Dieses $cc bewirkt, dass es nach jeder Zeile quasi neu ausgeführt wird - also uploadzeiten nicht berücksichtigt werden - funktioniert auch. Das Upload script funkrioniert auch wenn ich eine Datei vom Server hochlade ohne dass ich einen Parameter automatisch mehr einbaue sondern ich muss immer vorher manuell die Datei bearbeiten

        Kommentar


        • #5
          Hochgeladene Dateien sind nicht im $_POST-Array, sondern im $_FILES-Array.

          Du hast oben einen Link bekommen, wo das alles recht umfassend dargestellt wird.
          http://www.php.net/manual/de/feature...ost-method.php
          [PHP]if ($var != 0) {
          $var = 0;
          }[/PHP]

          Kommentar

          Lädt...
          X