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

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

Aktivity (1)
Avatar
Jan Demel
Redaktor
Avatar
Jan Demel:31.12.2013 15:21

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
Neaktivní uživatel:31.12.2013 15:28
// ...
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
Neaktivní uživatelský účet
Avatar
mkub
Redaktor
Avatar
Odpovídá na Jan Demel
mkub:31.12.2013 15:30
  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:31.12.2013 15:36

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:31.12.2013 15:36

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:31.12.2013 16:01

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:31.12.2013 16:03

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:31.12.2013 16:19

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:31.12.2013 16:49

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 Neaktivní uživatel
Jan Demel:31.12.2013 16:51

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:31.12.2013 17:02

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

Nahoru Odpovědět 31.12.2013 17:02
Student FIT ČVUT. Followuj mě na https://twitter.com/tenhobi a ptej se na https://github.com/HoBi/ama.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Jan Demel
Kit:31.12.2013 17:08

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:31.12.2013 17:10

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:31.12.2013 17:12

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ý:31.12.2013 17:17

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:31.12.2013 17:23

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:31.12.2013 17:25

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:31.12.2013 17:27

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ý:31.12.2013 17:29

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:31.12.2013 17:32

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ý:31.12.2013 17:38

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
Odpovídá na Jan Demel
Neaktivní uživatel:31.12.2013 17:46

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
Neaktivní uživatelský účet
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.