IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
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: Aktualizace stránky po odeslání formuláře z nového okna

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
BuBu6
Člen
Avatar
BuBu6:10.1.2020 13:56

Ahoj, nejsem ještě moc přeborník na php, js jen hodně okrajově a potřeboval bych prosím poradit s následujícím:
Mám stránku .php s výpisem událostí. Z této stránky mám odkaz na založení nové události, která se mi otevře v novém zmenšeném okně pomocí obyčejného js window.open. A nyní bych potřeboval, aby se mi po založení nové události (odešle se formulář a uloží do DB) vykonalo ještě následující:

  1. formulářové okno se zavřelo
  2. původní stránka s výpisem událostí se aktualizovala

Lze toto nějakým způsobem provést?
Moc děkuji za každou radu.

Zkusil jsem: Zkoušel jsem klasické přesměrování, ale stránka se mi sice zaktualizuje, ale pouze v tom novém zmenšeném okně, kde zakládám událost.

Chci docílit: Snažím se dosáhnout, viz. v popise

 
Odpovědět
10.1.2020 13:56
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:10.1.2020 15:53

Ono, bez kodu se spoustu veci resi dost tezko. Muze byt tisicovka reseni... A malokdy se nekomu na forku chce vyptavat a zjistovat, ktere by se ti zrovna nejlepe hodilo :)
A zkousel jsi jaka slova na google? Nic? Chyba, chyba, tisice lidi uz programovali neco podobneho.

https://www.jakpsatweb.cz/…-window.html

//window[name]
//window = window.parent;
//window = window.opener;
//window[name].close()

--- a.htm ---

mywin = window.open('b.htm', 'windowname', 'width=100,height=100');
function yyy() {
mywin.close();
window.location.reload()
}

--- b.htm --- (pri reloadu stranky do ni pridas js nebo nejak spustis...)

window.top.yyy();

A nebo muzes jit cestou ajaxu.

google = javascript ajax example php

Editováno 10.1.2020 15:54
 
Nahoru Odpovědět
10.1.2020 15:53
Avatar
Odpovídá na BuBu6
Lukáš Křehula:10.1.2020 15:59

Ahoj,
nedělal bych to zbytečně takhle složitě, v tomto případě bys musel v okně s přehledem odchytávat události, které ti dají info o tom, že se tabulka změnila a je potřeba překreslit (nějakým intervalem na dotazování na server, nebo přes websocket).
Jednoduché řešení je:

  1. Zbytečně neotevírat nové okno a zůstat pořád v tom stejném. Přesměruješ klienta na stránku s formulářem pro vytvoření události, pokud ji vytvoří tak ho to hodí zpátky na stránku s přehledem, kde už data budou aktualizované
  2. Při kliknutí na tlačítko vytvoření nové události otevřít modal okno s formuláře, ajaxem po vyplnění ho odeslat na server. Ten by ti měl vrátit novou podobu tabulky a tu javascriptem překreslíš

Samozřejmě možnost b je poněkud komplikovanější, pokud nepoužíváš některý framework, který tohle nabízí.

 
Nahoru Odpovědět
10.1.2020 15:59
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:11.1.2020 12:20

A proc by nemohl z otevreneho okna informovat o zmene? Vzdyt to js umi. Pokud je vsechno stejna domena. Ledaze by to v posledni dobe blokly jako nezadouci vlastnost typu CORS.
Pokud to dela, jak pise, ze v okne edituje, klikne na ulozit, cele okno se prekresli, tak na konci muze spustit js, ktery zavola funkci z hlavniho okna. Coz by podle mne nic nebezpecneho byt nemuselo.

 
Nahoru Odpovědět
11.1.2020 12:20
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:11.1.2020 12:21

Jo, co sem nekde videl, cetl, tak se snad zakazuje to zavirani a otevirani oken. Ale pro stejnou domenu by to melo fungovat jako predchozich 30 let.
Ono se to zneuzivalo na otevirani reklam, pripadne spusteni parazitniho kodu z uplne jine domeny a hned okno zavrit, aby si uzivatel nevsiml.

Editováno 11.1.2020 12:22
 
Nahoru Odpovědět
11.1.2020 12:21
Avatar
Milan Turyna
Tvůrce
Avatar
Odpovídá na Peter Mlich
Milan Turyna:11.1.2020 18:12

Otevrit okno muzes, ale jenom jedno v jeden cas a zavrit nemuzes. Minimalne takhle to je tedka na Chrome.

Editováno 11.1.2020 18:13
Nahoru Odpovědět
11.1.2020 18:12
Řeš pouze to, co dokážeš ovlivnit.
Avatar

Člen
Avatar
Odpovídá na BuBu6
:12.1.2020 12:22

Riešenie je jednoduché: prerob to...

Ja viem, to sa mi povie, ale v realite sa to tak, ako to robíš ty, nepoužíva. Pokiaľ je to možné, neotvoríš nové okno, ale modálne okno. V tej istej stránke. A tam už je jednoduché po odoslaní formulára obnoviť stránku. Ikeď ... ani to sa nerobí. Neobnoví sa celá stránka, len sa ajaxom vypýtajú nové údaje do existujúcej stránky.

A mal by si to prerobiť nie len preto, aby si sa to naučil robiť tak ako sa má, ale hlavne kvôli užívateľom danej stránky. Rapídne tým zlepšíš UX, čo je aj hlavný dôvod prečo sa tak robí, a nie tak, ako to ty chceš.

 
Nahoru Odpovědět
12.1.2020 12:22
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:13.1.2020 7:53

"ako sa má" :) Ja bych nevolil tak ostra slova. Pro takove hlasky jsem odesel z jakpsatwebu, kdy lidem tlacili jina, "lepsi" reseni jako dogma. Parkrat jsem se tam vyjadril proti tomu a nejake kritiky webu, nacez mi zacali mazat prispevky. (asi nejakeho zakaznika nektereho z moderatoru ma kritika oslovila a dal mu to pekne sezrat :) )

Ale ano, dneska bych sel taky do ajaxu a urcite bych se novym oknum vyhnul, pokud by neslo o odkaz na externi web. Ale vicemene mi nezalezi na tom, s cim se bude on trapit, pokud mu tohle reseni nejak funguje a vyhovuje.

 
Nahoru Odpovědět
13.1.2020 7:53
Avatar
BuBu6
Člen
Avatar
BuBu6:13.1.2020 13:51

Děkuji za všechny reakce, ale abych vše uvedl na pravou míru.
Vypisování sem nějakého kódu mi přišlo opravdu naprosto zbytečné, neboť jak jsem hned na začátku psal, nejsem žádný profík a celý svůj projekt mám stavěný na základních dotazech .php a .js, kterému vůbec nerozumím (zatím), mám použito pouze právě pro otevření nového zmenšeného a "osekaného" okna, kde pouze edituji nebo zakládám novou událost. Nerad bych tady rozvířil diskuzi, co je správné a co ne, toho je plný web a každý má na to jiný pohled a to i v případě použití různých programovacích jazyků.
Ale abych byl konkrétnější. Můj projekt není vůbec veřejný, je to v podstatě web, který je pro použití pouze pro potřeby své firmy. Mám i zakázané indexování stránek, aby je vyhledávače nenašli (teda nevím, jestli tohle 100% funguje). Zatím umím jen základy php, ale pro můj projekt dostačující a vše funguje, jak má, tedy kromě toho problému, který jsem popsal v úvodu. Proč to tak mám, vlastně ani nevím, ale nějak nám to tak vyhovuje (zvyk z podobného profesionálního programu), tak jsem chtěl jen radu, jak to mohu použít i já, neboť ještě absolutně neznám js. Samozřejmě se k tomu chci postupně dostat, avšak ne až do profesionální úrovně, ale jen proto, že mě to baví a rád se v takových věcech vrtám :) Prostě jsem nyní chtěl jen urychlit řešení pro funkčnost svých stránek, než se vše stihnu naučit, protože ke studiím je toho opravdu příliš a vlastně ani pořádně nevím, co vše mám studovat, protože jak už jsem psal, těch názorů jak a v čem programovat je fakt hodně.

 
Nahoru Odpovědět
13.1.2020 13:51
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:13.1.2020 16:07

No, v tom pripade bys to mohl prepsat do formy web-services.
Zadas url, jeden z parametru format a php ti posle data.

ws/nazev?a=1&b=2&format=csv

to presmerujes pres htacces na php a to ti vrati data

ws.php?sluzba=nazev&a=1&b=2&format=csv -- vhodne pro excel, text oddeleny stredniky, citelne i v prohlizeci
//ws.php?sluzba=nazev&a=1&b=2&format=json -- vhodne pro js / request / ajax
//ws.php?sluzba=nazev&a=1&b=2&format=xml -- totez
//ws.php?sluzba=nazev&a=1&b=2&format=html -- treba vypis uzivatelu, vygenerujes html tabulku (ale to je lepcejsi generovat z ajax/csv primo pres js)

Vyhoda je, ze muzes do adresniho radku zadat odkaz na stranku a muzes is pak prohlizet, co ti vrati to php.
Dalsi vyhoda je, ze muzes propojovat data z ruznych sql dotazu.
Tez muzes posilat data v ruznych formatech. Coz se treba hodi nam v praci, kdyz muzeme data dostat ve formatu csv. csv umi otevirat excel. Treba jmena a adresy zamestnancu a studentu. Ten excel pouzivaji sekretarky pro hromadnou korespondeci, tisk obalek se stitky s adresami.

Ale, samozrejme je trochu pracnejsi udelat ten php kod, ktery ti bude vracet takove moznosti :) A tez musi mit overeni, zda a kdo je prihlaseny, zda mam k datum pristup.
Jen takovy napad. Zkus o tom popremyslet a treba si udelat slozku pro ws. ws_uzivatele.php, ws_clanky, ws_komentare,...

Potom totiz misto volani funkci muzes url.

localhost/?service=uzivatele&a=1&b=2
localhost/index.php?service=uzivatele&a=1&b=2
file_get_content('?service=uzivatele&a=1&b=2')
zobraz_uzivatele($a=1, $b=2) {... return 123;}
Editováno 13.1.2020 16:08
 
Nahoru Odpovědět
13.1.2020 16:07
Avatar
BuBu6
Člen
Avatar
BuBu6:13.1.2020 17:26

To jsem z toho celkem jalovej :D ale povedlo se mi pohrát a lehce upravit první řešení od Peter Mlich. Nové okno po odeslání změn se zavře a stránka s výpisem se aktualizuje.

Funkce:

function Sail(adresa)
    {
    okno=window.open(adresa,"_okno","width=300,height=200");
    okno.opener=this;
    }
</script>

Odkaz na editaci:

<a href="'......'" onclick="Sail(this.href);return false;"><button>Upravit</button></a>

A v nově otevřeném okně po stisku tlačítka "Submit" se uloží do DB a připsal jsem klasické window.close.

Nevím, jestli je to úplně košér, ale mou představu to splňuje a funguje bez problémů.

 
Nahoru Odpovědět
13.1.2020 17:26
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 11 zpráv z 11.