Diskuze: PHP + MySQL = diakritika po 10000x
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 25 zpráv z 25.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Mám taký pocit že v phpMyAdmin sa ti znaky budú takto zobrazovať vždy,
aj keď máš nastavené na UTF-8. Mne to tak robí tiež hlavné je aby to na webe neblbo,
čož mne neblbne.
Přesně jak říká Matúš. A pokud ti to blbne i na webu, nevkládej tam
ty informace přímo, ale přes nějaký skript.
Webová aplikace nestojí na tom, jak se data někomu zobrazují v
phpMyAdmin, ale na tom, jak se zobrazují v prohlížeči.
A jak píše Jan Lupčík Když budeš mít problém se zobrazením i na
webu, bude to pravděpodobně tím, že jsou data do DB vložena přes
phpMyAdmin (tam se pak překvapivě zobrazují normálně)...
Když data do DB uložíš přes skript, budou se na webu zobrazovat hezky
česky...
Na webe sa mi to zobrazuje správne. Ale chcel by som to vyexportovať z
mysql. A to už je problém. Potreboval by som aby to bolo dobré v
tatabáze.
Neaké tipy?
Do jakého formátu?
V jakém kódování máš nastavenou DB v tom phpMyAdmin, potažmo celého
phpMyAdmina?
Zkus se mrknout na MySQL Workbench, třeba ti to s exportem pomůže...
Všetko kódujem do UTF-8. Možná je probém riešený tu:
https://wiki.phpmyadmin.net/…Garbled_data
Ale moc som tomu článku nepochopil
Na co to chceš exportovat ? Abys to použil v jiné databázi ? Tak to bude stejné jako teď - v pma se to bude ukazovat takto, na webu správně.
Pokud to chceš použít jinak, můžeš si napsat vlastní script který ti to bude exportovat.
Napríklad do databázy MS Access alebo PostgreSQL.
V životě jsem s PhpMyAdminem neměl problém
PHPMyAdmin to zobrazuje vždy správně. Pokud je to zobrazené špatně, tak je špatně ta DB. Aplikace to tam vkládala pod špatným kódováním a teď je to rozhozené. Proto se ti to nedaří nijak spravit, není co.
Píšeš o tom exporte alebo o zobrazení v phpmyadmin?
O zobrazení. Tvůj web ti může teoreticky fungovat správně, protože data špatná ukládá a pak je špatně načítá. Každopádně to asi není tak, jak by to mělo být.
Tak to sa na to budem musiet pozriet dik
David, ty si mal predsa len pravdu http://www.itnetwork.cz/zed/5840
Vyřešilo se to teda nějak? Já to mám taky tak, že se mi data do DB ukládají jako kliky háky, ale když to vypíšu zpět do webu tak se mi to zobrazí normálně.
když jsem vytvářel DB, tak jsem jí nastavil character set ut8 i collate utf8_czech_ci, set names utf8 jsem zkusil a přesto mi to tam nezapisuje tak jak bych chtěl.
Tak bych se teda chtěl zeptat, jestli se to vyřešilo nějak?
Díky
Ono není co řešit, phpmyadmin samozřejmě funguje správně, chyba je
někde v postupu.
Databáze musí mít nastavenou utf8 (90% pravděpodobnost chyby, jelikož to
často není default), řádek musí mít nastaveno utf8, soubory musí být v
utf8 a spojení musí být v utf8.
U mna to nakoniec bola chyba v kóde PHP, kedy som pri pripojení na databázu nedal vedieť že chcem používať UTF-8 a namiesto stringu "UTF-8" som posielal NULL
Btw hned druhý komentár čo som napísal je hlúuuuposť!!! sry za to
Je velice dobré mít nastavený i samotný soubor na UTF-8, ale ne jenom pro html výstup, ale i samotný soubor pro script, který se s tím pak musí poprat.
Na ty soubory používám ale kódování UTF-8 bez BOM a formát Dos/Windows.
Dříve jsem se s tím pral podobně, ale jakmile mám vše opravdu na UTF-8, tak je skoro nemožné, aby se něco vypisovalo jinak.
Nemám ale zkušenost s nastavováním vlastního serveru a nevím co lze
vše ovlivnit
já už jsem zkusil snad všechno tak pošlu screen kodu a vypisu v phpmyadmin a jak se to zobrazuje na webu. doufám, že neporušuju nějaká pravidla když vložim odkaz, chtěl jsem obrázek, ale to asi nejde.
bohužel nejde ani edit tak musím dát další příspěvek...
už jsem na to přišel, kde byl problém.
Když jsem vytvářel DB a tabulky tak jsem jim nastavil utf-8 to je sice v pořádku, ale ještě to chtělo před příkazem INSERT_INTO ( např v jiném souboru) dát před tímto příkazem:
mysqli_query($spojeni,"SET NAMES 'utf8'");
takže nakonec to byla chyba v tom kodování, ale kdo to moh vědět tak sry za spam klidně smažte
...
každopádně díky za rady
Mám problém s ukládáním diakritiky do databáze a výpis diakritiky z
ní..
Všechny sloupce v tabulce mám nastavené porovnávání na
utf8_czech_ci
a tabulku samotnou taky.
V mém případě mám u formuláře login a registration nastavené na
začátku kódu
<meta charset="utf-8">
.. Nevím co dál.. Přiložím zde zdrojáky, které s tím souvisí a kdyby vám zdrojáky přišli divný že tam chybí hodně věcí, tak mám udělané stránkování, takže to je ten důvod..
registrace:
<?php
include "./db.php";
?>
<?php
if (isset($_GET["failed"])) {
$msg = "";
switch ($_GET["failed"]) {
case "1":
$msg = "Uživatelské jméno musí obsahovat alespoň 3 znaky.";
break;
case "2":
$msg = "Jméno musí obsahovat alespoň 3 znaky.";
break;
case "3":
$msg = "Příjmení musí obsahovat alespoň 3 znaky.";
break;
case "4":
$msg = "Email je zadán špatně.";
break;
case "5":
$msg = "Heslo musí obsahovat více jak 5 znaků.";
break;
case "6":
$msg = "Hesla se neshodují.";
break;
case "7":
$msg = "Datum narození musíte zadat v formátu dd/mm/yyyy.";
break;
default:
# code...
break;
}
if (isset($msg)) {
echo "<script type=\"text/javascript\"> alert(\"". $msg ."\") </script>";
}
}
?>
<meta charset="utf-8">
<form method="post" action="./login-registration_action/action_registration.php" style="position: absolute;
top: 300px;">
<input type="text" name="username" placeholder="Uživatelské jméno" required><br>
<input type="text" name="name" placeholder="Jméno" required><br>
<input type="text" name="lastname" placeholder="Příjmení" required><br>
<input type="text" name="email" placeholder="E-mail" required><br>
<input type="password" name="password" placeholder="Heslo" required><br>
<input type="password" name="password_check" placeholder="Heslo znovu" required><br><br>
<b>Jakého jste pohlaví?</b><br>
<input type="radio" name="gender" value="muz" checked>Muž<br>
<input type="radio" name="gender" value="zena">Žena<br>
<input type="radio" name="gender" value="jine">Jiné<br><br>
<b>Kdy jste se narodil/a?</b><br>
<input type="text" name="birth" placeholder="dd/mm/yyyy" required>
<br><br>
<input type="submit" name="submit" value="Zaregistrovat se">
</form><br><br><br>
registrace_action:
<?php
session_start();
include "../db.php";
$username = $_POST["username"];
$name = $_POST["name"];
$lastname = $_POST["lastname"];
$email = $_POST["email"];
$password = $_POST["password"];
$password = hash("sha256", $password);
$password_check = $_POST["password_check"];
$password_check = hash("sha256", $password_check);
$gender = $_POST["gender"];
$birth = $_POST["birth"];
//podmínky pro USERNAME
if (strlen($username) <= 2) {
header("location: ../index.php?stranka=registration&failed=1");
}
// podmínky pro NAME
if (strlen($name) <= 2) {
header("location: ../index.php?stranka=registration&failed=2");
}
// podmínky pro LASTNAME
if (strlen($lastname) <= 2) {
header("location: ../index.php?stranka=registration&failed=3");
}
// podmínky pro EMAIL
if (strstr("@", $email) || strstr(".cz", $email) || strstr(".com", $email) || strstr(".sk", $email)) {
header("location: ../index.php?stranka=registration&failed=4");
}
// podmínky pro PASSWORD
if (strlen($_POST["password"]) < 5) {
header("location: ../index.php?stranka=registration&failed=5");
}
if ($_POST["password_check"] != $_POST["password"]) {
header("location: ../index.php?stranka=registration&failed=6");
}
//podmínky pro BIRTH
$date = date_create_from_format('d/m/Y', $birth);
if ($date === false) {
header("location: ../index.php?stranka=registration&failed=7");
}
$sqldotaz = "INSERT INTO basket_users (username_user ,name_user, lastname_user, email_user, password_user, gender_user, birth_user) VALUES (:username, :name, :lastname, :email, :password, :gender, :birth)";
$sqlProvedeni = $db->prepare($sqldotaz);
$sqlProvedeni->execute(array(":username" => $username, ":name" => $name, ":lastname" => $lastname, ":email" => $email, ":password" => $password, ":gender" => $gender, ":birth" => $birth));
echo "<script type=\"text/javascript\"> alert(\"Byl jste úspěšně zaregistrován.. Nyní se přihlašte..\") </script>" . "<a href=\"../index.php\">Zpět</a>";
//}
?>
přihlášení:
<?php
include "./db.php";
?>
<!DOCTYPE html>
<html>
<head>
<title>login</title>
<meta charset="utf-8">
</head>
<body>
<?php
if (isset($_GET["failed"])) {
echo "<script> alert(\"Zadal jste špatně uživatelské jméno nebo heslo..\") </script>";
}
?>
<form method="post" action="./login-registration_action/action_login.php" style="position: absolute;
top: 300px;">
<input type="text" name="username" placeholder="Uživatelské jméno" required>
<input type="password" name="password" placeholder="Heslo" required>
<input type="submit" name="login" value="Přihlásit se">
</form>
</body>
</html>
přihlášení_action:
<?php
include "../db.php";
session_start();
$username = htmlspecialchars($_POST["username"]);
$password = $_POST["password"];
$password = hash("sha256", $password);
$sqlDotaz = "SELECT * FROM basket_users WHERE username_user = :username AND password_user = :password LIMIT 1"; //počet záznamů
$sqlProvedeni = $db->prepare($sqlDotaz);
$sqlProvedeni->execute(array(":username" => $username, ":password" => $password));
if ($sqlProvedeni->rowCount() == 1) { // když se přihlašovací údaje rovnají jednomu řádku v tabulce, takže uživatel s takovými údaji existuje, tak =>
$result = $sqlProvedeni->fetch(PDO::FETCH_ASSOC); // vrací pole indexované podle sloupce ID_USER a vrátí sadu výsledků
$id_user = $result["id_user"];
$username_user = $result["username_user"];
$name_user = $result["name_user"];
$lastname_user = $result["lastname_user"];
$email_user = $result["email_user"];
$password_user = $result["password_user"];
$gender_user = $result["gender_user"];
$birth_user = $result["birth_user"];
$_SESSION["user"] = array($_SESSION["id_user"] = $id_user,
$_SESSION["username_user"] = $username_user,
$_SESSION["name_user"] = $name_user,
$_SESSION["lastname_user"] = $lastname_user,
$_SESSION["email_user"] = $email_user,
$_SESSION["password_user"] = $password_user,
$_SESSION["gender_user"] = $gender_user,
$_SESSION["birth_user"] = $birth_user);
header("location: ../index.php");
} else {
header("location: ../index.php?stranka=login&failed");
}
?>
Hele jsem začátečník v php ,ale podobný problém jsem měl taky a
vyřešil jsem ho tak že ve scriptu db.php jsem nastavil na utf-8 a fungovalo
to.Já to tedy dělal přes mysql takže mysql_set_charset('utf8') a v PDO by
šlo
$dbt->exec('SET NAMES utf8')
Doplnil bych Marka Uhlíře, je potřeba nastavit znakovou sadu přenosu dat z databáze => tři nastavení znakové sady - v databázi, ve stránce a přenosu
Zobrazeno 25 zpráv z 25.