Pouze tento týden sleva až 80 % na e-learning týkající se Pythonu. Zároveň využij akce až 80 % zdarma při nákupu kreditů. Více informací:
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: QueryString a dynamická stránka

Aktivity
Avatar
matesax
Tvůrce
Avatar
matesax:20.8.2013 19:33

Dobrý den,
můj web má v současnosti 3 fáze - normální stav - obyčejné HTML, main.php (který zpracovává QueryString odeslaný z obyčejného HTML) a error.php (kterýžto vybírá podle kódu erroru z QueryStringu hlášku k výpisu). Problém je, že kamkoliv se vydám z main.php potřebuji přenést QueryString. (status akce/číslo erroru) Proto redirektuji s QueryStringem erroru do error.php. Jenomže v main.php může také dojít k akci, která nezkončí chybou, při které vznikne HTML kód. Pokud se to stane, tato akce dopadla úspěšně a já potřebuji do QueryStringu dát informaci o úspěchu. Ale asi není možné nastavit QueryString na současné stránce. Proto musím redirectovat. (Proto při chybovém stavu redirectuji do error.php.) Chyby jsou malé, proto stačí předat kód chyby do error.php QueryStringem. Jenže potřebuji vypsat i výsledek výtahu z databáze. (zmíněné vygenerované HTML) A ten již do QueryStringu nenacpu. Tudíž v main.php vygeneruji HTML, ale nemohu ho zobrazit, jelikož do QueryStrigu musím dosadit status, že se akce zdařila, což znamená redirectovat, což znamená ztrátu vygenerovaného HTML. Jak tedy naložit s vygenerovaným HTML? Napadlo mne samozřejmě ukládat jej do souboru a na přesměrované stránce jej includovat. Zde se jen ptám, zda-li není efektivnější řešení. Ideálem by bylo nastavení QueryStringu bez potřeby přesměrování. Pokud je však nutností, bojím se zmíněného řešení. Jelikož každý uživatel bude mít svůj výtah...
Děkuji.

 
Odpovědět
20.8.2013 19:33
Avatar
Odpovídá na matesax
Neaktivní uživatel:20.8.2013 19:40

Ztratil jsem se v tom :D

Nahoru Odpovědět
20.8.2013 19:40
Neaktivní uživatelský účet
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
matesax:20.8.2013 19:43

Jednoduše - potřebuji přenést HTML vygenerované v PHP kódu do stránky s požadovaným QueryStringem. Musí to však být dynamické řešení - aby jej mohlo používat tisíce uživatelů současně - každý s jedinečným HTML...

 
Nahoru Odpovědět
20.8.2013 19:43
Avatar
Odpovídá na matesax
Neaktivní uživatel:20.8.2013 19:47

Ty stránky asi nebudou každá jiná, takže bych měl pár .phtml šablon, do kterých by se podle potřeby dosazovala data. Předal by jsi pole dat a název(typ) šablony a natáhl ji na té požadované stránce. Nevím jestli to je správné řešení, ale je to řešení :)

Editováno 20.8.2013 19:47
Nahoru Odpovědět
20.8.2013 19:47
Neaktivní uživatelský účet
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:20.8.2013 19:49

Já taky. Proto mívám jen index.php a žádný error.php, abych se v tom náhodou neztratil.

Nahoru Odpovědět
20.8.2013 19:49
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
matesax:20.8.2013 19:49

Totéž jako s tím souborem. Jak bych tím mohl řešit stovky uživatelů? Jeden zapíše a druhý mu to přepíše...

 
Nahoru Odpovědět
20.8.2013 19:49
Avatar
Odpovídá na matesax
Neaktivní uživatel:20.8.2013 19:51

Ale kdepak, ty šablony budou obsahovat neměnná data a bude se jenom na určitá místa dosazovat, příklad

<h1><?php $nadpis ?></h1>
<p>
  <?php $text ?>
</p>
Nahoru Odpovědět
20.8.2013 19:51
Neaktivní uživatelský účet
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:20.8.2013 19:52

Já chci mít holé PHP v main.php. Toho dosáhnu jen vyřešením problematiky předání QueryStringu do cílové stránky, bez ztrát vygenerovaného obsahu. Tedy i errory bych vygeneroval přímo v main.php a stejným způsobem jako u toho výtahu z databáze bych dosadil příslušný QueryString. Takže řešení, které navrhnete by mohlo počítat i s tím, že do něj nacpu errory. Pak budu mít jen HTML a PHP... (Naprosto separované.)

 
Nahoru Odpovědět
20.8.2013 19:52
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
matesax:20.8.2013 19:53

Ale jak tomu předám ta data? Ono HTML není zrovna krátké.

 
Nahoru Odpovědět
20.8.2013 19:53
Avatar
Nahoru Odpovědět
20.8.2013 19:55
Neaktivní uživatelský účet
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:20.8.2013 19:57

Proto používám Heredoc, které to vše vyřeší za mne. Data si uložím do proměnných a zavolám šablonu, která ty proměnné jenom použije.

Nahoru Odpovědět
20.8.2013 19:57
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
matesax:20.8.2013 19:59

A hodiny čekat? No jako i POST má své limity. Nechci zavrhovat každé řešení - ale skutečně není něco elegantního?

 
Nahoru Odpovědět
20.8.2013 19:59
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:20.8.2013 20:04

POST se používá jen když klient ukládá data na server. Při stahování se běžně používá GET.

Nahoru Odpovědět
20.8.2013 20:04
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:20.8.2013 20:09

A do GET určitě nacpu HTML stránku... :)

 
Nahoru Odpovědět
20.8.2013 20:09
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:20.8.2013 20:12

Však tu HTML stránku máš přece na serveru, ne?

Nahoru Odpovědět
20.8.2013 20:12
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:20.8.2013 20:13

Ale přijdu o ni při přesměrování...

 
Nahoru Odpovědět
20.8.2013 20:13
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:20.8.2013 20:16

A co kdybys použil AJAX? HTML stránku bys měl v klientovi stále stejnou a modifikoval bys jen DOM.

Nahoru Odpovědět
20.8.2013 20:16
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:20.8.2013 20:29

Nechce se mi do toho plést klient. Když vymyslím serverové řešení, budu řešit funkčnost na jednom PC, když u klienta, budu jich řešit milióny... (I šéf by chtěl serverové řešení - klientům by to usnadnilo používání - nejsou to lidi, co PC umí používat - 50 - 70 let...) Mám několik řešení, ale doufal jsem, že napíšete, že není třeba redirectovat, nebo, že se dá nějak zachovat vygenerované HTML, či prostě, že by to šlo nějak jednoduše. Zkusím ještě předejít vygenerování a nějak to přesměrovat ještě před tím. Ale zdá se to být nepravděpodobné...

 
Nahoru Odpovědět
20.8.2013 20:29
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:20.8.2013 20:33

Pořád mi totiž není jasné, čeho chceš docílit. Proč vlastně chceš odesílat HTML stránku z klienta na server?

Editováno 20.8.2013 20:35
Nahoru Odpovědět
20.8.2013 20:33
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:20.8.2013 20:36

Psal jsem to jednoduše - potřebuji po vygenerování HTML(výtah z DB)/Erroru nacpat do URL status. Error si alespoň mohu poslat QueryStringem, tak jsem udělal tu error.php, ale HTML již ne... (Vycházím z toho, že QueryString nastavím jen při přesměrování.)

 
Nahoru Odpovědět
20.8.2013 20:36
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:20.8.2013 20:40

Pořád ti nerozumím. Proč chceš posílat QueryString, který na klientovi nemá co pohledávat?

Nebo jen potřebuješ udělat 301?

Nahoru Odpovědět
20.8.2013 20:40
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:20.8.2013 20:44

Potřebuji dostat návrat do jednoho programu. Kdybych to nechal jen v HTML, musel by si ten program poradit s HTML. S QueryStringem to bude mnohem efektivnější... (Nehledě na to, že nebude odchytávat stráku - vycucne si jen URL.)

 
Nahoru Odpovědět
20.8.2013 20:44
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:20.8.2013 20:45

Co je podle tebe QueryString?

Nahoru Odpovědět
20.8.2013 20:45
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:20.8.2013 20:53

Možná chceš udělat něco takového:

<?php
// uložím data do souboru AABBCC66.html
header('Location: AABBCC66.html');
exit;
Nahoru Odpovědět
20.8.2013 20:53
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
matesax:20.8.2013 21:00

Jasně - redirectuji do toho souboru a pak ho smažu. Geniální! Jen - jak to bude náročné? (jeden záznam má asi 320znaků - záznamů bude průměrně asi tak 5)

Editováno 20.8.2013 21:01
 
Nahoru Odpovědět
20.8.2013 21:00
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:20.8.2013 21:02

O jaké náročnosti se bavíme? Běžně tak tahám desítky MB.

Nahoru Odpovědět
20.8.2013 21:02
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:20.8.2013 21:02

A co když do toho neexistujícího souboru rovnou redirectuji? (Že by to bylo bráno jako cache, které se pravidelně maže...)

Nároky beru jako vytvoření, přesměrování a smazání...

Editováno 20.8.2013 21:04
 
Nahoru Odpovědět
20.8.2013 21:02
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:20.8.2013 21:05

Běžně ten neexistující soubor ani nevytvářím. Zůstane virtuální, obsah dostane dynamicky. Není tedy co mazat.

Editováno 20.8.2013 21:06
Nahoru Odpovědět
20.8.2013 21:05
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:20.8.2013 21:07

Takže mohu rovnou redirectovat do neexistujícího souboru a ono to použije vygenerovaný HTML? A pak už se nemusím starat o zanesení?

header("Location: AABBCC66.htm?code=2");

?

 
Nahoru Odpovědět
20.8.2013 21:07
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:20.8.2013 21:12

Musíš také zajistit, aby při požadavku na ten soubor byl ten obsah nějak doplněn.

Nehledáš náhodou memcache nebo reverzní proxy cache?

Nahoru Odpovědět
20.8.2013 21:12
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
matesax:20.8.2013 21:15

Nějak... :) Takže je to to řešení, co jsem popisoval nahoře? Tak to už mám nápad. Vytvořím ten soubor pod IČem a po použití ho smažu... (Nebo ho vytvořím jako cache... Nebo jako ho vytvořit virtuálně?)

 
Nahoru Odpovědět
20.8.2013 21:15
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:20.8.2013 21:30

Nechceš ty miniaturní soubory úplně normálně vygenerovat z databáze při každém požadavku a zbytek ponechat na HTTP cache?

Nahoru Odpovědět
20.8.2013 21:30
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:20.8.2013 21:43

Napadl mne opačný postup. Nebudu se snažit dostat výstup do QueryStringu. Uložím ho pod souborem s IČO v názvu a program si ho stáhne. Pak tedy bude stačit, že vyšle URL, počká si dejme tomu 20 sekund a pokusí se stáhnout soubor. Bude to opakovat tak dlouho, dokud tam nebude, nebo dokud to nevzdá. Jak ho stáhne, tak ho smaže... Nechápu, proč mě to nenapadlo rovnou...

(výstupem bude jen status (kód) - postačí tedy nějaké cache)

Editováno 20.8.2013 21:45
 
Nahoru Odpovědět
20.8.2013 21:43
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:20.8.2013 21:45

Co na tom trvá 20 sekund? To děláš na Didaktiku?

Editováno 20.8.2013 21:46
Nahoru Odpovědět
20.8.2013 21:45
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Neaktivní uživatel:20.8.2013 21:47

Online Ottův slovník ...

Nahoru Odpovědět
20.8.2013 21:47
Neaktivní uživatelský účet
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:20.8.2013 21:48

To bys měl mít odezvu v řádu desítek ms.

Nahoru Odpovědět
20.8.2013 21:48
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:20.8.2013 21:48

mili :)

 
Nahoru Odpovědět
20.8.2013 21:48
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:20.8.2013 21:51

No však. Takové opičárny vůbec nemusíš dělat. Co by se stalo, pokud bys použil standardní postup pro normální generování dynamických webstránek v PHP?

Nahoru Odpovědět
20.8.2013 21:51
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:20.8.2013 21:53

? Na serveru bude normální HTML. Jen si uložím jedno číslo do cache. Což je také normální...

 
Nahoru Odpovědět
20.8.2013 21:53
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:20.8.2013 21:53

Běžně se u svého lokálního webserveru na notebooku pohybuji v jednotkách ms.

Nahoru Odpovědět
20.8.2013 21:53
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:20.8.2013 21:55

To není normální. Normální je, pokud na tom serveru je normální šablona v PHP, do které před odesláním na klienta doplníš to chybějící číslo.

Nahoru Odpovědět
20.8.2013 21:55
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:20.8.2013 21:56

Přesto nebudu mít request jako při čekání na Redirect. Prostě jen vyšlu URL, ale jestli se to něco podařilo, či cokoliv jiného, se dozvím až po vytažení cache... Takže se na serveru budu z toho programu v nějakém intevalu dožadovat cache pojmenovaného po IČu...

 
Nahoru Odpovědět
20.8.2013 21:56
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:20.8.2013 21:59

Ale nebudu z programu tahat šablonu. Budu tahat cache - to je normálnější... Existuje cache na jedno použití? (Po vytažení se smaže.)

 
Nahoru Odpovědět
20.8.2013 21:59
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:20.8.2013 21:59

Vypadá to, že žádnou cache vůbec nepotřebuješ.

Nahoru Odpovědět
20.8.2013 21:59
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:20.8.2013 22:00

Však šablona je v cache. Co pořád řešíš?

Nahoru Odpovědět
20.8.2013 22:00
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:20.8.2013 22:02

Tak jak z programu, který vyšle URL dám vědět uživateli, že to dopadlo tak a tak?

 
Nahoru Odpovědět
20.8.2013 22:02
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:20.8.2013 22:06

Přece přes stavové kódy. Stavový kód přijde s každou odpovědí na požadavek.

Nahoru Odpovědět
20.8.2013 22:06
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
matesax:20.8.2013 22:08

Můžeš být konrétní - dejme tomu pro nějaké C, či tak?

 
Nahoru Odpovědět
20.8.2013 22:08
Avatar
matesax
Tvůrce
Avatar
matesax:20.8.2013 22:14

Blbnu - bude to Delphi. Čily - jak to bude vypadat u Delphi? (Například vyšlu URL, s QueryStringem pro regitraci.) Nechápu, co mám poslat ze serveru, jelikož většinu errorů, podle kterých určuji status si vymýšlím z podmínek. Tedy vygeneruji pouze HTML s hláškou. Ale status jsem chtěl předávat přes QueryString. Ale jak to dát do odpovědi netuším...

Editováno 20.8.2013 22:15
 
Nahoru Odpovědět
20.8.2013 22:14
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:20.8.2013 22:21

To jsi mohl rovnou napsat, že potřebuješ vyplňovat formuláře na cizích serverech a mohli jsme si ušetřit spoustu komunikace.

Nahoru Odpovědět
20.8.2013 22:21
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:20.8.2013 22:28

QueryString musí odpovídat požadavkům serveru. Pro registraci je nejčastěji vyžadována metoda POST. Nelépe se k tomuto účelu asi hodí program Curl, který zvládne i dost složité a netypické požadavky. Je to i modul v PHP.

Nahoru Odpovědět
20.8.2013 22:28
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:20.8.2013 22:29

Žádné formuláře. Pošlu QueryString. Mámto takto jednoduché - QueryString má všechny parametry - proměnná = hodnota... Já zde řeším, jak dát programu status... (Request na QueryString se jevil nejjednodušeji...)

 
Nahoru Odpovědět
20.8.2013 22:29
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:20.8.2013 22:32

Však ano. To je odpověď do běžného HTML formuláře.

Kdyby sis přečetl včerejší debatu o RESTu, udělal bys lépe.

Nahoru Odpovědět
20.8.2013 22:32
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:20.8.2013 22:35

Víš aspoň, kterou metodou chceš ten QueryString posílat?

Nahoru Odpovědět
20.8.2013 22:35
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:20.8.2013 22:35

Ale jak může být v odpovědi něco, co jsem si vymyslel a nikam to nedal? (Krom HTML.) Ptám se - kam to dát? (ten formulář jede přes GET...)

 
Nahoru Odpovědět
20.8.2013 22:35
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:20.8.2013 22:37

Nikam to nedáš. Prostě to na serveru zpracuješ skriptem.

Nahoru Odpovědět
20.8.2013 22:37
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:20.8.2013 22:41
if ($user[0] == "")
        mysqli_query($connection, "INSERT INTO users (ico, pcid, tel, email) VALUES ($ico, '$pcid', {$_GET["tel"]}, '{$_GET["email"]}')");
else

V else je aktuálně redirect do error.php s kódem zprávy "Nelze se znovu registrovat!". Co mám místo toho redirectu udělat, abych po odeslání URL z programu dostal kód této zprávy?

 
Nahoru Odpovědět
20.8.2013 22:41
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:20.8.2013 22:45

No fuj, to snad nemyslíš vážně? Myslím, že nemá smysl dál diskutovat, dokud si to nespravíš. Máš to děravé jak řešeto.

Nahoru Odpovědět
20.8.2013 22:45
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:20.8.2013 22:48

Nejprve poradíš ať očekávám neexistující status a pak ještě tohle. No nic - jdu na to cache...

 
Nahoru Odpovědět
20.8.2013 22:48
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 60 zpráv z 60.