Autor Zpráva
8vm8
Profil
Ahoj, mám skript pro výpis dat z tabulky v databázi. Vše funguje až na to, že mi nefunguje diakritika. Namísto třeba "hlavní stránka" mi to vypíše "Hlavn� str�nka". Tady na fóru jsem se dočetl že by se mělo před sql dotaz napsat mysql_query("SET NAMES 'UTF8'");, ale stejně to nefunguje. Už jsem zkoušel i cp1250 ale pořád beze změny. V databázi používám UTF-8, při změně na CP1250 je výsledek pořád stejný. Dík za každou radu! Skript mám napsaný takto:

<?php
include ("php/connect.php");  
            $objekt_vysledku=mysqli_query($db_spojeni, 'SELECT * FROM horni_panel');
            mysql_query("SET NAMES 'UTF8'"); 
            while ($odkaz = mysqli_fetch_array($objekt_vysledku))
                {
                    echo $odkaz['odkaz'];
                }
            include("php/disconnect.php");
?>
laijk
Profil
skús namiesto mysql_query("SET NAMES 'UTF8'");
napísať toto:

mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET utf8");
mysql_query("SET collation_connection='utf8_czech_ci'");

-mne to pomohlo, dúfam, že máš stránku aj údaje v DB kódované v UTF-8
8vm8
Profil
Právě že mám, zkusím to, dík.


Nefunguje to. Zkusil jsem i cp1250.
Joker
Profil
laijk:
skús namiesto mysql_query("SET NAMES 'UTF8'");
napísať toto:
Ne, je to zbytečné.
Příkaz SET NAMES nastaví vše co SET CHARACTER SET a také nastavuje collation_connection (implicitně na výchozí hodnotu daného kódování).
Čili dotaz SET NAMES 'utf8' COLLATE 'utf8_czech_ci' udělá to stejné jako ty tři dotazy.

8vm8:
A v databázi jsou data uložena správně? Třeba při pohledu v phpMyAdminu (v kódování UTF-8)? Web má nastavené kódování UTF-8?
abc
Profil
8vm8:
Ja bych to volal před mysql_query:
...
mysql_query("SET NAMES 'UTF8'"); 
$objekt_vysledku=mysqli_query($db_spojeni, 'SELECT * FROM horni_panel');
...            

Pozn: jednou tam máš mysql_query a jednou mysqli_query
8vm8
Profil
Už jsem opravil to mysqli ale stejně to nefunguje, teď mi to dokonce píše error (Warning: mysqli_query() expects at least 2 parameters, 1 given in C:\ComplexWebServer\http_docs\machyweb\index.php on line 15).

Kód teď vypadá takto:
<?php
            include ("php/connect.php");  
            $objekt_vysledku=mysqli_query($db_spojeni, 'SELECT * FROM horni_panel');
            mysqli_query("SET NAMES 'UTF-8'");   
            while ($odkaz = mysqli_fetch_array($objekt_vysledku))
                {
                    echo $odkaz['odkaz'];
                }
            include("php/disconnect.php");
            
         ?>
abc
Profil
8vm8:
1) Jistě jsi si tu chybu přeložil a zjistil, že ta fce očekává 2 parametry, ale dáváš jí jen jeden...
2) jsi ty 2 volání neprohodil
3) mysqli_query($db_spojeni, "SET NAMES 'UTF-8'"); doporučuju volat už v souboru connect.php, budeš mít o starost míň
Správně to je takto:
<?php
            include ("php/connect.php");
            //nejprve SET NAMES
            mysqli_query($db_spojeni, "SET NAMES 'UTF-8'");   
            //potom další dotazy
            $objekt_vysledku=mysqli_query($db_spojeni, 'SELECT * FROM horni_panel');

            while ($odkaz = mysqli_fetch_array($objekt_vysledku))
                {
                    echo $odkaz['odkaz'];
                }
            include("php/disconnect.php");
            
         ?>
8vm8
Profil
Tak už jsem to opravil, správně i s diakritikou mě to funguje takto:

<?php
            include ("php/connect.php");
            $objekt_vysledku=mysqli_query($db_spojeni, "SET NAMES 'utf8'"); //takhle se správně nastaví čeština
            $objekt_vysledku=mysqli_query($db_spojeni, 'SELECT * FROM horni_panel'); //a dále pokračuje práce s databází
            while ($odkaz = mysqli_fetch_array($objekt_vysledku))
                {
                    echo $odkaz['odkaz'];
                }
            include("php/disconnect.php");
            
         ?>

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: