Autor | Zpráva | ||
---|---|---|---|
svadla Profil |
#1 · Zasláno: 26. 8. 2010, 17:58:34 · Upravil/a: svadla
Zdravim,
nevim jestli je chyba mezi zidli a klavesnici, v mysql, nebo v php. Na localhostu vse funguje, na hostingu u onebit ne. Pokusim se nastinit problem: Mam RS, ktery pri zmene udaju vygeneruje update update fotografie_reference set reference_id = '1', nazev = 'kk', pohled = 'll', alt = 'ttttadads asd ad a ds' where id = '9' mysql_error() nic nenapise. Dotazem select * from fotografie_reference zjistim, ze se data upravila, hned potom uz mam jen die(). A problem je, kdyz zkontroluju data v phpmyadminu, tak je radek upraven, ale vsechny upravovane sloupce z update jsou prazdne. dekuji Pozn: pokud update "natvrdo" nahradim za update fotografie_reference set reference_id = '1', nazev = 'kk', pohled = 'll', alt = 'ttttadads asd ad a ds' where id = '9' tak data zustanou v db i po ukonceni skriptu. |
||
tiso Profil |
#2 · Zasláno: 26. 8. 2010, 18:52:31
svadla: aký je rozdiel tvojou prvou a treťou ukážkou?
|
||
svadla Profil |
#3 · Zasláno: 26. 8. 2010, 18:54:14
tiso:
To je prave ono, zadny. Tu prvni mi generuje RS, posledni je napsano rucne. |
||
tiso Profil |
#4 · Zasláno: 26. 8. 2010, 19:01:23
svadla: poprosím ukážku kódu toho RS okolo tohto dotazu.
|
||
svadla Profil |
#5 · Zasláno: 26. 8. 2010, 19:12:43
tiso:
bude to trochu slozitejsi, ale pokusim se ... metoda, ktera provadi dotazy: function query($sql) { global $error; $sql = trim($sql); if (eregi('^update', $sql)) $sql = "UPDATE `fotografie_reference` SET `reference_id`='1', `nazev`='kk', `pohled`='ll', `alt`='ttttadads asd ad a ds' WHERE `id`='9'"; echo $sql.'<br>'; if ($result = mysql_query($sql)) { if (eregi('^update', $sql)) die; if (substr(strtolower($sql), 0, 6) == "insert") return mysql_insert_id(); else return ($result); } else { echo mysql_error(); $error-> add('mysql',mysql_error(),$_SESSION["uzivatel_id"]); } } pokud odpoznamkuji ten jeden radek, tak je to ok, proto jsem myslel ze mu z RS posilam spatny dotaz. Proto je tam echo $sql Zapoznamkovany radek (dotaz z RS) vypise SET CHARACTER SET 'utf8' SET NAMES utf8 UPDATE `fotografie_reference` SET `reference_id`='1', `nazev`='kk', `pohled`='ll', `alt`='ttttadads asd ad a ds' WHERE `id`='9' Odpoznamovany radek (natvrdo dotaz) vypise SET CHARACTER SET 'utf8' SET NAMES utf8 UPDATE `fotografie_reference` SET `reference_id`='1', `nazev`='kk', `pohled`='ll', `alt`='ttttadads asd ad a ds' WHERE `id`='9' |
||
svadla Profil |
#6 · Zasláno: 26. 8. 2010, 19:14:20
Doplneni:
na serveru je MySQL: 5.1.42 Verze MySQL klienta: mysqlnd 5.0.7-dev PHP 5.3 |
||
svadla Profil |
#7 · Zasláno: 26. 8. 2010, 21:04:49
Tak jsem zjednodusil kod a mam nazornejsi priklad:
PHP kod $db = new Mysql(); if (is_array($_POST)) { $table = 'fotografie_reference'; $id = '9'; foreach($_POST as $k => $v){ $data[] = str_replace("cms_", "", $k)." = '".$v."' "; } $data = implode(", ", $data); $sql = "UPDATE ".$table." SET ".$data." WHERE `id`='".$id."' "; //$sql = "update fotografie_reference set reference_id = '".$_POST['cms_reference_id']."', nazev = '".$_POST['cms_nazev']."', pohled = '".$_POST['cms_pohled']."', alt = '".$_POST['cms_alt']."' where id = '".$_POST['aid']."'"; echo $sql; $db->dotazuju($sql); } echo $sql vypise UPDATE fotografie_reference SET nazev = 'Západ' , pohled = 'Západ' , alt = 'Západ' , reference_id = '1' WHERE `id`='9' ale do databaze se misto slova Zapad ulozi jen Z. sloupce jsou varchar (250) |
||
tiso Profil |
#8 · Zasláno: 26. 8. 2010, 21:31:39
svadla: „ale do databaze se misto slova Zapad ulozi jen Z.“
To vyzerá na nejaký problém s kódovaním… |
||
svadla Profil |
#9 · Zasláno: 26. 8. 2010, 21:41:58
tiso:
pravda, toto jsem vyresil (jen se mi nepovedlo namodelovat puvodni problem), ale puvodni problem porad trva |
||
tiso Profil |
#10 · Zasláno: 26. 8. 2010, 21:47:44
svadla: a ako vyzerá tá tabuľka fotografie_reference?
|
||
svadla Profil |
#11 · Zasláno: 26. 8. 2010, 21:48:53
uz jsem z toho nestastnej ...
CREATE TABLE IF NOT EXISTS `fotografie_reference` ( `id` int(11) NOT NULL AUTO_INCREMENT, `nazev` varchar(250) COLLATE utf8_czech_ci NOT NULL, `alt` varchar(250) COLLATE utf8_czech_ci NOT NULL, `pohled` varchar(250) COLLATE utf8_czech_ci NOT NULL, `reference_id` int(11) NOT NULL, `soubor` varchar(250) COLLATE utf8_czech_ci NOT NULL, `poradi` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci AUTO_INCREMENT=16 ; |
||
tiso Profil |
#12 · Zasláno: 26. 8. 2010, 21:54:26
svadla: netuším kde je problém, žiaden nevidím…
|
||
svadla Profil |
#13 · Zasláno: 26. 8. 2010, 22:03:57
tiso:
diky za snahu, ja take ne Kdyby to jeste nekdo cetl, tak jeste jednou priklad problemu: - po kazdem dotazu se vypisou sloupce jednoho radku tabulky - toto je vypis na obrazovku // dotaz set character set ... zobrazi se Array ( [id] => 9 [nazev] => [alt] => [pohled] => [reference_id] => 0 [soubor] => zapad.jpg [poradi] => 9 ) // dotaz set names ... zobrazi se Array ( [id] => 9 [nazev] => [alt] => [pohled] => [reference_id] => 0 [soubor] => zapad.jpg [poradi] => 9 ) // nyni provedu update: UPDATE `fotografie_reference` SET reference_id=1, `nazev`='kk', `pohled`='ll', `alt`='ttttadads asd ad a ds' WHERE id=9, spravne se zobrazi stav ulozenych hodnot Array ( [id] => 9 [nazev] => kk [alt] => ttttadads asd ad a ds [pohled] => ll [reference_id] => 1 [soubor] => zapad.jpg [poradi] => 9 ) problemem je, ze pri F5 se vypisuje stale to same, pritom by prvni vystup mel obsahovat jine hodnoty |
||
svadla Profil |
#14 · Zasláno: 26. 8. 2010, 23:49:19
Jeste tresnicka ... kdyz menim radek s ID 8, tak vse funguje.
|
||
Kajman_ Profil * |
#15 · Zasláno: 27. 8. 2010, 08:57:58
Není tam jiná aplikace, trigger nebo něco, co ten řádek upravuje také? Nemáte chybu spíše v objektu, který používáte?
Když spustíte dotaz poprvé, jaký údaj je v mysql_affected_rows? A při dalším spuštění? |
||
svadla Profil |
#16 · Zasláno: 29. 8. 2010, 01:22:55
Kajman:
zadna jina aplikace, nebo trigger co do tohlo mohlo zasahnout tam nebylo. Jeste 27.9. jsem to zkousel a neslo to, tak jsem to nechal chvili vyhnit (abych se uklidnil) a dneska vse funguje tak jak ma. Jen je divne, ze pres phpmyadmin se mi ve vypisu dat zobrazuje nejaky divny hash ... napriklad misto slova "Západ" vidim "5ac3a1706164". |
||
Časová prodleva: 3 dny
|
|||
svadla Profil |
#17 · Zasláno: 1. 9. 2010, 00:32:23
Tak jsem se trochu unahlil, jednou to funguje, jednou ne ...
Zapis ceskych znaku do DB byl jasny, nemel jsem nastaveny utf_czech. Novy poznatek je, že chyba bude asi v PHP, protoze externim pripojenim na db z localhostu vse funguje. |
||
Kajman_ Profil * |
#18 · Zasláno: 1. 9. 2010, 08:50:45
S hostingem jste chybu už konzultoval?
|
||
svadla Profil |
#19 · Zasláno: 1. 9. 2010, 12:24:57
Kajman:
Snazim se. Pripravil jsem jim hezky priklad, uvidim kdy si najdou chvilku. Jinak mi zatim kluci z Onebitu vysli vstric. |
||
svadla Profil |
#20 · Zasláno: 1. 9. 2010, 14:00:26
Problém způsoboval doplněk YSlow 2.0.7 do mého Firefoxu 3.6.5. linux verze tím, že stránku refreshun na pozadí, bez poslaných POST údajů => tím se provedl update databáze, kde se vyplnili prázdné údaje. Je to i chyba aplikace, že toto chování dovolí.
Vyřešeno taky díky super podpoře Onebit.cz |
||
Časová prodleva: 15 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0