Autor Zpráva
laz13
Profil *
Zdravím

Potreboval by som dostať premennú z JavaS do PHP

Napriklad

...
<script>
var i = confir('blablbla');
</script>


<php>

  echo $i;
  
 </php>


potrebujem aby sa obsah premennej v Java i dostal do premennej v PHP $i;

poradte pls :)

vdaka


confirm som myslel...ale to je nepodstatne teraz.
Joker
Profil
laz13:
To v kódu je Javascript a ne Java (jde o úplně jiné jazyky).

Věci z JS do PHP se dají dostat stejně jako z HTML do PHP: Přes GET, POST, nebo cookie.
nemeja
Profil
Tak můžeš to vzít přes metodu $_GET a jinak neni to java ale javascript

//předběhl jsi mě :D
laz13
Profil *
nemeja:
Prosim o nazorny priklad :) JS vobec neovladam, alechcel by som vo svojom php vyuzit moznost CONFIRM z JS, a tam tu premennu potrebujem.... pls ako na to?

vdaka
_es
Profil
laz13:
JS beží len v prehliadači, takže tak priamo to použiť nemôžeš. PHP vygeneruje nejakú stránku a tá môže nejako zavolať iný, alebo aj znovu ten istý, PHP skript, v ktorom môžeš použiť odoslané údaje zo stránky. Napíš zrozumiteľne, čo má by výsledkom tvojich snáh.
Alphard
Profil
Tento dotaz je kandidát do PHP FAQ, tak se trochu rozepíši:

Jak přenést proměnnou z javascriptu do PHP

Mám tento kód, ale nefunguje mi dle očekávání:
<script>
var i = confirm('blablbla');
</script>
 
<?php
   echo $i;

Proč to nemůže fungovat? Protože PHP se nejdříve zpracuje na serveru, teprve výsledná html stránka se odešle klientovi a ten začne vyhodnocovat javascript. V této chvíli sice může vyvolat dialogové okno a zeptat se uživatele na informace, ale již vygenerovanou stránku nelze zpětně upravit.

Jak to udělat jinak? Je důležité si uvědomit, že proměnné naplněné v js lze do php odeslat nejdříve při dalším požadavku na server. Pak máme několik možností.
Přesměrování stránky na sebe sama a doplnění informací do url – výhodou je možnost okamžitého překreslení nové stránky již na serveru, nevýhodou je velká prodleva, než se uživateli nová stránka načte a ztráta všechny neuložených věcí (u rozepsaného formuláře).
• Odeslání skrytého formuláře na server (např. do iframe), možnost použít kromě dat v url i post data – výhodou je možnost odeslání post dat nebo třeba i upload obrázku na pozadí, přenáší se pouze užitečná data, stránka se znovu nenačítá. Nevýhodou je obtížnější získání odpovědi serveru.
• Vyvolat jiný požadavek na server, např. v js vytvořit objekt obrázku. Nevýhodou je, že nezískáme odezvu serveru, data lze tedy přenášet jen jedním směrem.
Vytvořit cookies, která se při dalším požadavku na server odešle automaticky. Tento způsob je také v dané chvíli jednosměrný a je zde riziko, že uživatel stránku opustí a data se na server už nedostanou. Je to ale použitelné např. pro jednoduchou anktetu.
• Využít AJAX – hlavní výhodou je, že lehce najdete hotové řešení, i když ne vždy optimální (jednoduchá ukázka, řešení s jQuery – jen na tohle je framework zbytečně velký, ale jestli už ho stejně načítáte, proč ho nepoužít). Tato metoda je univerzální a častou používaná. Počítá se zde s okamžitou odpovědí serveru, která vyvolá předem určenou js funkci (která může reagovat na odpověď např. změnou stránky). Komunikace se serverem je asynchronní, tj. zpracování dalšího javascriptu nečeká na dokončení předchozí požadavku.

Tato řešení jsou bohužel závislá na funkčním javascriptu, když základ řešení necháte na html formuláři, bude to fungovat vždy (myslete i na mobilní zařízení).

Jak přenést proměnnou z PHP do javascriptu

Tento směr je značně jednodušší, protože PHP část se vykonává dříve.
var vekUzivatele = <?php echo $vekUzivatele; ?>; // kdyby se předával string, musí se použít uvozovky a správné escapování
(escapování)

Pokud přenášíte více hodnot, mohl by se vám hodit JSON. Umí s ním pracovat php i javascript.

Rozdíl ve viditelnosti cookies při vytvoření javascriptem a PHP

Data obsažená v cookies se mezi javascriptem a PHP předávají v http hlavičce. V době jejich platnosti jsou ukládána a spravována prohlížečem klienta. Pokud tedy v js vytvoříme cookies, je odezva okamžitá a hned na dalším řádku kódu ji můžeme přečíst. Jakmile ale zapojíme PHP, musíme počítat s čekáním na další požadavek (načtení stránky). Teprve s ním prohlíteč vloží do své žádosti o novou stránku aktuální data z cookies a serverový script je uvidí. V počáteční fázi zpracování stránky jsou z requestu vytvořena superglobální pole, zde $_COOKIES. Toto pole zůstává v průběhu běhu scriptu již statické. Pozor, ani funkce setcookie() toto pole již nezmění, pouze přidá do nové hlavičky odesílané klientovi nová data. Z toho plyne, že PHP cookies uvidí až po znovunačtení stránky.
_es
Profil
Alphard:
Tento dotaz je kandidát do PHP FAQ
Zišlo by sa to tam dať, dotazy, v ktorých má niekto problém s pochopením týchto základných vecí sa vyskytujú dosť často. Potom by pri podobnom dotaze stačil odkaz.
Joker
Profil
Alphard:
Ještě by tam mohla být související věc:
(PHP se nejdříve zpracuje na serveru, teprve výsledná html stránka se odešle klientovi a ten začne vyhodnocovat javascript)
Ze stejného důvodu cookie založená v PHP je dostupná v Javascriptu na stejné stránce, ale cookie založená v Javascriptu je v PHP dostupná až na další načtené stránce (resp. po odeslání na server).
Alphard
Profil
[#8] Joker
Doplním to někam, ale rád bych tomu dal samostatnou kotvu. Zdá se mi problematické někoho odkazovat doprostřed přenášení proměnných mezi js a php kvůli jedné větě.
Str4wberry
Profil
Ještě by se mohlo zmínit, že některé postupy umí/neumí vrátit odpověď. A nejspíš by to chtělo přidat ke každé variantě konkrétní ukázkový kód.
Chamurappi
Profil
Reaguji na Str4wberryho:
Ještě by se mohlo zmínit, že některé postupy umí/neumí vrátit odpověď
Mám v plánu sepsat přehled k AJAXu a přesně tohle tam bude. Už jsem si něco málo přichystal, ale asi to nakonec neskončí přímo na diskusi.
Alphard
Profil
Já už jsem to tam částečně dopsal, ale dál bych to raději nerozšiřoval. Stejně tak pokud jde o konkrétní ukázkový kód. Můžete ale doporučit odkazy. Vzhledem k určení do PHP je tam js věcí už teď až dost, ale rád odkáži tvůj návod, který bude cílit na javascriptovou část.

Vaše odpověď

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: