Brak polskich znaków po pobraniu z bazy MySQL

0

Witam serdecznie ponownie przerabiam teraz bazę danych MYSQL i mam problem mianowicie... chcę wyświetlić wszystkie rekordy z tabeli dane:

$wynik = mysql_query('select * from dane');
    while ($txt = mysql_fetch_assoc($wynik))
    {
    echo ($txt['Imie'].' '.$txt['Nazwisko'].' '.$txt['Data_urodzenia'].'<br />');
    }

I nie mam polskich znaków a jedynie krzaczki ;)
Adam Domys�w 2011-01-03

Jak wejdę do PHPMYADMIN metodę porównywania napisów mam ustawioną na

utf8_polish_ci
Plik edytuję w Notepad i mam formatowanie ustawione na UTF-8 bez bom a w nagłówku <head> pliku mam <meta charset ="UTF-8" />
I teraz obojętnie jaki tekst wpiszę poprzez echo ('ęąćźż'); to mam polskie znaki a to co pobiera z bazy mam krzaczki jak prawidłowo to wszystko ogarnąć żeby pojawiały się polskie znaki ;)
Z góry dziękuję za wyrozumiałość to dopiero drugi tydzień nauki... ;)

dodanie znaczników <code> oraz `` - fp

2

Użyj jak masz plik do połączenia z bazą danych

mysql_query("SET CHARSET utf8");
mysql_query("SET NAMES `utf8` COLLATE `utf8_polish_ci`"); 

Powinno pomóc

0
Madaoo napisał(a):

Użyj jak masz plik do połączenia z bazą danych

mysql_query("SET CHARSET utf8");
mysql_query("SET NAMES `utf8` COLLATE `utf8_polish_ci`"); 

Powinno pomóc

Dzięki ale to nie to było ;) Zrobiłem sobie za pomocą phpmyadmin tabelę i wpisałem dane i chciałem je odebrać i dlatego pokazywało krzaczki jak napisałem instrukcję wpisującą dane za pomocą php do mysql i potem ją wyświetliłem krzaczki zniknęły... mam serwer na Windowsie także podejrzewam że jak wpisuję normalnie dane za pomocą phpmyadmin wiem nigdy takich rzeczy się nie robi ;) to właśnie wpisuję chyba jako windows-1250 ;) czy jakoś tak ;) ale spoko problem rozwiązany...
Ale mam inną zagwozdkę

Ustawiłem sobie dane wymagane by skrypt zrobił wpis do tabeli. O załóżmy data urodzin nie jest wymagana. W mysql zrobiłem kolumnę o nazwie data_ur o typie DATE.
I teraz jak wypełnię pole w formularzu data załóżmy 2015-12-31 to jak wyświetlam potem dane z bazy to pokazuje mi tą datę ale gdy jej nie wpisze to pokazuje mi domyślnie 0000-00-00 czy można to jakoś zamienić by pokazywało nie wiem albo najlepiej tekst 'brak danych' albo puste pole ?? nie wiem za pomocą instrukcji if else myślę ale jak ją tam upakować chyba za pomocą zmiennej ??

Wywołanie wyniku mam w tabeli bo teraz zaczynam powoli to ogarniać...

$wynik = mysql_query('select * from dane');
    while ($txt = mysql_fetch_assoc($wynik))
    {
    echo (
        .'</td><td>'
            .$txt['p_z_b']
        .'</td><td>'
            .$txt['f_o_o']
        .'<tr><td>'
            .$txt['data_ur']
        .'</td></tr><br />');
  
    }

 

Zamiana danych może wyglądać tak:

 
    if ($txt == '0000-00-00')
        { 
            echo('brak danych');
        }
    else
        {
            echo($txt);
        }

Tylko w którym momencie to wcisnąć... ??

2
PYJTER napisał(a):

Dzięki ale to nie to było ;) Zrobiłem sobie za pomocą phpmyadmin tabelę i wpisałem dane i chciałem je odebrać i dlatego pokazywało krzaczki jak napisałem instrukcję wpisującą dane za pomocą php do mysql i potem ją wyświetliłem krzaczki zniknęły... mam serwer na Windowsie także podejrzewam że jak wpisuję normalnie dane za pomocą phpmyadmin wiem nigdy takich rzeczy się nie robi ;) to właśnie wpisuję chyba jako windows-1250 ;) czy jakoś tak ;) ale spoko problem rozwiązany...

problem OBSZEDŁEŚ. NAPRAW GO ZANIM UZUPEŁNISZ BAZĘ DANYMI w innym przypadku być może nie będziesz w stanie poprawnie wyeksportować bazy do pliku, a potem zaimportować (np. przy zmianie serwera, przywracaniu backupu). Jeżeli dane w phpmyadmin są widoczne normalnie, to na stronie też muszą!

Podane przez @Madaoo rozwiązanie jest dobre, tylko źle je zapewne zastosowałeś!

PYJTER napisał(a):

Ustawiłem sobie dane wymagane by skrypt zrobił wpis do tabeli. O załóżmy data urodzin nie jest wymagana. W mysql zrobiłem kolumnę o nazwie data_ur o typie DATE.
I teraz jak wypełnię pole w formularzu data załóżmy 2015-12-31 to jak wyświetlam potem dane z bazy to pokazuje mi tą datę ale gdy jej nie wpisze to pokazuje mi domyślnie 0000-00-00 czy można to jakoś zamienić by pokazywało nie wiem albo najlepiej tekst 'brak danych' albo puste pole ??

pola mogą mieć wartość NULL (jeżeli tak zdefiniowałeś swoją tabelę). skorzystaj z tej możliwości to nie będzie tych zer.

0
dzek69 napisał(a):
PYJTER napisał(a):

Dzięki ale to nie to było ;) Zrobiłem sobie za pomocą phpmyadmin tabelę i wpisałem dane i chciałem je odebrać i dlatego pokazywało krzaczki jak napisałem instrukcję wpisującą dane za pomocą php do mysql i potem ją wyświetliłem krzaczki zniknęły... mam serwer na Windowsie także podejrzewam że jak wpisuję normalnie dane za pomocą phpmyadmin wiem nigdy takich rzeczy się nie robi ;) to właśnie wpisuję chyba jako windows-1250 ;) czy jakoś tak ;) ale spoko problem rozwiązany...

problem OBSZEDŁEŚ. NAPRAW GO ZANIM UZUPEŁNISZ BAZĘ DANYMI w innym przypadku być może nie będziesz w stanie poprawnie wyeksportować bazy do pliku, a potem zaimportować (np. przy zmianie serwera, przywracaniu backupu). Jeżeli dane w phpmyadmin są widoczne normalnie, to na stronie też muszą!

Dzięki za uwagę dzisiaj nad tym popracuję myślałem że tak ma być... no export do pliku jest ważny bo będę chciał w końcowym etapie wyeksportować np. dane z bazy do pliku...

EDIT: Faktycznie jak @Madaoo pisał ustawienie:

 mysql_query("SET CHARSET utf8");
    mysql_query("SET NAMES `utf8` COLLATE `utf8_polish_ci`"); 

Pomogło i wyświetla wsio poprawnie i w phpmyadmin i w wynikach....

dzek69 napisał(a):
PYJTER napisał(a):

Ustawiłem sobie dane wymagane by skrypt zrobił wpis do tabeli. O załóżmy data urodzin nie jest wymagana. W mysql zrobiłem kolumnę o nazwie data_ur o typie DATE.
I teraz jak wypełnię pole w formularzu data załóżmy 2015-12-31 to jak wyświetlam potem dane z bazy to pokazuje mi tą datę ale gdy jej nie wpisze to pokazuje mi domyślnie 0000-00-00 czy można to jakoś zamienić by pokazywało nie wiem albo najlepiej tekst 'brak danych' albo puste pole ??

pola mogą mieć wartość NULL (jeżeli tak zdefiniowałeś swoją tabelę). skorzystaj z tej możliwości to nie będzie tych zer.

Tak teraz na szybko sprawdziłem faktycznie wartości NULL można ustawić i nie wpisuje wtedy nic do bazy...

dzek69 napisał(a):

Podane przez @Madaoo rozwiązanie jest dobre, tylko źle je zapewne zastosowałeś!

Dokładnie tak jak napisałeś... źle to zastosowałem... Ale teraz mam inny problem mianowicie jak i w ogóle czy można wywołać funkcję w takim przypadku:

$wynik = mysql_query('select * from dane');
    while ($txt = mysql_fetch_assoc($wynik))
    {    
         $data_urodzenia = ($txt['data_ur'] == '0000-00-00') ? 'Brak danych' : $txt['data_urodzenia'];
         $licznik = ($txt['data_ur'] == '0000-00-00') ? 'Brak danych' : ('Żyjesz: '.data($txt['data_urodzin']));
    echo (
        .'</td><td>'
            .$txt['p_z_b']
        .'</td><td>'
            .$txt['f_o_o']
        .'<tr><td>'
            .$data_urodzenia
         .'<tr><td>'
              .$licznik
        .'</td></tr><br />');
    }

Sama funkcja data działa bo jak wkleję ją zamiast $licznik to podaje mi wynik czyli wklejam .'Żyjesz: '.data($txt['data_urodzin']) i pokazuje mi Żyjesz: 2987dni np.... tylko właśnie jak jest 0000-00-00 wpis w bazie to pokazuje mi że żyję 16093...
Zobaczę jak zachowa się skrypt potem jak określę te wpisy jako NULL jak wtedy się skrypt zachowa mimo tego chciałbym wiedzieć czy można osadzać i w jaki sposób funkcję w while z mysql_fetch_assoc

Z góry dziękuję za wcześniejsze uwagi i podpowiedzi...

0

chciałbym wiedzieć czy można osadzać i w jaki sposób funkcję w while z mysql_fetch_assoc

nie rozumiem o co pytasz

0
dzek69 napisał(a):

chciałbym wiedzieć czy można osadzać i w jaki sposób funkcję w while z mysql_fetch_assoc

nie rozumiem o co pytasz

;)
Oki no to krócej jak wywołać moją funkcję o nazwie data w instrukcji skróconej if else:

$licznik = ($txt['data_ur'] == '0000-00-00') ? 'Brak danych' : ('Żyjesz: '.data($txt['data_ur']));

Chcę by dla zmiennej $licznik zwróciło wartość sprawdzając kolumnę data_ur i jeżeli wartość = 0000-00-00 to ma zwrócić wynik 'Brak danych' w innym wypadku ma zwrócić 'Żyjesz' i wyliczyć poprzez wywołanie funkcji data i pobranie wartości 'data_ur' i wyliczenie do dnia dzisiejszego ile żyje dany człowiek...

Nie wiem może źle rozumuje tak ja mówisz;)

EDIT:

Ogarnąłem ;) http://pl1.php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternary
empty - zwraca prawdę, jeżeli zmienna ma wartość pustą (np. NULL, 0 albo pusty ciąg tekstowy)

A ja miałem w bazie 0000-00-00 czyli nie zero ;) jak zamieniłem na NULL to skrypt poszedł od strzału ;)

2

No to żeby to zmienić na null to już mówiliśmy ;) w wersji z zerami krócej tego nie zapiszesz

1 użytkowników online, w tym zalogowanych: 0, gości: 1