Autor | Zpráva | ||
---|---|---|---|
yenkee Profil * |
#1 · Zasláno: 2. 6. 2007, 12:18:00
Ahoj.
Mám implementovanou třídu s metodou _update. Tato metoda provede následující příkazy: mysqli_query($_SESSION['mysql'],"UPDATE produkty__vlastnosti SET poradi=0 WHERE (poradi='2')"); mysqli_query($_SESSION['mysql'],"UPDATE produkty__vlastnosti SET poradi='2' WHERE (poradi='1')"); mysqli_query($_SESSION['mysql'],"UPDATE produkty__vlastnosti SET poradi='1' WHERE (poradi='0')"); Nevíte jak je možné, že metoda po zavolání provede tyto příkazy dvakrát? Díky za pomoc s tímto zapeklitým problémem.. |
||
zero0x Profil |
#2 · Zasláno: 2. 6. 2007, 12:49:33
si to skus odladit nejakym echo "calling _update"
|
||
yenkee Profil * |
#3 · Zasláno: 2. 6. 2007, 13:04:17
Jo zkusil sem..zobrazí se to jenom jednou.
Sem tam napsal místo UPDATE jeden příkaz INSERT a vloží se mi dva řádky, přitom to vypíše "calling_update" jen jednou.. A i když hned tady za ty příkazy napíšu exit(), stejně se to do DB vloží dvakrát. Divné. |
||
souki Profil |
#4 · Zasláno: 2. 6. 2007, 13:13:27
a nespouští se ti to někde v iframu, ajaxem nebo tak?
|
||
yenkee Profil * |
#5 · Zasláno: 2. 6. 2007, 13:19:14
Iframe tam nemám..a ajax taky nepoužívám (nevím úplně co to je).
|
||
yenkee Profil * |
#6 · Zasláno: 2. 6. 2007, 13:25:43
Jo a nevadí tomu třeba to, že mám připojení k databázi pomocí funkce, kterou volám před každým dotazem do DB? Takže se vlasně připojuju znovu, aniž bych ukončil předchozí spojení..
|
||
souki Profil |
#7 · Zasláno: 2. 6. 2007, 13:26:29
A proč se připojuješ před každým dotazem?
|
||
yenkee Profil * |
#8 · Zasláno: 2. 6. 2007, 13:39:56
Protože po nějaké době připojení spadne, tak se připojuju před každým dotazem..samozřejmě že před dotazy, které následují po sobě v jednom dokumentu se nepřipojuju pokaždé..
Jak se to teda řeší? A je vůbec vhodné ukládat si připojení do proměnné SESSION? |
||
bukaj Profil |
#9 · Zasláno: 2. 6. 2007, 14:52:50
nejmenuje se i třída _update? pak je možné, že php pokládá fci _update() za constructor...
jinak bych ověřil, jestli není volána někde jinde, nebo nějakou jinou metodou již předtím. zkusil bych si tam doplnit vypsání aktuálního souboru (__FILE__) a řádku (__LINE__) potom by se chyby mohly odhalovat jednodušeji |
||
yenkee Profil * |
#10 · Zasláno: 2. 6. 2007, 15:32:18
Je to pro mě fakt záhada..nikde jinde metodu nevolám. Ani metoda '_update' není constructor..
Jenom ještě taková poznámka: Když zavolám metodu '_update', a pak zavolám další metodu, která vybere z databáze data, tak se data vypíší správně. A když script skončí, tak se podívu do DB přes phpMyAdmin a data sou zase jak předtím(to znamená, jako bych metodu '_update' spustil dvakrát)..vypadá to jako by PHP poslalo příkazy MySQL dvakrát, protože příkaz echo se vykoná jen jednou.. No nevím. Je toto možné? |
||
souki Profil |
#11 · Zasláno: 2. 6. 2007, 15:33:17
neukážeš nám celou tu třídu? reps kus důležitého kódu?
|
||
yenkee Profil * |
#12 · Zasláno: 2. 6. 2007, 15:47:54
class c_products{
function _update(){ echo __FILE__; echo __LINE__; mysqli_query(CMysql(),"INSERT INTO produkty__vlastnosti (poradi,nazev,jednotka) VALUES ('0','delka','m')"); exit(); } } Tuto metodu když spustím, tak se vypíše cesta a řádek, a v databázi se objeví dva záznamy.. |
||
bukaj Profil |
#13 · Zasláno: 2. 6. 2007, 15:58:07 · Upravil/a: bukaj
yenkee
takže to vypíše cestu a řádek jen jednou? v tom případě se metoda spustí jen jednou a chyba musí být někde uvnitř |
||
yenkee Profil * |
#14 · Zasláno: 2. 6. 2007, 16:00:11
jo..nebo mezi PHP a MySQL..
|
||
yenkee Profil * |
#15 · Zasláno: 2. 6. 2007, 16:00:52
A nevadí že neuzavírám připojení k MySQL?
|
||
bukaj Profil |
#16 · Zasláno: 2. 6. 2007, 16:04:01
nebo mezi PHP a MySQL..
taky možnost. jiné dotazy se také vykonávají dvakrát? A nevadí že neuzavírám připojení k MySQL? nemělo by btw. co dělá fce CMysql()? vrací link na spojení? |
||
yenkee Profil * |
#17 · Zasláno: 2. 6. 2007, 16:36:35
Jo..CMysql() vrací link.
Všechny MySQL příkazy se provedou dvakrát. A něco mi přijde trochu podezřelé. Když vytvořím spojení s MySQL a spustím funkci mysqli_stat(CMysql()); tak to vypíše THREADS: 2 Nevím úplně co to znamená, ale v dokumentaci k PHP je při spuštění fce vypsáno: THREADS: 1 |
||
bukaj Profil |
#18 · Zasláno: 2. 6. 2007, 16:41:21
tak to vypíše THREADS: 2
jsou spuštěna dvě vlákna. proto se to udělá vícekrát. |
||
yenkee Profil * |
#19 · Zasláno: 2. 6. 2007, 17:08:03
Tak sem na to došel..asi to není tím THREADS: 2
Je to tím tagem <img src="" /> (těma prázdnýma uvozovkama), který sem měl před volání metody '_update'. Když ho s tama smažu, tak vše funguje jak má. Kyž ho tam nechám, dělá to o čem sem tu psal.. Když ale umístím do uvozovek adresu, tak to začne fungovat. Taky když omylem napíšu: <img src=" /> tak to nefunguje. Mám takový dojem, nebo spíš už sem přesvěčen, že v PHP je chyba. <html> <head> <title>page_1</title> </head> <body> <img src="" /> <?php require_once("c_produkty.php"); $obj = new c_products; $obj->_update(); echo mysqli_stat(CMySQL()); echo mysqli_stat(CMySQL()); ?> </body> </html> Zajímalo by mě, jestli to tak blbne jen mě, nebo i někomu jinému.. |
||
koudi Profil |
#20 · Zasláno: 2. 6. 2007, 17:12:31
sem přesvěčen, že v PHP je chyba
Není. Zajímalo by mě, jestli to tak blbne jen mě, nebo i někomu jinému.. Za daných okolností to tak bude u každého. Je to jasny, protože jak to browser načitá, tak narazí na obrázek. Podívá se na adresu (která je prázdná - vezme tedy adresu aktuální stránky) a požádá o ni server. Tudiž se to provede dvakrát. Není to nijak nepochopitelné a rozhodně to není žádná chyba. |
||
yenkee Profil * |
#21 · Zasláno: 2. 6. 2007, 17:22:20
Jo..to je pravda..
Kurnik, ale dojit na tu chybu mi trvalo pul dne..úžasné.:) Díky chlapi za pomoc. |
||
Pavel Strejček Profil |
#22 · Zasláno: 3. 6. 2007, 16:43:45
yenkee
SET poradi=0 WHERE poradi='2' SET poradi='1' WHERE poradi='0' Nebylo by lepší rovnou provést SET poradi='1' WHERE poradi='2'? |
||
souki Profil |
#23 · Zasláno: 3. 6. 2007, 16:46:57
Pavel Strejček
Nešlo. Páč IMHO jsou ty pořadí jen 2 a on je potřebuje prohodit |
||
Pavel Strejček Profil |
#24 · Zasláno: 3. 6. 2007, 16:47:07
Sry, nebylo, už to vidím
|
||
Časová prodleva: 17 let
|
0