"Vadné" kódování při ukládání do DB

Dobrý den, ukládám zprávy z http://grelek.wz.cz/chat/ do DB. Vše funguje jak má, už zabezpečuji apod. ale, nefunguje mi tam kódování. Ukázka kódu:

<?php
//adresar-insert-firma.php

$hostName="mysql.webzdarma.cz" ;
$databaseName = "user" ;
$userName="user" ;
$password="user" ;


// sestavení SQL dotazu pro vložení firmy
$dotaz_kodovani = 'SET NAMES utf8';
$dotaz_pridat_zpravu = 'INSERT INTO chatOdeslane(Jmeno, Zprava)
VALUES("%s", "%s")';


// pripojeni k databazi
if (!($link=mysql_pconnect($hostName, $userName, $password))) {
echo 'error connecting to host' . $hostName . ' by user ' . $userName;
exit();
};

// vyber databaze
if (!mysql_select_db($databaseName, $link)) {
echo 'Error in selecting ' . $databaseName . ' database';
echo 'Error: ' . mysql_errno($link) . mysql_error($link);
exit();
};

// vykonani SQL dotazu dotaz_kodovani
if (!mysql_query($dotaz_kodovani, $link)) {
echo 'Error in executing ' . $dotaz_kodovani;
echo 'Error: ' . mysql_errno($link) . mysql_error($link);
exit();
};

// vykonani SQL vyrazu pridani zpravy
if (!mysql_query(sprintf($dotaz_pridat_zpravu, $_POST['jmeno'], $_POST['zprava'], 'A'))) {
echo 'Error in executing ' . $dotaz_pridat_zpravu;
echo 'Error: ' . mysql_errno($link) . mysql_error($link);
exit();
};

?>

Chtěl bych se zeptat kde je problém? A ano, vím že toto nemáte rádi ale zrovna v tomto případě nevím, jaký úryvek kódu bych sem měl vložit, protože s SQL jsem začátečník.

Děkuji za odpovědi
Záleží na tom, kde ti to kódování "nefunguje".

Jednak je třeba zkontrolovat nastavení sloupců, do kterých ukládáš (tedy Jmeno a Zprava). PhpMyAdmin na webzdarma tam defaultně strká švédštinu. Proto záleží:
a) v jakém kódování tam obsah vůbec rveš (většina prohlížečů při vyplňování inputů používá stejné kódování, jako má stránka uvedené v hlavičce)
b) v jakém kódování jej vypisuješ (nezapomenout použít SET NAMES i pro spojení, které provádí Select. Navíc často se objevuje, že kódování v databázi má někdo správně, ale rozbíji jej až špatné nastavení v html hlavičce :)
c) případně, kde se zobrazuje divně -- jestli při zpracování Selectu nebo v phpMyAdminovi ;)

Druhá věc je dotaz SET NAMES, parametru 'utf8' by měl být v uvozovkách, ale to by nemělo hrát roli.

Za třetí pokud už se rozhodneš ve funkci mysql_query používat parametr $link, používej jej všude -- vyhneš se tam případným problémům, kdy nastavíš kódování pouze pro jedno z vytvořených spojení (teď teda pominu fakt, že pro takové případy je lepší použít trvalé spojení (4. parametr mysql_connect)).

A poslední věc.. nevím, co si představuješ pod pojmem "už zabezpečuji", ale v samotném dotazu vidím natvrdo použité $_POST. Pokud už dříve neproháníš tyto hodnoty např. přes htmlspecialchars, tak bys měl použít mysql_real_escape_string. Aktuální stav dle mého pohledu (přestože nevidím celý kód) příliš zabezpečený není ;)
S heslem, ktere jsi uvedl v jinem foru jsem udelal export tabulky

CREATE TABLE `chatOdeslane` (
`ID` int(2) NOT NULL auto_increment,
`Jmeno` char(20) collate latin2_czech_cs NOT NULL,
`Datum` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`Zprava` char(255) collate latin2_czech_cs NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=32 DEFAULT CHARSET=latin2 COLLATE=latin2_czech_cs AUTO_INCREMENT=32 ;

Cili by bylo tez dobre prihlasit se do phpmyadmina a pomenit sloupce na
porovnani = utf8_czech_ci (collate latin2_czech_cs). Podobne pro celou tabulku (CHARSET=latin2)

Na sql prikazy si udelej funkci, ktere predas sql dotaz a parametry a on to zformatuje a provede.

Pokud nemas zrovna obarvovas sql prikazu, tak muzes pouzit pekny online nastroj (pridat do zalozek prohlizece)
http://www.dpriver.com/pp/sqlformat.htm
zvolit: Mysql
vlozit: SET NAMES utf8
klik na Format SQL
a kdyz to zformatuje a obarvi, pak je prikaz spravne.
Pripadne muzes sql prikazy testovat a tvorit primo v phpmyadminu, zalozka SQL.

A pak by byl dobry odkaz na stranku, kvuli zkouknuti kodovani, ale ted ti to pise chybu na radku 98, takze toho moc nezjistime.
http://grelek.wz.cz/chat/index.php
Pripadne se muzes jeste s nekym domluvit, ze mu das heslo a bude ti s tim pomahat primo. Zatim to vypada, ze budes mit spoustu zacatecnickych dotazu :)
Tak, už v pohodě ukládám do databáze a přesunul jsem se k vybírání ale, problém nastane ve chvíli kódování při ukládání.
Stránka je vytvořená ve Windows-1250, ale když zadám SET NAMES Windows-1250 (nebo cp-1250), vyskočí error že toto nezná ať s tim vyfičím ..

Ale, když stránku převedu do kódování UTF-8, nezobrazuje se správně stránka, ale zase se dobře ukládají data do databáze.. zkoušel jsem i UTF-16, ale výsledek byl stejný.

Viz. http://grelek.wz.cz/chat/

P.S. Vím, že tam je SQL injection, to mě nijak moc nejde, ale snažím se pochopit regulární výrazy .. :)
Na problém, jsem přišel. Databáze nezná kódování CP-1250 nýbrž CP1250 :).
Vida, kódování Windows-1250 jsem na webu nikdy nepoužíval, tak mě nenapadlo, že máš ten název špatně. Teprve teď jsem si všiml, že v tomto kódování máš prezentaci. Jde to sice různě kombinovat a překovávat, ale nejlepší je mít to všude stejně.

UTF-16 se na web nehodí, UTF-8 je mnohem lepší i kvůli kompatibilitě s ASCII, ale hlavně je úspornější na prostor i přenosovou linku.