Odeslání HTML formuláře, změna kódování – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Odeslání HTML formuláře, změna kódování – PHP – Fórum – Programujte.comOdeslání HTML formuláře, změna kódování – PHP – Fórum – Programujte.com

 

bziba0
Duch
4. 6. 2017   #1
-
0
-

Ahojte vespolek,

píšu web v PHP pro naše SDH a narazil jsem na zajímavou "chybku".
Web i soubory jsou v kódování UTF-8, ale ve chvíli, kdy někdo odešle formulář s vyplněnými daty, dojde k překódování stránky na Win-1250, ale po refresh nebo při najetí na další stránku se vše vrátí do normálu a zase je to UTF-8. Výsledkem je, že např. potvrzující hláška o tom, že uložení dat do DB proběhlo úspěšně je ve formátu alá rozsypaný čaj.

Netuším, proč tomu tak je, nepovedlo se mi najít chybu a protože nevím, čím to může být, nevím ani, jaké informace bych měl napsat, proto pokud se tu najde někdo ochotný mi pomoci, prosím, ptejte se na vše, co podle Vás potřebujete vědět, rád Vám potřebné info poskytnu :) Klidně je možno na mail poskytnou i screeny nebo v případě potřeby části kódů.

Díky Marek

Nahlásit jako SPAM
IP: 213.155.253.–
Kit+15
Guru
4. 6. 2017   #2
-
0
-

#1 bziba
S tímto jsem dosud nesetkal. Možná i díky tomu, že vždy po zpracování formuláře provádím přesměrování na stránku, která se má následně zobrazit.

Nahlásit jako SPAM
IP: 194.228.68.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
bziba0
Duch
4. 6. 2017   #3
-
0
-

#2 Kit
Já právě taky ne, je to pro mě naprostá záhada.
Zpracování dat z formu provádí tentýž skript, vyjímka je po příhlášení, kdy po úspěšném pokusu je automatický redirect na úvodní stránku, takže se nic nezobrazí a uživatel nic nepozná (pokud tedy nezadá špatné přihlašovací údaje, pak samozřejmě na tento problém narazí)

Mám podezření, že to vše začlo, jakmile byl do hlavičky indexu vložen tag <!DOCTYPE html>, tedy že stránka je psána v HTML5, ale nevím proč...

Nahlásit jako SPAM
IP: 213.155.253.–
Kit+15
Guru
4. 6. 2017   #4
-
0
-

#3 bziba
HTML5 s tím nemá nic společného.

Je nutné udělat redirect na aktuální stránku i v případě neúspěšného přihlášení.

Nahlásit jako SPAM
IP: 194.228.68.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
bziba0
Duch
4. 6. 2017   #5
-
0
-

#4 Kit
Může to dělat nastavení serveru? Protože to opravdu začalo po vložení tagu doctype...

Nahlásit jako SPAM
IP: 213.155.253.–
peter
~ Anonymní uživatel
4004 příspěvků
5. 6. 2017   #6
-
0
-

Tipl bych default nastaveni serveru, db a pod. Pripadne funkce, ktera zpracovava formular, si to prekodovava.

Osobne do kazdeho programu vzdy cpu header s kodovanim na utf-8, abych mel jistotu. Podobne do SQL si prednastavim kodovani na uft-8. A nasel jsem bug v pdo, kdy to ignruje kodovani transakce pri importu. 
Default tam mam utf, ale ikdyz jsem to zmenil na cp1250, tak to ignorovalo, takze jsem ot cp musel dat do prikazu :)

$this->conn = new PDO('mysql:host='.$cfg['host'].';dbname='.$cfg['db'], $cfg['user'], $cfg['psw'], $cfg['opt']);
// v opt pak mam
$cfg['opt'][PDO::MYSQL_ATTR_INIT_COMMAND] = 'SET NAMES \'utf8\'';
$cfg['opt'][PDO::ATTR_PERSISTENT] = true;
$cfg['opt'][PDO::ATTR_ERRMODE]    = PDO::ERRMODE_EXCEPTION;
// ale do sql prikazu jsem to musel dotlacit
$query = <<<eof
    LOAD DATA INFILE '$file'
      INTO TABLE `zas2_data`
      CHARACTER SET 'cp1250'
      FIELDS TERMINATED BY ';'
      OPTIONALLY ENCLOSED BY '"'
      LINES TERMINATED BY '\r\n'
      IGNORE 1 LINES
    ($cols)
eof;

Nahlásit jako SPAM
IP: 2001:718:2601:26c:7118:6a...–
bziba0
Duch
5. 6. 2017   #7
-
0
-

#6 peter
Zajimavé je, že to opravdu dělá deklarace dokumentu jako HTML5, protože na "testovacím" serveru, kde není v indexu vložen tag doctype, vše funguje korektně, ale na ostré verzi webu to blbne výše popsaným způsobem.

Ovšem těžko říct, proč tomu tak je...

Jinak abych reagoval na tebe, funkce, která form zpracovává to určitš nepřekóduje, DB to taky nedělá (jak jsem psal, na test verzi to jede v poho, data jsou společná pro ostrou i test verzi), takže mě pak napadá už vážně jenom nastavení serveru, ale to nevím, jestli s tím něco udělám.
Zkusím napsat na podporu hostingu, ale nevím nevím, jestli mi pomůžou...

Nahlásit jako SPAM
IP: 213.155.253.–
Kit+15
Guru
5. 6. 2017   #8
-
0
-

#5 bziba
Možná jsi přidal DOCTYPE a nepřidal <meta charset="UTF-8">

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:b93c:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
bziba0
Duch
5. 6. 2017   #9
-
0
-

#8 Kit
Kdepak, meta kódování dávám automaticky :) je tam jak doctype, tak meta... proto je mi to záhadou, jak jsem psal, ten samý index na testu funguje, ale na ostré verzi (jenom s doplněným jedním řádkem doctype) už nefunguje...

Nahlásit jako SPAM
IP: 213.155.253.–
peter
~ Anonymní uživatel
4004 příspěvků
6. 6. 2017   #10
-
0
-

A na ostrem serveru, kdyz ten doctype tam nedas, tak to jede? Protoze to nedava smysl. Html kod nerozhoduje o kodovani. To resi prave server, php, takze header() by to mel prebit. Leda bys to testoval v necem jako chrome a opera, tam se da cekat necekane :) Pripadne, jestli resis nejake requesty, tak se tam pouziva kodovani zvlast jeste v js. Ale to by slo v pripade nutnosti obejit tim, ze to na serveru zakodujes jeste do base64 a pak tam nemas zadnou diakritiku a pres js to pak zpetne dekodujes.

Nahlásit jako SPAM
IP: 2001:718:2601:26c:4dbc:38...–
peter
~ Anonymní uživatel
4004 příspěvků
7. 6. 2017   #11
-
0
-

Treba kodovani u u requestu. Default je to utf, takze je to tam zbytecne, mozna i meta, i script. Ale mozna ty tam mas pro requesty jine kodovani, tak by se to dalo asi zmenit. a pak je teda problem, kterou z tech moznosti prohlizec podoruje, a jestli nekterou, vubec :) Proste, nejspolehlivejsi je to v php nebo prekodovat na base64.

<meta http-equiv="content-type" content="text/html; charset=utf-8">
<script charset="utf-8">
        req.open("GET",file,true);
//	req.setRequestHeader('Content-type', "application/x-www-form-urlencoded; charset=utf-8")
//	req.setRequestHeader('Content-type', "application/x-www-form-urlencoded; charset=utf-8")
//	req.overrideMimeType('text/plain; charset=utf-8');
//	req.overrideMimeType("text/plain; charset=x-user-defined"); // text/xml
        req.send(null);
Nahlásit jako SPAM
IP: 2001:718:2601:26c:4dbc:38...–
kuba
~ Anonymní uživatel
59 příspěvků
8. 6. 2017   #12
-
0
-

#1 bziba
Mám naprosto stejný problém. Podařilo se to nějak vyřešit?

Nahlásit jako SPAM
IP: 80.188.228.–
peter
~ Anonymní uživatel
4004 příspěvků
8. 6. 2017   #13
-
0
-

A taky jsi naprosto nedal zadna voditka, jednoduchou stranku, zdrojovy kod. :)
Jako by jste napsali: mam v garazi auto, je rozbite, asi motor. Mechanikovi v autodilne je fuk, co mas v garazi, ne? Prvni poradi zkusit vycistit svicky a dal nema tuseni.

Nahlásit jako SPAM
IP: 193.84.199.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 2 hosté

Podobná vlákna

Odeslani formulare — založil Anonymní uživatel

Odeslaní formuláře — založil kall_ell

Odeslani weboveho formulare — založil antton

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý