Autor | Zpráva | ||
---|---|---|---|
tito100 Profil |
#1 · Zasláno: 18. 1. 2010, 09:11:23 · Upravil/a: tito100
dobrý den prajem
mám danú štruktúru DB do ktorej potrebujem dostat mnoho údajov z mnoho ini súborov. v dakumentacii som našiel funkciu parse_ini_file() . po vykonani scriptu niesu udaje v DB vporiadku, chýbajú písmená tie, ktoré následovali po diakritike. všimol som si že za to může diakritika ktora sa používa v daných ini súboroch. pokial v danej premennej diakririka nieje, tak je všetko v poriadku. po vypisani nazvou na stranku tam diaktirika je. v DB však nie. formatovanie použivam utf8 . mam tak uložený php script, tabulku v DB a aj jej riadky. a v pripojeni do db mám mysql_query("SET NAMES 'utf8'"); php: while (false !== ($exfilename = readdir($dh2))) { if (file_exists($dir."/".$filename."/Info/".$exfilename)) { $find=true; $info2=parse_ini_file($dir."/".$filename."/Info/".$exfilename,true); $nazov_uzemia=$info2["item_1"]["Value"]; $nazov_uzemia_emecky=$info2["item_2"]["Value"]; $okres=$info2["item_3"]["Value"]; $rok=$info2["item_4"]["Value"]; $poznamka=$info2["item_6"]["Value"]; break; } } closedir($dh2); if ($find==true) { echo "signatura:".$signatura; $vysledok=mysql_query("SELECT `signatura` , `year` FROM `zoznam` WHERE `signatura` = '".$signatura."' AND `year` =".$rok,$link); if (mysql_num_rows($vysledok)==0) { if (mysql_query("INSERT INTO `zoznam` (`signatura`, `name_czech`, `name_deutsch`, `township`, `year`, `note`, `last_modifed`) VALUES ('$signatura', '$nazov_uzemia', '$nazov_uzemia_emecky', '$okres', '$rok', '$poznamka', CURRENT_TIMESTAMP);",$link)) { echo " added into DB succeful <br>"; }else { echo " added into DB Error <br>"; } } else { echo "value is aleready exist <br>"; } }else { echo "signatura:".$signatura." FAILED"; } } ini súbor : [Settings] Application=CZ Elsyst Engineering Elmap Version=2 [item_0] Name=Signatura Value=1 [item_1] Name=Katastrální území Value=Adamov [item_2] Name=Německý název Value=Adamsthal [item_3] Name=Okres Value=Blansko [item_4] Name=Rok Value=1911 [item_6] Name=Poznámka Value=neúplná //z ukažky som niektore udaje vymazal |
||
fajzen Profil |
#2 · Zasláno: 18. 1. 2010, 13:18:12
tito100:
malo by pomôcť, keď budú reťazce v tom ini súbore uzavreté v úvodzovkách |
||
tito100 Profil |
#3 · Zasláno: 18. 1. 2010, 13:53:39
fajzen:
to bohužial nieje možné. tie ini súbory sú dané. a je ich obrovske množstvo. a odhliadnuc od toho. v čitani ini by chyba byř nemala. na stranku sa predca zobrazia (ked ich dam pomocou echo zobrazit v tom istom scripte) . v DB su však uložene len pismena predchadzajuce prve pismeno z diakritikou |
||
Alphard Profil |
#4 · Zasláno: 18. 1. 2010, 17:38:50
tito100:
„v čitani ini by chyba byř nemala. na stranku sa predca zobrazia (ked ich dam pomocou echo zobrazit v tom istom scripte)“ Ať máme jistotu: if (mysql_query($q="INSERT INTO `zoznam` ...",$link)) { echo " ---$q--- added into DB succeful <br>"; }else Tady je ještě vše v pořádku? Pokud ano, díval jste se do databázové tabulky v nějakém adminovi? Jsou data už špatně uložená, nebo je chyba až při výpisu? |
||
tito100 Profil |
#5 · Zasláno: 19. 1. 2010, 07:18:15 · Upravil/a: tito100
Alphard:
....VALUES ('0700', 'Hodonice', 'Hödnitz', 'Znojmo', '1824', '', CURRENT_TIMESTAMP); a výsledok v DB je si takíto : 0700---Hodonice---H---Znojmo---1824---2010-01-19 07:02:47 ale ako tak pozerám na ten záznam. tak už mi je asi jasne prečo my to nefunguje. písmeno "ö" sa asi v formatovani utf8 nenachádza ale ked pozornejčie pozerám. tak to nieje až tak pravda. lebo následujúci záznam tiež je zlý : .....VALUES ('0004', 'Albrechtičky', 'Klein Olbersdorf', 'Nový Jičín', '1833', '', CURRENT_TIMESTAMP); 0004---Albrechti---Klein Olbersdorf---Nov---1833---2010-01-19 07:02:47 kontroloval som ešte raz to formatovanie. všade mam nastavene utf8cz.(php subor, databaza, tabulka v DB, stlpec v DB, pripojenie do DB) k DB sa pripojujem takto $link=mysql_connect($settings['DB_host'], $settings['DB_usser'], $settings['DB_pass']); mysql_select_db($settings['DB_name']); mysql_query("SET NAMES 'utf8'"); neviem čo ešte može byt zle ked však tenn sql príkaz, ktorý si dám testovaie vypísař , vložím cez phpmyadmin cez sql. tak to vloží do tabuľky správne ... |
||
nightfish Profil |
#6 · Zasláno: 19. 1. 2010, 07:26:22
pak bude problém v kódování těch ini souborů
mohlo by pomoct: $q="INSERT INTO `zoznam` ..."; $q = iconv("windows-1250", "utf-8", $q); if (mysql_query($q,$link)) { ... } případně pak windows-1250 nahradit iso-8859-2 |
||
mattyZEM Profil |
#7 · Zasláno: 19. 1. 2010, 07:27:54 · Upravil/a: mattyZEM
Funkce parse_ini_file() chybu nemá. Používám ji v jednom systému na správu účtů a funguje perfektně.
Pošlete prosím strukturu tabulek. nightfish: „pak bude problém v kódování těch ini souborů“ Eh? |
||
nightfish Profil |
#8 · Zasláno: 19. 1. 2010, 07:47:51
mattyZEM:
„Eh?“ ini soubor má kódování windows-1250, ty ho načteš do PHP, databázi řekneš, že data jsou v utf-8 (i když nejsou) a pak je pošleš... podle nastavení mysql se buď data v nesprávném kódování oříznou od prvního chybného znaku nebo se nahradí otazníkem |
||
tito100 Profil |
#9 · Zasláno: 19. 1. 2010, 09:36:17
nightfish:
„$q = iconv("windows-1250", "utf-8", $q);“ zlatý človek. funguje. veľká vďaka :-) ešte mám jeden problém. pre vyhladavanie použivam kopiu stlpca mez diakritiky. mam funkciu function diakritika($text) { return (strtr($text, "ÁÄČÇĎÉĚËÍŇÓÖŘŠŤÚŮÜÝŽáäčçďéěëíňóöřšťúůüýžABCDEFGHIJKLMNOPRSTUVWXYZ","aaccdeeeinoorstuuuyzaaccdeeeinoorstuuuyzabcdefghijklmnoprstuvexyz")); } v sql mam v ako alternativny nazov : INSERT INTO ......... '".diakritika($nazov_uzemia)."' ........; a diakritika sa vobec nezmení. predpokladam že tam bude ta ista chyba. keže $nazov_uzemia je z ini suboru. a funkcia je v php suboru pod formatovanim utf8 . ked som však skúsil použit diakritika(iconv("windows-1250", "utf-8", $nazov_uzemia)) tak namiesto 'č' mi dalo 'mf' . namiesto 'í' dalo 'xs' ... |
||
tito100 Profil |
#10 · Zasláno: 19. 1. 2010, 09:39:34
tito100:
tak som zmenil kodovanie v php subore kde sa nachadza funkcia na windows-1250 . a už sa diakritika zmeni :-) |
||
Časová prodleva: 14 let
|
0