Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 885e7d76

Von Holger Lindemann vor fast 15 Jahren hinzugefügt

  • ID 885e7d7601de767605f2938a69bae18258c62696
  • Nachfolger 74f7cca4

Uploadverzeichnis in users (Bug 1343)

Abfrage Server-Zeichencode (Bug 1350)
Trennzeichen in allen File wählbar
Zeichenkonvertierung: (Bug 1036)
Da Web und DB Server nicht auf dem gleichen Server laufen müssen,
muß der Client (php) auf den Server eingestellt werden.
Bei der Datenkonvertierung einen Zeichencode mitgeben oder auf Auto stellen
mb_detect_encoding arbeitet nicht zuverlässig!!! Liefert häufig den ersten zu testenden Code zurück.

Unterschiede anzeigen:

lxo-import/addressB.php
48 48
    echo "Abbruch: $txt<br>";
49 49
    exit(1);
50 50
}
51

  
51
$dir = "../users/";
52 52
clearstatcache ();
53 53
//print_r($_FILES);
54 54
$test=$_POST["test"];
55 55
if (!empty($_FILES["Datei"]["name"])) {
56 56
    $file=$_POST["ziel"];
57
    if (!move_uploaded_file($_FILES["Datei"]["tmp_name"],$file.".csv")) {
57
    if (!move_uploaded_file($_FILES["Datei"]["tmp_name"],$dir.$file.".csv")) {
58 58
        $file=false;
59 59
        echo "Upload von ".$_FILES["Datei"]["name"]." fehlerhaft. (".$_FILES["Datei"]["error"].")<br>";
60 60
    }
61
} else if (is_file($_POST["ziel"].".csv")) {
61
} else if (is_file($dir.$_POST["ziel"].".csv")) {
62 62
    $file=$_POST["ziel"];
63 63
} else {
64 64
    $file=false;
......
67 67
if (!$file) ende ("Kein Datenfile");
68 68

  
69 69
$trenner=($_POST["trenner"])?$_POST["trenner"]:",";
70
if ($trenner=="other") {
71
    $trenner=trim($trennzeichen);
72
    if (substr($trenner,0,1)=="#") if (strlen($trenner)>1) $trenner=chr(substr($trenner,1));
73
} 
70 74

  
71
if (!file_exists("$file.csv")) ende("$file.csv nicht im Ordner oder leer");
75
if (!file_exists($dir.$file.".csv")) ende("$file.csv nicht im Ordner oder leer");
72 76

  
73 77

  
74 78
if (!$db->chkcol($file)) ende("Importspalte kann nicht angelegt werden");
......
78 82

  
79 83
$kunde_fld = array_keys($address);
80 84

  
81
$f=fopen("$file.csv","r");
85
    //Zeichencodierung des Servers
86
    $tmpcode = $db->getServerCode();
87
    //Leider sind die Benennungen vom Server anders als von mb_detect_encoding
88
    if ($tmpcode == "UTF8") {
89
         define("ServerCode","UTF-8");
90
    } else if ($tmpcode == "LATIN9") {
91
         define("ServerCode","ISO-8859-15");
92
    } else if ($tmpcode == "LATIN1") {
93
         define("ServerCode","ISO-8859-1");
94
    } else {
95
         define("ServerCode",$tmpcode);
96
    }
97
    //Zeichensatz sollte gleich sein, sonst ist die Datenkonvertierung nutzlos
98
    //DB und LxO müssen ja nicht auf der gleichen Maschiene sein.
99
    if($tmpcode<>$db->getClientCode()) {
100
        $rc = $db->setClientCode($tmpcode);
101
    }
102

  
103
    // Zeichenkodierung File
104
    if ($_POST["encoding"] == "auto") {
105
         define("Auto",true);
106
         define("Translate",true);
107
    } else {
108
         define("Auto",false);
109
         if ($_POST["encoding"] == ServerCode) {
110
            define("Translate",false);
111
         } else {
112
            define("Translate",true);
113
            define("FileCode",$_POST["encoding"]);
114
         }
115
    }
116

  
117
$f=fopen($dir.$file.".csv","r");
82 118
$zeile=fgets($f,1200);
83 119
$infld=split($trenner,strtolower($zeile));
84 120
$first=true;
......
111 147
        $data=trim($data);
112 148
        // seit 2.6 ist die DB-Kodierung UTF-8 @holger Ansonsten einmal vorher die DB-Encoding auslesen
113 149
        // Falls die Daten ISO-kodiert kommen entsprechend wandeln
150
        // done!
114 151
        // UTF-8 MUSS als erstes stehen, da ansonsten die Prüfung bei ISO-8859-1 aufhört ...
152
        // die blöde mb_detect... tut leider nicht immer, daher die Möglichkeit der Auswahl
115 153
        // TODO Umlaute am Anfang wurden bei meinem Test nicht übernommen (Österreich). S.a.:
116 154
        // http://forum.de.selfhtml.org/archiv/2007/1/t143904/
117 155

  
118
        $encoding = mb_detect_encoding($data,"UTF-8,ISO-8859-1,ISO-8859-15");
119
        if ($encoding != "UTF-8"){
120
          $data=mb_convert_encoding($data, "UTF-8","$encoding");
121
        }
156
        if (Translate) translate($data);
157

  
122 158
        //$data=htmlentities($data);
123 159
        $data=addslashes($data);
124 160
        if ($in_fld[$i]==$file."number") {  // customernumber || vendornumber
......
132 168
        } else if ($in_fld[$i]=="taxincluded"){
133 169
            $data=strtolower(substr($data,0,1));
134 170
            if ($data!="f" && $data!="t") $data="f";
135
        } /*else if ($in_fld[$i]=="ustid"){
136
            Was passiert hier:
137
            $data=strtr(" ","",$data);
138
            SUCHE IN ' ' nach dem Vorkommen von '' mit der BOOLEAN-Interpretation von $data
139
            demnach gibt es immer eine leere Zeichenkette zurück.
140
        }*/ /*else if ($in_fld[$i]=="matchcode") {
171
        } else if ($in_fld[$i]=="ustid"){
172
            $data=strtr($data," ","");
173
        } /*else if ($in_fld[$i]=="matchcode") {
141 174
                  $matchcode=$data;
142 175
                  $i++;
143 176
                  continue;
......
208 241
<table>
209 242
<tr><td></td><td><input type="submit" name="ok" value="Hilfe"></td></tr>
210 243
<tr><td>Zieltabelle</td><td><input type="radio" name="ziel" value="customer" checked>customer <input type="radio" name="ziel" value="vendor">vendor</td></tr>
211
<tr><td>Trennzeichen</td><td><input type="text" size="2" maxlength="1" name="trenner" value=";"></td></tr>
244
<tr><td>Trennzeichen</td><td>
245
        <input type="radio" name="trenner" value=";" checked>Semikolon
246
        <input type="radio" name="trenner" value=",">Komma
247
        <input type="radio" name="trenner" value="#9" checked>Tabulator
248
        <input type="radio" name="trenner" value=" ">Leerzeichen
249
        <input type="radio" name="trenner" value="other">
250
        <input type="text" size="2" name="trennzeichen" value="">
251
</td></tr>
212 252
<tr><td>Test</td><td><input type="checkbox" name="test" value="1">ja</td></tr>
213 253
<tr><td>Daten</td><td><input type="file" name="Datei"></td></tr>
254
<tr><td>Verwendete<br />Zeichecodierung</td><td>
255
        <select name="encoding">
256
        <option value="auto">Automatisch (versuchen)</option>
257
        <option value="UTF-8">UTF-8</option>
258
        <option value="ISO-8859-1">ISO-8859-1</option>
259
        <option value="ISO-8859-15">ISO-8859-15</option>
260
        <option value="Windows-1252">Windows-1252</option>
261
        <option value="ASCII">ASCII</option>
262
        </select>
263
</td></tr>
214 264
<tr><td></td><td><input type="submit" name="ok" value="Import"></td></tr>
215 265
</table>
216 266
</form>

Auch abrufbar als: Unified diff