4311
29.08.2006, aktualisiert am 14.02.2007
12286
17
0
Beim Auslesen einer DBase-Datei mit PHP habe ich ein Umlautproblem
Mein Ziel ist es, Daten einer DBase-Datenbank in eine MySQL-Datenbank zu übertragen.
Wenn ich versuche die Datensätze von einer DBase-Datenbank in die MySQL-Datenbank zu schreiben, werden alle Umlaute durch hieroglyphen ersetzt. Da die Umlaute bei beiden Testausgaben schon nicht ausgegeben werden, muss das Problem wohl entweder an meinem Script, an dem Auslesen der Datei oder an PHP liegen.
Hier ein Auszug aus dem Script:
Danke schonmal für die Hilfe
Gruß
Blueeye
Änderung(en):
05.07.2007 22:10
Ich schließe den Thread da die Lösung gefunde ist und keine weiteren Kommentare nötig sind.
masterG
Moderator
Wenn ich versuche die Datensätze von einer DBase-Datenbank in die MySQL-Datenbank zu schreiben, werden alle Umlaute durch hieroglyphen ersetzt. Da die Umlaute bei beiden Testausgaben schon nicht ausgegeben werden, muss das Problem wohl entweder an meinem Script, an dem Auslesen der Datei oder an PHP liegen.
Hier ein Auszug aus dem Script:
<?
$db_path = "abc.dbf";
##### DBase Datei auslesen
$db_dbase = dbase_open($db_path, 0) // dbase file öffnen
or die("Error! Konnte DBase-Datei '$db_path' nicht öffnen.");
$maxrow = dbase_numrecords ($db_dbase) // Anzahl der Datensätze auslesen
or die("Error! DBase-Datei '$db_dbase' scheint leer zu sein.");
##### MySQL-Datenbank öffnen
$db_link = mysql_connect('localhost', 'user', 'pass') // Datenbankverbindung herstellen
or die('Keine Verbindung moeglich: ' . mysql_error());
$db_mysql = mysql_select_db('database', $db_link) // Datenbank auswählen
or die ('Kann Datenbank nicht benutzen : ' . mysql_error());
##### Transfer in MySQL-Datenbank
for ($i = 1; $i < $maxdata; $i++) // Jeder Datensatz
{
$db_rec[$i] = dbase_get_record_with_names ($db_dbase, $rec_nr); // Wird in die Variable $db_rec geschrieben
echo "Artikelname vor Uebergabe: ".$db_rec[$i]['ARTIKEL_NAME']; // Ausgabe zur Fehlersuche
##### Variablen übergeben
$ARTIKEL_NR = $db_rec[$i]['ARTIKEL_NR'];
$ARTIKEL_NAME = $db_rec[$i]['ARTIKEL_NAME'];
$PREIS = $db_rec[$i]['PREIS'];
echo "Artikelname nach Uebergabe: ".$ARTIKEL_NAME; // Ausgabe zur Fehlersuche
##### Daten in Tabelle schreiben
mysql_query("
INSERT INTO
`DATENBANK` ( `ARTIKEL_NR`, `ARTIKEL_NAME`, `PREIS`)
VALUES
('$ARTIKEL_NR', 'ARTIKEL_NAME', '$PREIS')
");
}
##### DBase-Datei schliessen
dbase_close ($db_dbase);
?>
Danke schonmal für die Hilfe
Gruß
Blueeye
Änderung(en):
05.07.2007 22:10
Ich schließe den Thread da die Lösung gefunde ist und keine weiteren Kommentare nötig sind.
masterG
Moderator
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 38942
Url: https://administrator.de/contentid/38942
Ausgedruckt am: 21.11.2024 um 17:11 Uhr
17 Kommentare
Neuester Kommentar
Und bei der DBase-Datei finde ich momentan keine Möglichkeit die Daten auszulesen.
Aber Du weißt doch bestimmt, ob es eine dBaseIII (=definitiv nicht Windows!) oder dBaseIV oder höher ist.Ich denke, Du kommst nicht umhin, die einzelnen Zeichen in der dBase-DB manuell umzucodieren ("Wechseln/ersetzen").
Gruß
Biber
Hallo blueeye,
wenn Du in Deinem Skript in folgender Zeile:
statt Uebergabe Übergabe eingibst, gibt es dann Übergabe oder irgendwas wie {|bergabe aus?
Wenn da das Ü richtig angezeigt wird, denke ich auch, daß es an der Kodierung der dBase-Daten liegt.
wenn Du in Deinem Skript in folgender Zeile:
echo "Artikelname vor Uebergabe: ".$db_rec[$i]['ARTIKEL_NAME'];
statt Uebergabe Übergabe eingibst, gibt es dann Übergabe oder irgendwas wie {|bergabe aus?
Wenn da das Ü richtig angezeigt wird, denke ich auch, daß es an der Kodierung der dBase-Daten liegt.
Hallo blueeye,
schau mal hier, vielleicht bringt dich das ja weiter:
http://de.php.net/iconv
Schönen Gruß,
Johnny.
schau mal hier, vielleicht bringt dich das ja weiter:
http://de.php.net/iconv
Schönen Gruß,
Johnny.
<?php
$db_path = "dbfdateiname.dbf";
##### DBase Datei auslesen
$db_dbase = dbase_open($db_path, 0) // dbase file öffnen
or die("Error! Konnte DBase-Datei '$db_path' nicht öffnen.");
$maxrow = dbase_numrecords ($db_dbase) // Anzahl der Datensätze auslesen
or die("Error! DBase-Datei '$db_dbase' scheint leer zu sein.");
##### MySQL-Datenbank öffnen
$db_link = mysql_connect('localhost', 'user', 'pw') // Datenbankverbindung herstellen
or die('Keine Verbindung moeglich: ' . mysql_error());
$db_mysql = mysql_select_db('dbname', $db_link) // Datenbank auswählen
or die ('Kann Datenbank nicht benutzen : ' . mysql_error());
##### Transfer in MySQL-Datenbank
for ($i = 1; $i < $maxrow; $i++) // Jeder Datensatz
{
$db_rec[$i] = dbase_get_record_with_names ($db_dbase, $rec_nr); // Wird in die Variable $db_rec geschrieben
echo "Artikelname vor Uebergabe: ".$db_rec[$i]['NAME']; // Ausgabe zur Fehlersuche
##### Variablen übergeben
$DATUM = iconv("850", "ISO-8859-1", $db_rec[$i]['DATUM']);
$KELLNER = iconv("850", "ISO-8859-1", $db_rec[$i]['KELLNER']);
$TISCH = iconv("850", "ISO-8859-1", $db_rec[$i]['TISCH']);
$KASSE = iconv("850", "ISO-8859-1", $db_rec[$i]['KASSE']);
$KASSEN_KR = iconv("850", "ISO-8859-1", $db_rec[$i]['KASSEN_KR']);
$DISPL_ORD = iconv("850", "ISO-8859-1", $db_rec[$i]['DISPL_ORD']);
$ARTIKEL = iconv("850", "ISO-8859-1", $db_rec[$i]['ARTIKEL']);
$NAME = iconv("850", "ISO-8859-1", $db_rec[$i]['NAME']);
$WG = iconv("850", "ISO-8859-1", $db_rec[$i]['WG']);
$SPARTE = iconv("850", "ISO-8859-1", $db_rec[$i]['SPARTE']);
$MENGE = iconv("850", "ISO-8859-1", $db_rec[$i]['MENGE']);
$PREIS = iconv("850", "ISO-8859-1", $db_rec[$i]['PREIS']);
$MWST = iconv("850", "ISO-8859-1", $db_rec[$i]['MWST']);
$RABATT = iconv("850", "ISO-8859-1", $db_rec[$i]['RABATT']);
$KOMMENTAR = iconv("850", "ISO-8859-1", $db_rec[$i]['KOMMENTAR']);
$BONTEXT = iconv("850", "ISO-8859-1", $db_rec[$i]['BONTEXT']);
$GAESTE = iconv("850", "ISO-8859-1", $db_rec[$i]['GAESTE']);
$RECHNUNG = iconv("850", "ISO-8859-1", $db_rec[$i]['RECHNUNG']);
$ZEIT = iconv("850", "ISO-8859-1", $db_rec[$i]['ZEIT']);
$RECORD_ID = iconv("850", "ISO-8859-1", $db_rec[$i]['RECORD_ID']);
$TIME_STAMP = iconv("850", "ISO-8859-1", $db_rec[$i]['TIME_STAMP']);
$Z = iconv("850", "ISO-8859-1", $db_rec[$i]['Z']);
$ZERO_QUOTE = iconv("850", "ISO-8859-1", $db_rec[$i]['ZERO_QUOTE']);
$CSLINK = iconv("850", "ISO-8859-1", $db_rec[$i]['CSLINK']);
$DRUCKER = iconv("850", "ISO-8859-1", $db_rec[$i]['DRUCKER']);
$GRP0 = iconv("850", "ISO-8859-1", $db_rec[$i]['GRP0']);
$GRP1 = iconv("850", "ISO-8859-1", $db_rec[$i]['GRP1']);
$GRP2 = iconv("850", "ISO-8859-1", $db_rec[$i]['GRP2']);
$GRP3 = iconv("850", "ISO-8859-1", $db_rec[$i]['GRP3']);
$GRP4 = iconv("850", "ISO-8859-1", $db_rec[$i]['GRP4']);
$GRP5 = iconv("850", "ISO-8859-1", $db_rec[$i]['GRP5']);
$GRP6 = iconv("850", "ISO-8859-1", $db_rec[$i]['GRP6']);
$GRP7 = iconv("850", "ISO-8859-1", $db_rec[$i]['GRP7']);
$GAST_LNK = iconv("850", "ISO-8859-1", $db_rec[$i]['GAST_LNK']);
$STORNO_TYP = iconv("850", "ISO-8859-1", $db_rec[$i]['STORNO_TYP']);
echo "Artikelname nach Uebergabe: ".$NAME; // Ausgabe zur Fehlersuche
##### Daten in Tabelle schreiben
mysql_query("
INSERT INTO
`tabellenname` ( `DATUM`, `KELLNER`, ` TISCH`, `KASSE`, `KASSEN_KR`, `DISPL_ORD`, `ARTIKEL`, `NAME`, `WG`, `SPARTE`, `MENGE`, `PREIS`, `MWST`, `RABATT`, `KOMMENTAR`, `BONTEXT`, `GAESTE`, `RECHNUNG`, `ZEIT`, `RECORD_ID`, `TIME_STAMP`, `Z`, `ZERO_QUOTE`, `CSLINK`, `DRUCKER`, `GRP0`, `GRP1`, `GRP2`, `GRP3`, `GRP4`, `GRP5`, `GRP6`, `GRP7`, `GAST_LNK`, `STORNO_TYP`
)
VALUES
('DATUM', 'KELLNER', ' TISCH', 'KASSE', 'KASSEN_KR', 'DISPL_ORD', 'ARTIKEL', 'NAME', 'WG', 'SPARTE', 'MENGE', 'PREIS', 'MWST', 'RABATT', 'KOMMENTAR', 'BONTEXT', 'GAESTE', 'RECHNUNG', 'ZEIT', 'RECORD_ID', 'TIME_STAMP', 'Z', 'ZERO_QUOTE', 'CSLINK', 'DRUCKER', 'GRP0', 'GRP1', 'GRP2', 'GRP3', 'GRP4', 'GRP5', 'GRP6', 'GRP7', 'GAST_LNK', 'STORNO_TYP')
");
}
##### DBase-Datei schliessen
dbase_close ($db_dbase);
?>
Artikelname vor Uebergabe: CKER
Artikelname nach Uebergabe: CKER
das einzige was in der datei steht ist Drucker dort wäre die endung cker zu finden hm
Moin iexplorer,
kommentiere doch bitte mal das ohnehin nicht funktionierende INSERT INTO-Statement aus.
Da bei den VALUEs komplett die $ vor den Variablennamen fehlen, ist das ja entbehrlich im Moment.
Und dann lass den Pre-Import noch mal laufen und poste mal bitte die ersten 10 Vorher/Nachher-Ausgaben.
Übrigens- Du brauchst natürlich nur die Werte konvertieren, die auch Umlaute enthalten können.
DBase ist zwar einen Tach älter, aber Umlaute in Datums- oder Zahlenfeldern konnten die auch damals schon abfangen.
Bzw. wenn in diesen numerischen oder Datumsfeldern inzwischen Umlaute stehen, dann lohnt es sich IMHO nicht mehr, diese Daten konvertiert in mySQL-Felder zu pressen, die für numerische bzw. Datumswerte gedacht sind.
Gruss
Biber
kommentiere doch bitte mal das ohnehin nicht funktionierende INSERT INTO-Statement aus.
Da bei den VALUEs komplett die $ vor den Variablennamen fehlen, ist das ja entbehrlich im Moment.
Und dann lass den Pre-Import noch mal laufen und poste mal bitte die ersten 10 Vorher/Nachher-Ausgaben.
Übrigens- Du brauchst natürlich nur die Werte konvertieren, die auch Umlaute enthalten können.
DBase ist zwar einen Tach älter, aber Umlaute in Datums- oder Zahlenfeldern konnten die auch damals schon abfangen.
Bzw. wenn in diesen numerischen oder Datumsfeldern inzwischen Umlaute stehen, dann lohnt es sich IMHO nicht mehr, diese Daten konvertiert in mySQL-Felder zu pressen, die für numerische bzw. Datumswerte gedacht sind.
Gruss
Biber
ausgabe:
DATUM vor Uebergabe: CKER
DATUM vor Uebergabe: CKER
DATUM vor Uebergabe: CKER
DATUM vor Uebergabe: CKER
DATUM vor Uebergabe: CKER
DATUM vor Uebergabe: CKER
DATUM vor Uebergabe: CKER
DATUM vor Uebergabe: CKER
DATUM vor Uebergabe: CKER
DATUM vor Uebergabe: CKER
DATUM vor Uebergabe: CKER
DATUM vor Uebergabe: CKER
DATUM vor Uebergabe: CKER
script:
<?php
$db_path = "dat.dbf";
DBase Datei auslesen
$db_dbase = dbase_open($db_path, 0) dbase file öffnen
or die("Error! Konnte DBase-Datei '$db_path' nicht öffnen.");
$maxrow = dbase_numrecords ($db_dbase) Anzahl der Datensätze auslesen
or die("Error! DBase-Datei '$db_dbase' scheint leer zu sein.");
MySQL-Datenbank öffnen
$db_link = mysql_connect('localhost', 'user', 'pw') Datenbankverbindung herstellen
or die('Keine Verbindung moeglich: ' . mysql_error());
$db_mysql = mysql_select_db('dbname', $db_link) Datenbank auswählen
or die ('Kann Datenbank nicht benutzen : ' . mysql_error());
Transfer in MySQL-Datenbank
for ($i = 1; $i < $maxrow; $i++) Jeder Datensatz
{
$db_rec[$i] = dbase_get_record_with_names ($db_dbase, $rec_nr); Wird in die Variable $db_rec geschrieben
echo "Datum vor übergabe: ".$db_rec[$i]['DATUM']."
"; // Ausgabe zur Fehlersuche
};
DBase-Datei schliessen
dbase_close ($db_dbase);
?>
DATUM vor Uebergabe: CKER
DATUM vor Uebergabe: CKER
DATUM vor Uebergabe: CKER
DATUM vor Uebergabe: CKER
DATUM vor Uebergabe: CKER
DATUM vor Uebergabe: CKER
DATUM vor Uebergabe: CKER
DATUM vor Uebergabe: CKER
DATUM vor Uebergabe: CKER
DATUM vor Uebergabe: CKER
DATUM vor Uebergabe: CKER
DATUM vor Uebergabe: CKER
DATUM vor Uebergabe: CKER
script:
<?php
$db_path = "dat.dbf";
DBase Datei auslesen
$db_dbase = dbase_open($db_path, 0) dbase file öffnen
or die("Error! Konnte DBase-Datei '$db_path' nicht öffnen.");
$maxrow = dbase_numrecords ($db_dbase) Anzahl der Datensätze auslesen
or die("Error! DBase-Datei '$db_dbase' scheint leer zu sein.");
MySQL-Datenbank öffnen
$db_link = mysql_connect('localhost', 'user', 'pw') Datenbankverbindung herstellen
or die('Keine Verbindung moeglich: ' . mysql_error());
$db_mysql = mysql_select_db('dbname', $db_link) Datenbank auswählen
or die ('Kann Datenbank nicht benutzen : ' . mysql_error());
Transfer in MySQL-Datenbank
for ($i = 1; $i < $maxrow; $i++) Jeder Datensatz
{
$db_rec[$i] = dbase_get_record_with_names ($db_dbase, $rec_nr); Wird in die Variable $db_rec geschrieben
echo "Datum vor übergabe: ".$db_rec[$i]['DATUM']."
"; // Ausgabe zur Fehlersuche
};
DBase-Datei schliessen
dbase_close ($db_dbase);
?>
Nein
KELLNER vor Uebergabe: 0
KELLNER vor Uebergabe: 0
KELLNER vor Uebergabe: 0
Tisch vor Uebergabe: 0
Tisch vor Uebergabe: 0
Tisch vor Uebergabe: 0
Tisch vor Uebergabe: 0
KASSE vor Uebergabe: 0
KASSE vor Uebergabe: 0
KASSE vor Uebergabe: 0
KASSE vor Uebergabe: 0
In der dbf steht auch etwas drinne:
Array
(
[DATUM] => 20060928
[KELLNER] => 3
[TISCH] => 1
[KASSE] => 1
[KASSEN_KR] => 1
[DISPL_ORD] => 0
[ARTIKEL] => 999
[NAME] => Zigaretten
[WG] => 9
[SPARTE] => 900
[MENGE] => 1
[PREIS] => 4
[RABATT] => 0
[KOMMENTAR] =>
[BONTEXT] =>
[GAESTE] => 0
[RECHNUNG] => 0
[ZEIT] => ^
[RECORD_ID] => 0
[TIME_STAMP] => 0
[Z] => 0
[ZERO_QUOTE] => 0
[CSLINK] => 0
[DRUCKER] => 0
[GAST_LNK] => 0
[STORNO_TYP] => 0
[deleted] => 0
script:
<?php
echo "<pre>";
$dbase_db = dbase_open('dateiname.dbf', 0);
$num = dbase_numrecords($dbase_db);
for ($i=1;$i<=$num;$i++)
{
$test = dbase_get_record_with_names($dbase_db, $i);
print_r($test);
}
if ($dbase_db) {
dbase_close($dbase_db);
}
echo "</pre>";
?>
KELLNER vor Uebergabe: 0
KELLNER vor Uebergabe: 0
KELLNER vor Uebergabe: 0
Tisch vor Uebergabe: 0
Tisch vor Uebergabe: 0
Tisch vor Uebergabe: 0
Tisch vor Uebergabe: 0
KASSE vor Uebergabe: 0
KASSE vor Uebergabe: 0
KASSE vor Uebergabe: 0
KASSE vor Uebergabe: 0
In der dbf steht auch etwas drinne:
Array
(
[DATUM] => 20060928
[KELLNER] => 3
[TISCH] => 1
[KASSE] => 1
[KASSEN_KR] => 1
[DISPL_ORD] => 0
[ARTIKEL] => 999
[NAME] => Zigaretten
[WG] => 9
[SPARTE] => 900
[MENGE] => 1
[PREIS] => 4
[RABATT] => 0
[KOMMENTAR] =>
[BONTEXT] =>
[GAESTE] => 0
[RECHNUNG] => 0
[ZEIT] => ^
[RECORD_ID] => 0
[TIME_STAMP] => 0
[Z] => 0
[ZERO_QUOTE] => 0
[CSLINK] => 0
[DRUCKER] => 0
[GAST_LNK] => 0
[STORNO_TYP] => 0
[deleted] => 0
script:
<?php
echo "<pre>";
$dbase_db = dbase_open('dateiname.dbf', 0);
$num = dbase_numrecords($dbase_db);
for ($i=1;$i<=$num;$i++)
{
$test = dbase_get_record_with_names($dbase_db, $i);
print_r($test);
}
if ($dbase_db) {
dbase_close($dbase_db);
}
echo "</pre>";
?>