Diskuze: Problémy s kódováním

PHP PHP Problémy s kódováním American English version English version

Avatar
Jan Demel
Redaktor
Avatar
Jan Demel:

Zdar lidi. Mám tu opět problém s kódováním ... no a nevím, kde je chyba. jedná se o to, že chci zobrazit data, která jsou převzaty z MySQL. No ale v momentě, kdy tohle zkusím se stane to, že mi to místo š píše nějáký divný znak ... něco jako otazník v kosočtverci. No v MySQL mám nastavené kódování na UTF-8 a v hlavičce HTML taky ... Prosím mohli by jste mi pomoct identifikovat kde je problém ?

index.php

<!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
    </head>
    <body>
        <?php
            //Připojení do databáze
            $pripojeni = mysql_connect('localhost', 'root', '');
            mysql_select_db('stranky');
            mysql_query("SET NAMES utf8 COLLATE utf8_czech_ci");
            //Samotný script

            $news = mysql_query("SELECT * FROM news", $pripojeni);

            $vysledek = mysql_fetch_assoc($news);

            echo($vysledek['id']);
            echo("<br>");
            echo($vysledek['title']);
            echo ("<br>");
            echo($vysledek['body']);
        ?>
    </body>
</html>
Odpovědět 31.12.2013 15:21
To co se zdá být nemožné, je vždy možné.
Avatar
Radim Sückr
Redaktor
Avatar
Radim Sückr:
// ...
mysql_select_db('stranky');
mysql_set_charset('utf8');
// ...

Zkus tohle. A taky se ujisti, že máš i ta data opravdu v UTF-8.

Rozhodně ale doporučuji opustit "mysql_*" funkce a přejít třeba na PDO, případně použít už rovnou nějakou hotovou knihovnu, např. dibi.

 
Nahoru Odpovědět  +1 31.12.2013 15:28
Avatar
mkub
Redaktor
Avatar
Odpovídá na Jan Demel
mkub:
  1. PHP kod by si mal dat hned na zaciatok suboru,
  2. este skor, nez sa posle nieco do vygenerovaneho HTML kodu, treba:

header("Content-Type: text/html; utf8");

inak to sa tu uz zoparkrat premielalo...

a tvoj kod by som komplet prepisal, lebo hrozi, ze budes mat z toho mix HTML a PHP kodu a rychlo sa v tom stratis

 
Nahoru Odpovědět  -1 31.12.2013 15:30
Avatar
mkub
Redaktor
Avatar
Odpovídá na Jan Demel
mkub:

a lepsi sposob nez pouzivat ovladac mysql je pouzit PDO, lebo PDO umoznuje osetrit aj SQL injection...

a ak tvoj script produkuje v kuse celu stranku, tak je lepsie si ju pripravit a az potom vsetko naraz zobrazit pomocou jedneho prikazu echo ()

 
Nahoru Odpovědět 31.12.2013 15:36
Avatar
Kit
Redaktor
Avatar
Odpovídá na Jan Demel
Kit:

Jako obvykle ti tam chybí:

SET NAMES utf8
Editováno 31.12.2013 15:37
Nahoru Odpovědět 31.12.2013 15:36
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Jan Demel
Kit:

Možná tam jsou ta data nahraná v chybné znakové sadě. V tom případě je tam nahraj znovu.

Nahoru Odpovědět 31.12.2013 16:01
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Jan Demel
Kit:

Proč se vlastně přihlašuješ jako 'root'?

Nahoru Odpovědět 31.12.2013 16:03
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
mkub
Redaktor
Avatar
Odpovídá na Kit
mkub:

asi nema vytvoreneho dalsieho uzivatela databazy na spravu

 
Nahoru Odpovědět 31.12.2013 16:19
Avatar
Jan Demel
Redaktor
Avatar
Odpovídá na Kit
Jan Demel:

Používám XAMPP a nechci se v tom moc vrtat, tak používám to, co je ;)

Nahoru Odpovědět 31.12.2013 16:49
To co se zdá být nemožné, je vždy možné.
Avatar
Jan Demel
Redaktor
Avatar
Odpovídá na Radim Sückr
Jan Demel:

Moc děkuju. Pomohlo to. Ale proč by jsem se měl učit PDO (ani nevím, co to je) když se teprve učím základy PHP ? O.o

Nahoru Odpovědět 31.12.2013 16:51
To co se zdá být nemožné, je vždy možné.
Avatar
Honza Bittner
Redaktor
Avatar
Odpovídá na Jan Demel
Honza Bittner:

Máš docela dost špatný přístup.

Nahoru Odpovědět 31.12.2013 17:02
Ptejte se mě na cokoli na https://github.com/HoBi/ama a followujte mě na Twitteru https://twitter.com/tenhobi. :-)
Avatar
Kit
Redaktor
Avatar
Odpovídá na Jan Demel
Kit:

Protože ovladač MySQL, se kterým pracuješ, v další verzi PHP už nebude.

Nahoru Odpovědět 31.12.2013 17:08
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Jan Demel
Redaktor
Avatar
Odpovídá na Kit
Jan Demel:

No a pochopím to, když se učím teprve základy PHP ?

Nahoru Odpovědět 31.12.2013 17:10
To co se zdá být nemožné, je vždy možné.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Jan Demel
Kit:

PDO je jednodušší na používání, protože je objektové.

Nahoru Odpovědět  ±0 31.12.2013 17:12
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Michael Olšavský:

Tohle "pravidlo" není až tak úplně pravidlo. ;) Pro začátečníka to nemusí být vůbec pravda :P

Editováno 31.12.2013 17:19
 
Nahoru Odpovědět  +1 31.12.2013 17:17
Avatar
Kit
Redaktor
Avatar
Odpovídá na Michael Olšavský
Kit:

Začátečník zpočátku myslí objektově, pak se přeškolí na procedurál a pak se zase přeškoluje objektově. To je podle tebe jednodušší?

Nahoru Odpovědět 31.12.2013 17:23
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Jan Demel
Redaktor
Avatar
Odpovídá na Kit
Jan Demel:

No a nějáký tutoriál na PDO ? :)

Nahoru Odpovědět 31.12.2013 17:25
To co se zdá být nemožné, je vždy možné.
Avatar
Juraj Mlich
Redaktor
Avatar
Nahoru Odpovědět 31.12.2013 17:27
Vždy je lepšie učiť sa z cudzích chýb, než z vlastných chýb.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Jan Demel
David Čápka:

Máme za tebe snad klikat do navigačního menu?

Nahoru Odpovědět 31.12.2013 17:27
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na Kit
Michael Olšavský:

Nechci rozpoutat další válku. Nesdílím tvůj názor, že co není objektově je špatně. Všechno má něco do sebe. Hlavně zde nikde nevidím, že by Jan Demel OOP uměl.

Proč by se někdo měl přeškolovat? Nezdá se mi těžké přecházet z jednoho na druhé...

 
Nahoru Odpovědět 31.12.2013 17:29
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Michael Olšavský
David Čápka:

Ono je úplně jedno co je dobře nebo špatně. Podstatné je tady to, že PHP procedurální přístup postupně ořezává, funkce mizí a jsou místo nich objekty. Proto v PHP už nemá smysl programovat jinak.

Nahoru Odpovědět  +2 31.12.2013 17:32
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na David Čápka
Michael Olšavský:

I v objektových jazycích lze programovat procedurálně. Každý programátor by si tento způsob měl alespoň vyzkoušet. Nevím proč bych při zápisu třeba matematického algoritmu nenáročného na data měl vytvářet několik zbytečných tříd... + Osobně si objektové začátky zrovna v PHP nedovedu představit.

 
Nahoru Odpovědět  +1 31.12.2013 17:38
Avatar
Radim Sückr
Redaktor
Avatar
Odpovídá na Jan Demel
Radim Sückr:

mysql_* funkce jsou přežitek. Teď jsou označeny nálepkou "NEPOUŽÍVAT, ZASTARALÉ" a v příštím PHP už nebudou (bohudík).

Stačí chtít a dřív nebo později se to PDO naučíš.

 
Nahoru Odpovědět 31.12.2013 17:46
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 23 zpráv z 23.