Autor Zpráva
lenkasui
Profil
V phpmyadminu vidim kodovani u tabulek v databazi: latin1_general_ci

v mysql vidím při výpisu z tabulky:
grafika týlo

na localhostu při spuštěném skriptu mám špatnou češtinu:
vypisuje mi to: Grafika t?lo

co s tím prosím mohu udělat? Je to v nastavení mysql nebo v kódu php?


v kódu php začínám takto:
<font face="tahoma" size="2" color="black">
<table border="0" width="100%" id="table1" cellspacing="0" cellpadding="0">
<META http-equiv="Content-Type" content="text/html; charset=Windows 1250">
<?php
***
*
**
*



pokud chci správně vkládat češtinu do mysql, musím před zadáváním nastavit kódování - formát češtiny v mysql?
a jaký, UTF? o kterém se tady píše ? nebo jiný....


vím, že se o tomto píšou dlouhé diskuze, nicméně nepomohly mi, proto píšu detaily toho, co mi nefunguje a prosím o radu
Taps
Profil
lenkasui
Když máš nastavené kodování souborů na win-1250, pak musíš použít kodování v databázi cp1250_czech_cs

Podívej se na http://molhanec.net/mysql_cestina_minifaq.html#prehled třeba ti to pomůže
Joker
Profil
lenkasui
V phpmyadminu vidim kodovani u tabulek v databazi: latin1_general_ci
No, znaková sada latin-1 (tj. západoevropská) v první řadě vůbec neobsahuje znak "ě" a některé další české znaky. Češtinu s diakritikou bych v téhle znakové sadě neukládal.

Druhá věc, jak se vyhnout problémům s kódováním- máme:
- kódování souboru skriptu, který data do databáze zapisuje (tj. v čem je uložený zapisující skript)
- kódování, ve kterém databáze očekává komunikaci od klienta (nastavuje se přes SET NAMES)
- kódování dat v daném sloupci (to je to, co je napsáno např. v phpMyAdminu u toho sloupce, nastavuje se přes DEFAULT CHARSET při vytváření tabulky)
- kódování souboru výsledné stránky (v čem je uložený soubor s výstupní stránkou nebo skriptem)
- kódování v hlavičce výsledné stránky (tj. co sama stránka uvádí jako své kódování, nastavuje se přes HTTP hlavičku anebo META Content-type)

Minimálně první dvě odrážky musí používat stejné kódování a poslední dvě taky stejné.
Nejbezpečnější a nejjednodušší cesta je používat všude stejné kódování.
lenkasui
Profil
Tapsi, děkuji,

když jsem změnila v phpmyadminovi, v databázi, tabulce a příslušném sloupci kódování, dala jsem aktualizovat skript, jako náhled na localhostu, tak se mi čeština nespravila..


ještě se zeptám...
když do tabulky vkládám text ne přes mysql, ale přes skript, kde mám formulář a tlačítko uložit - na localhostu, taky se mi to uloží špatně do databáze..musím nějak nastavit už kódování v tomto skriptu, který vkládá data do tabulky nebo mám opět to kódování nastavit až v mysql?

protože:

když v mysql provedu dotaz na tabulku a necham si vypsat to, co jsem do tabulky zadala skrze formulář, vypisuje se mi spatne cestina
Joker
Profil
lenkasui
když jsem změnila v phpmyadminovi, v databázi, tabulce a příslušném sloupci kódování
...tak se automaticky překódovaly i už uložené řetězce.
Změna kódování sloupce bez změny kódování obsahu se dělá jinak, jak jsem si přečetl v zajímavém článku o kódování v MySQL na Intervalu: změní se datový typ sloupce VARCHAR -> BINARY, (něco)TEXT -> (něco)BLOB a potom zase zpátky, ovšem už se správným kódováním.
Takže jak to změnit na nové kódování:
1. změnit sloupec zpátky na latin-1
2. změnit typ sloupce na BINARY (pokud je to VARCHAR, případně na něcoBLOB, pokud je to něcoTEXT)
3. změnit typ sloupce zpátky na VARCHAR/něcoTEXT, ovšem už se správným kódováním
lenkasui
Profil
Prosim Vas jeste o shlednuti nasledujicich skriptu:

1) prvni je skript zobrazujici formulare
2) skript pro ulozeni dat do tabulky
3) soubor index, ktery se odkazuje na vypis dat
4) vypis dat
V tomto skriptu mám formuláře:

<?php
do
{
require_once('../databaze.inc');
if (!OtevriDB())
break;
$dbv = mysql_query("SELECT * FROM firmy ORDER BY id_firmy");
if (!$dbv) echo "Problém s databází! ";
?>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=Windows 1250">
</HEAD>
<BODY>
<H2>Nový zápis reference na web</H2>
<FORM method="post" action="uloz_clanek.php" enctype="multipart/form-data"
name="">
<TABLE style="background:cyan;width:100%">
<TR>
<TD style="font:bold">clanky:</td>
<TD>
<SELECT name="clanky">
<?while($zaznam=mysql_fetch_array($dbv)):?>
<OPTION value="<?echo $zaznam["id_clanku"];?>">
<?echo $zaznam["clanek"];?>
</OPTION>
<?endwhile;?>
</SELECT>
</TD>
</TR>
<TR>
<TD style="font:bold">Rozsah prací - popis práce:</TD>
<TD><input type="text" name="telo" size="50"></TD>
</TR>
<TR>

</TD>
</TR>
<TR>
<TD style="font:bold">Detail reference URL:</TD>
<TD><input type="text" name="odkaz" size="50"></TD>
</TR>
<TR>
*
*
*



skript na ulozeni dat do prislusne tabulky ze stranky, kde jsou formulare: Musim zde nejak vlozit radek pro nastaveni cestiny?

<?php
do
{
require_once('../databaze.inc');
if (!OtevriDB()) break;

$dbv = mysql_query(
"SELECT oooooooooooooooooooooooooo
$clanky = mysql_result($dbv, "id_clanku");

// Uložení článku.
@$výsledek = mysql_query("INSERT INTO zapisy (clanek, text, datum, telo) VALUES (************

if (!$výsledek)
{
echo "Číslo chyby: ".mysql_errno()."<br />Popis chyby: ".mysql_error();
exit;
}
$id_zapisu=mysql_insert_id();


<TABLE>
<TR>
<TD><A href="odhlas.php">Odhlášení</A></TD>
<TD style="font:bold"><A href="novy_clanek.php">Nový zápis</A></TD>
<TD style="font:bold"><A href="redakce.php">Hlavní stránka</A></TD>
</TR>
</TABLE>

<?
mysql_close();
} while (false);
//header("Location: redakce.php");
?>




stranka na internetu, co ma zobrazit zaznamy v tabulce


<html>

<head>
<meta http-equiv="Content-Language" content="cs">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
<title>Výpis dat</title>
<body bgcolor="#663300" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" link="#FF6600" vlink="#FF6600" alink="#FF6600">

<!-- ImageReady Slices (18.psd) -->
<form method="POST" action="vypisdat.php">
<table id="Table_01" align=center width="974" height="630" border="0" cellpadding="0" cellspacing="0">
<tr>
<td background="redakce/31/pozadi.jpg">

<div align="center">
<table border="0" width="90%" id="table5" cellspacing="0" cellpadding="0" height="95%">
<tr>
<td valign="top">
<p class="text" align="justify">
<span style="font-family: Verdana">
<font size="2" color="black"></b>stranka

</b><br><br>

<tr>
<td>
<font size="0" color="white"></b> <?php include("vypisdat.php"); ?>
</td>
</tr>
</table>
</div>

</td>
<td>
<img src="images/spacer.gif" width="1" height="351" alt=""></td>
</tr>
</table>
</form>
<!-- End ImageReady Slices -->
</body>
</html>




a konečně vypisdat.php, na ktery se odkazuje predchozi kod:

<font face="tahoma" size="2" color="black">
<table border="0" width="100%" id="table1" cellspacing="0" cellpadding="0">
<META http-equiv="Content-Type" content="text/html; charset=Windows 1250">
<?php
require_once('databaze.inc');

do
{
// Připojení k databázi.
if (!Otevridb()) break;

mysql_query("SET NAMES 'cp1250'");

$dnes = Date ("YmdHis");

@$vysledek = mysql_query(
"
// SELECT zde vlozim selekt DESC;

") or die("chyba");

while($zaznam=mysql_Fetch_array($vysledek))
{


$idcko = $zaznam["id_clanku"];
$jmenofirmy = $zaznam["jmeno"];
$popisprace = $zaznam["telo"];

printf("<td width=544><p align=justify><font color=black face=Arial size=2> "); // format textu vypisu
printf("<b>Firma: $jmeno</b> <br>");


}
mysql_close();
} while (false);
?>



Vidite tam prosim zasadni chyby?
lenkasui
Profil
Jokere, děkuji, přečtu si článek, abych to vedela v dobe, kdy budu chtit bezpecne zmenit stavajici zaznamy v tabulce . Ted je nastesti muzu smazat a vlozit znovu, protoze tam mam zapisy celkem dva. Hraju si s tou cestinou
Joker
Profil
dodám:
1. změnit sloupec zpátky na latin-1
...pokud se tam ovšem tím překódováním nedostaly natvrdo otazníky a podobně. Pak už s tím asi nepůjde udělat nic.
lenkasui
Profil
otazníky tam jsou, to ano, už natvrdo, nicméně můžu vkládat prostřednictvím formulářů a to je ted strategicke, abych mohla vlozit spravnou cestinu a precist spravnou cestinu...to se ted snazim skrze ty 4 kody viz nahore
lenkasui
Profil
Už jsem přišla na to, jak dostat češtinu do stránky, která mi vypisuje obsah tabulky, to už funguje..

jen nedokazu zprovoznit cestuinu v tomto pripadfe:

1) jdu na stranku na localhost, kde je editace tohoto clanku

2) text je nacten text z tabulky, ktery muzu upravit a i kdyz je ve vypisu spravne cesky, pak do teto kolonky se s diakritikou spravnou nedostane:
to je ten radek ktery mi nacita text a vypisuje do kolonky:

<TD style="font:bold;width:15%">textik:</TD>
<TD><input type="text" name="odkaz" size="50"
value="<?echo $text;?>"></TD>

kamkoliv v tomto skriptu, kdyz pridam mysql_query("SET NAMES 'cp1250'"); tak to cestinu pri nacteni do kolonky nespravi, je treba tady jine nastaveni v tomto pripade, prosim?

jinak predchozi pripady opravbdu spravilo
prenastaveni hodnot pro kodovani v tabulkach a prikaz v kodu: mysql_query("SET NAMES 'cp1250'");
lenkasui
Profil
je třeba u tohoto skriptu, který mná za úkol vypsat text z tabulky do textového pole, je třeba zde nastavit nějak zvlášť češtinu pro správné zobrazení diakritiky?

<TD style="font:bold;width:15%">textik:</TD>
<TD><input type="text" name="odkaz" size="50"
value="<?echo $text;?>"></TD>
Joker
Profil
kamkoliv v tomto skriptu, kdyz pridam mysql_query("SET NAMES 'cp1250'"); tak to cestinu pri nacteni do kolonky nespravi
Patří to nejlépe hned za připojení k databázi.
Každopádně, v tom ukládacím skriptu, jak je tohle:
@$výsledek = mysql_query("INSERT INTO zapisy (clanek, text, datum, telo) VALUES (************
tak to SET NAMES musí být před tím.
lenkasui
Profil
v tom ukladacim skriptu, presne tak jsem to udelala, jak popisujes a tak to zacalo fungovat.....

čeština se spravně vypiše na nahledu v localhostu, ale pri nacteni uz spravne ulozene cestiny pomoci skriptu:

<TD style="font:bold;width:15%">textik:</TD>
<TD><input type="text" name="odkaz" size="50"
value="<?echo $text;?>"></TD>

se zobrazi v kolonce pro text zase spatne...v nahledu je to OK, v kolonce pro text je to SPATNE
lenkasui
Profil
Jokere, posílám pusu,

mysql_query("SET NAMES 'cp1250'");
musi byt napsano vzdy pred pripojenim k databazi: @$výsledek = mysql_query("INSERT INTO zapisy (clanek, text, datum, telo) VALUES (************

FUNGUJE TOOOOOOOOOOOOOOOOOOOO
FrantaS
Profil *
Četl jsem si dotazy a odpovědi. Je to výborne povídaní. Potýkam se s podobnými problémy a vy všichni jste mi dnes pomohli s češtinou v MySQL. Programování není můj obor, ale rád se v tom hrabu, tak mi to promiňte. S kamarádama děláme dechovku a to je trochu jiný obor. Dekuji za pomoc.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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