Autor Zpráva
tito100
Profil
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
tito100:
malo by pomôcť, keď budú reťazce v tom ini súbore uzavreté v úvodzovkách
tito100
Profil
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
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
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
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
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
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
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
tito100:
tak som zmenil kodovanie v php subore kde sa nachadza funkcia na windows-1250 . a už sa diakritika zmeni :-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: