Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Problem sa našim slovima kod generisanja SQL koda za prebacivanja baze iz XML u MySQL

[es] :: PHP :: PHP za početnike :: Problem sa našim slovima kod generisanja SQL koda za prebacivanja baze iz XML u MySQL

[ Pregleda: 8598 | Odgovora: 15 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

karlson

Član broj: 324415
Poruke: 29
109.175.101.*



+1 Profil

icon Problem sa našim slovima kod generisanja SQL koda za prebacivanja baze iz XML u MySQL18.04.2016. u 11:30 - pre 96 meseci
Potrebno mi je prebacivanje podataka iz Excela u MySQL bazu. Pronašao sam u knjizi jedno rješenje koje
od Excelove XML datoteke generiše SQL kod, koji bih onda mogao kopirati u bazu preko PhpMyAdmin-a.
(Tako sam bar zamislio, valjda ne radim nešto mnogo pogrešno.)

Međutim, problem nastaje kod naših slova, tj. afrikata. Generisani SQL kod nekad ima više polja nego
što ih tabela sadrži. Npr. umjesto:

INSERT INTO IME_BAZE ( ARTIKAL, KUPAC, DATUM ) VALUES ( 'Guma', 'Marko Marković', '26.02.2016.' );

kao rezultat dobijem:

INSERT INTO IME_BAZE ( ARTIKAL, KUPAC, DATUM ) VALUES ( 'Guma', 'Marko Markovi', 'ć', '26.02.2016.' );

I vrlo često (iako ne uvijek) pravi takve prekide kod naših slova (ćĆčČđĐšŠžŽ).

Problem mi se dešavao i sa nekim drugim znakovima (apostrof, crtica, navodnici...), ali sam rješenje
našao u starim temama ovdje na forumu (korištenje funkcija addslashes, htmlspecialchars, strip_tags,
magic_quotes_gpc i sl.). Međutim, za ovaj problem nisam uspio naći rješenje, pa se nadam da će mi neko
pomoći.

Evo koda iz knjige:
Code:

<?php
$tables = array();
$indata = 0;

function encode( $text )
    { 
         $text = preg_replace( "/'/", "''", $text ); 
         return "'".$text."'";
    }

function start_element( $parser, $name, $attribs )
    { 
      global $tables, $indata; 
      if ( $name == "WORKSHEET" ) 
      {
            $tables []= array( 
                    'name' => $attribs['SS:NAME'],                
                    'data' => array()
            );
        }
        if ( $name == "ROW" )
        {
                $tables[count($tables)-1]['data'] []= array();
        }
        if ( $name == "DATA" )
        {
            $indata = 1;
        } 
    }

function text( $parser, $text ) 
    {
        global $tables, $indata;
        if ( $indata )
        {

                $data =& $tables[count($tables)-1]['data'];
                $data[count($data)-1] []= $text;
            }
    }

function end_element( $parser, $name )
    {
        global $indata;
        if ( $name == "DATA" )
        $indata = 0;
    }

$parser = xml_parser_create( );
xml_set_element_handler( $parser, "start_element", "end_element" );
xml_set_character_data_handler( $parser, "text" );
while( !feof( STDIN ) ) {
  $text = fgets( STDIN );
  xml_parse( $parser, $text );
}
xml_parser_free( $parser );
foreach( $tables as $table ) {
    $name = $table['name'];
    $data =& $table['data'];
    $cols = implode( ", ", $data[0] );
    for( $in = 1; $in < count( $data ); $in++ ) {
        $sqldata = implode( ", ", array_map( "encode", $data[$in] ) );
?>

INSERT INTO <?php echo( $name )?> ( <?php echo( $cols ) ?> ) VALUES ( <?php echo(
$sqldata ); ?> );

<?php } } ?>
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Problem sa našim slovima kod generisanja SQL koda za prebacivanja baze iz XML u MySQL18.04.2016. u 11:37 - pre 96 meseci
Čini se kao posledica čudnog ponašanja funkcije xml-set-character-data-handler. Baci pogled tamo na komentare itd, ključna reč je "split".

Mada, reći da se PHP čudno ponaša je jednostavno pleonazam. :P
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Problem sa našim slovima kod generisanja SQL koda za prebacivanja baze iz XML u MySQL18.04.2016. u 13:01 - pre 96 meseci
BTW ako već radiš ručno, što ne eksportuješ CSV direktno iz Excela? mysql podržava import iz CSV.
 
Odgovor na temu

karlson

Član broj: 324415
Poruke: 29
109.175.101.*



+1 Profil

icon Re: Problem sa našim slovima kod generisanja SQL koda za prebacivanja baze iz XML u MySQL18.04.2016. u 13:28 - pre 96 meseci
Pa našao sam ovaj kod i mislio da će funkcionisati. Nisam neki veliki poznavalac PHP-a da bih mogao razlikovati koji format je
bolji za eksport. U suštini, trebam prebaciti podatke, a na koji način - sasvim je svejedno...


 
Odgovor na temu

karlson

Član broj: 324415
Poruke: 29
109.175.98.*



+1 Profil

icon Re: Problem sa našim slovima kod generisanja SQL koda za prebacivanja baze iz XML u MySQL20.04.2016. u 14:47 - pre 96 meseci
Odustao sam od XML-a i prešao na CSV. Skoro je proradilo ali i dalje imam problem sa našim slovima.
Podesio sam encoding pri kreiranju baze na utf-8:
Code:

CREATE DATABASE ime_baze DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

a prilikom importa CSV-a koristio sam ovaj kod:
Code:

LOAD DATA INFILE 'putanja/do/file.csv'
IGNORE INTO TABLE ime_tabele
CHARACTER SET UTF8
FIELDS TERMINATED BY ';'
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n';

i kad u localhostu pokušam
Code:

SELECT * FROM ime_tabele;

nedostaju naša slova, tačnije kada naiđe na naše slovo nedostaje ostatak podatka od tog slova pa do kraja.
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Problem sa našim slovima kod generisanja SQL koda za prebacivanja baze iz XML u MySQL20.04.2016. u 15:06 - pre 96 meseci
Jel si siguran da su ti u CSV-u dobro enkodovana naša slova? Zašto su ti polja odvojena tačkom i zarezom, a ne zarezom?
 
Odgovor na temu

karlson

Član broj: 324415
Poruke: 29
109.175.98.*



+1 Profil

icon Re: Problem sa našim slovima kod generisanja SQL koda za prebacivanja baze iz XML u MySQL20.04.2016. u 19:04 - pre 96 meseci
Prvo sam stavio
Code:

FIELDS TERMINATED BY ','

pa kad sam vidio da pokazuje sadržaj baze ni sličan onome što bi trebalo da bude, zavirio sam u CSV fajl
(preko Notepada) i vidio da su polja odvojena tačka-zarezom, ali naša slova u CSV su prikazana ispravno.
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Problem sa našim slovima kod generisanja SQL koda za prebacivanja baze iz XML u MySQL21.04.2016. u 09:02 - pre 96 meseci
mysql je prilično robustan što se ovakvih stvari tiče tako da sumnjam da je problem na njegovoj strani. predložio bih ti da negde okačiš CSV ili neki njegov deo (ali bez kopi-pejstovanja iz windowsa, znači direktno ono što imaš na disku) pa da vidimo šta je unutra.
 
Odgovor na temu

karlson

Član broj: 324415
Poruke: 29
109.175.97.*



+1 Profil

icon Re: Problem sa našim slovima kod generisanja SQL koda za prebacivanja baze iz XML u MySQL21.04.2016. u 10:36 - pre 96 meseci
Hvala ti za trud i pomoć.
Evo okačio sam jedan mali probni CSV faj.
 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1343
*.dynamic.sbb.rs.



+311 Profil

icon Re: Problem sa našim slovima kod generisanja SQL koda za prebacivanja baze iz XML u MySQL21.04.2016. u 10:41 - pre 96 meseci
Ovo nije enkodovano kao UTF-8.
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3445

Jabber: djoka_l


+1462 Profil

icon Re: Problem sa našim slovima kod generisanja SQL koda za prebacivanja baze iz XML u MySQL21.04.2016. u 10:44 - pre 96 meseci
Tačno tako - ovo je Windows 1250 encoding.


Uzgred, anagram 6 nije tačan, nema B, a ima R u anagramu...

[Ovu poruku je menjao djoka_l dana 21.04.2016. u 12:00 GMT+1]
Prikačeni fajlovi
 
Odgovor na temu

karlson

Član broj: 324415
Poruke: 29
109.175.99.*



+1 Profil

icon Re: Problem sa našim slovima kod generisanja SQL koda za prebacivanja baze iz XML u MySQL22.04.2016. u 07:44 - pre 96 meseci
Hvala za pomoć i izvinjavam se zbog ovog encodinga, nisam znao da se treba dodatno podesiti i u Excelu.
Inače, kojim alatom prepoznajete encoding nekog fajla?

@djoka_l
Dobro si zapazio. :)
Ispravnost ovih anagrama je poseban problem koji mi sada nije prioritet...
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Problem sa našim slovima kod generisanja SQL koda za prebacivanja baze iz XML u MySQL22.04.2016. u 08:55 - pre 96 meseci
Očima. Menjaš enkoding dok ne vidiš da su sva slova OK. Teoretski, moglo bi neko statističko prepoznavanje da se obavi bazirano na n-gramima.

http://superuser.com/questions...auto-detect-text-file-encoding

Pretpostavljam da neki editori imaju ugrađenu detekciju.
 
Odgovor na temu

karlson

Član broj: 324415
Poruke: 29
109.175.103.*



+1 Profil

icon Re: Problem sa našim slovima kod generisanja SQL koda za prebacivanja baze iz XML u MySQL27.04.2016. u 15:08 - pre 96 meseci
Da zaključim ovu temu zbog nekog ko će možda nekad imati ovakav problem.

Sam encoding u UTF-8 za CSV fajl mi nije riješio problem.

Malo sam pogledao opcije za gorepomenutu LOAD DATA INFILE naredbu.
Pa u njoj ima (a i gore se koristi):
Code:

OPTIONALLY ENCLOSED BY '"'

Tako da sam prvo u Excelu svakom polju na početku i kraju dodao znak # (umjesto navodnika,
jer se oni pojavljuju u nekim poljima, pa mi je stvaralo novi problem), a onda koristio ovako:
Code:

OPTIONALLY ENCLOSED BY '#'

i tek tada je sve bilo manje-više OK...
 
Odgovor na temu

dakipro
Dalibor Jovic
Web Developer
Bergen, Norway

Moderator
Član broj: 31848
Poruke: 1792
*.bb.online.no.

Sajt: norway.dakipro.com


+190 Profil

icon Re: Problem sa našim slovima kod generisanja SQL koda za prebacivanja baze iz XML u MySQL27.04.2016. u 18:14 - pre 96 meseci
Hvala sto si podelio rešenje
 
Odgovor na temu

karlson

Član broj: 324415
Poruke: 29
109.175.99.*



+1 Profil

icon Re: Problem sa našim slovima kod generisanja SQL koda za prebacivanja baze iz XML u MySQL28.04.2016. u 11:24 - pre 96 meseci
Pa to je najmanje što ovdje mogu uraditi za druge...
 
Odgovor na temu

[es] :: PHP :: PHP za početnike :: Problem sa našim slovima kod generisanja SQL koda za prebacivanja baze iz XML u MySQL

[ Pregleda: 8598 | Odgovora: 15 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.