NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Mysql a znaky?

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
oggymotslp
Člen
Avatar
oggymotslp:15.9.2016 17:35

Ahojte,

mám tu problém. Mám novinky a na jedné stránce to v pohodě vypíše nadpisy a na druhé asi takto "Nemáme zájem ". V databázi je to ukládané tím tipem "Nemáme zájem ". Nevím kde je chyba, asi někde v převodu znaků. Databáze má nastavené formátování na UTF-8 czech a stránka má v hlavičce charset taky na UTF-8.

Na stránce kde to nefunguje je to takto:

<?php
        require_once 'connect.php';
        include 'Db.php';
        Db::connect($server, $user, $db, $pass);
        mysql_query("SET character_set_results=utf8");
        mysql_query("SET character_set_connection=utf8");
        mysql_query("SET character_set_client=utf8");
        mysql_query("SET names='utf8';");

        if (isset($_GET['id']))
        {

        }
        else
        {
                header('Location: index.php');
        }

        $row = Db::queryOne('
        SELECT *
        FROM novinky
        WHERE id=?
        ', $_GET['id']);


        ?>
        <article>
                <header>
                        <h2><?php if (isset($row['titulek'])) echo($row['titulek']); ?></h2>
                        <div class="delicObsah"></div>
                </header>
                <section>
                <i><a href="index.php">Blog</a> > <?php if (isset($row['titulek'])) echo($row['titulek']); ?></i>
                </br>
                <?php if (isset($row['obsah'])) echo($row['obsah']); ?>
                </br>
                <?php if (isset($row['datum'])) echo($row['datum']); ?>
                </section>
        </article>

Byl bych rád za pomoc :).

Odpovědět
15.9.2016 17:35
Proč to dělat jednoduše, když to jde i složitě :D
Avatar
mkub
Tvůrce
Avatar
Odpovídá na oggymotslp
mkub:15.9.2016 18:07

a co takto urcit platne kodovanie znakov v PHP kode, ako aj si vybrat kodovanie znakov v MySQL pri vytvarani tabuliek a databaze, ako aj na webovej stranke?

 
Nahoru Odpovědět
15.9.2016 18:07
Avatar
oggymotslp
Člen
Avatar
Odpovídá na mkub
oggymotslp:15.9.2016 18:09

S problémem jsem postoupil a převedl databázi do UTF-8, ale zjistil jsem, že chyba není v databázi, ale v zápisu přes formulář. Něco zapíšu a uloží to do databáze s těmi znaky.

Skript na vytváření novinek:

<?php
        session_start();
        if(!isset($_SESSION["login"]))
        {
                header('Location: login.php');
                exit();
        }
        include 'connect.php';

        $novinka = array(
        'titulek' => '',
        'obsah' => '',
        'datum' => '',
        );


        if($_POST)
        {
                $titulek = $_POST["titulek"];
                $obsah = $_POST["obsah"];
                $datum = date("H:i d.m.Y", time());

                $sql = "INSERT INTO novinky (titulek, obsah, datum) VALUES ('$titulek', '$obsah', '$datum')";

                if($con->query($sql))
                {
                        header('Location: administrace.php');
                        exit();
                }
        }
?>

<!DOCTYPE html>
<html lang="cs">
<head>
        <meta charset="UTF-8">
        <title>Editor</title>
</head>
<body>
        <form method="POST">
                <label for="titulek">Titulek</label>
                <input type="text" name="titulek">
                <textarea name="obsah"></textarea>
                <input type="submit" value="Odeslat">
        </form>

        <script type="text/javascript" src="//tinymce.cachefly.net/4.0/tinymce.min.js"></script>
        <script type="text/javascript">
                tinymce.init({
                        selector: "textarea[name=obsah]",
                        plugins: [
                                "advlist autolink lists link image charmap print preview anchor",
                                "searchreplace visualblocks code fullscreen",
                                "insertdatetime media table contextmenu paste"
                        ],
                        toolbar: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image",
                        entities: "160,nbsp",
                        entity_encoding: "named",
                        entity_encoding: "raw"
                });
        </script>
</body>
</html>
Nahoru Odpovědět
15.9.2016 18:09
Proč to dělat jednoduše, když to jde i složitě :D
Avatar
Jiří Fencl
Člen
Avatar
Jiří Fencl:15.9.2016 20:32

Muzes zkusit udelat formu atribut accept-charset, taky tinyMCE jde i bez RAW modu a da se mu nastavit cestina pres language : "cs_CZ" (musis si stahnout soubor).

Ale muj tip je, ze by jsi mel v php hned po pripojeni do DB spustit query "SET NAMES UTF8"

Editováno 15.9.2016 20:33
 
Nahoru Odpovědět
15.9.2016 20:32
Avatar
Odpovídá na Jiří Fencl
Josef Kuchař - Pepa489:15.9.2016 20:36

už je to fixnuté, stačilo použít pdo místo query()

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
15.9.2016 20:36
2x piš, jednou debuguj
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 5 zpráv z 5.