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: Proměnná z PHP do javascriptu - chyba ve funkci?

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

Aktivity
Avatar
David
Člen
Avatar
David:31.3.2020 20:40

Ahoj, na stackoverflow jsem narazil na funkci převodu proměnné z php do javascriptu, jedna odpověď tam má velmi pozitivní odezvu, 44 up hlasů. Zkusil jsem to sám otestovat, ale nějak to nejde, předpokládám, že autor to má správně. Mám tam snad chybu já? Díky za odezvu.

<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p id="here"></p>
<?php
$someVar="1";
?>

<script>
var javaScriptVar = "<?php echo $someVar; ?>";
document.getElementById("here").innerHTML=javaScriptVar;
</script>

</body>
</html>
 
Odpovědět
31.3.2020 20:40
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:1.4.2020 8:24

Server posila stranky. Php generuje html kod nebo obecne data, treba obrazek (captcha). Uzivatel ma www prohlizec. Www prohlizec umi zobrazit pouze html kod. A txt a json a xml a pdf... Ale primarne html, css, js.

Cili, mas 2 otazky. Je spravne php kod? Je spravne html/js kod?

Jestli je spravne php, tak to si muzes oberit treba tak, ze vypises tu promenou mimo tag script

<?php
$someVar="1";
echo $someVar; // echo prikaz pro vypis do souboru
// header ('Content-Type: image/png'); // nastav do hlavicky, ze data jsou jina nez html kod
// $url = 'https://www.itnetwork.cz/images/avatars/50796_thumb.png?v=-62169987600';
//echo file_get_contents($url); // napriklad, kdyz zakomentujes to prvni echo a odkomentujes ostatni radky, tak by php melo vygenerovat binarni kod obrazku podle zadane url
?>
Pokud to vypise 1, php funguje.
Pokud se zobrazi php kod, pak nemas spustene php. Nebo stranku spoustis pres
file:// misto http://localhost/ nebo 127.0.0.1/

Jestli je spravne html/js, html overi validator html kodu, viz gugluj. Js vetsinou vypise do konzoly chybu. Ve firefox se konzola pro chyby zobrazi pres ctrl+shift+k (nastroje - vyvoj webu - konzola). Zobrazis konzolu, obnovis stranku F5 a but to tam neco napise nebo ne.
Html kod stranky z prohlizece, ve Firefox ziskas treba tim, ze kliknes do stranky levym tl mysi, pohlidas, abys nemel oznaceny text. Pak totez pravym, vyberes z podnabidky tlacitka Zobrazit zdrojovy kod (kdyz mas oznaceny/vybrany text, tak je tam navic slovo "vyberu" a zobrazi to mozna stejny kod nebo mozna kod generovany javascriptem). Tento kod si muzes oznacit, treba pres ctrl+a a zkopirovat do html editoru, treba pspad, novy soubor, html, ctrl+v. Nebo jej zkopirujes do html validatoru, ktery vyguglujes a kliknes na tlacitko Validate nebo Check, Zkontroluj.


Cili, ten kod se zda na prvni pohled funkcni. Nenapsal jsi zadne poznamky, co to vlastne dela a co by to podle tebe melo delat, ani jak to spoustis, prikaz v adresnim radku stranky.
V podstate zadne informace. Tady mate kod. Najdete chybu. Nic vam za to nedam. Nevim, jak poznate, ze je to spravne nebo chybne :) Neim, zda je tohle zrovna spravny postup, i kdybys chybu chtel hledat sam. Nejsou zadna kriteria, podle kterych lze urcit, co je spravny vysledek.


Do JS je mozne dostat promenou dvema zpusoby.

  1. Vypises ji programem php/java/python,... do html kodu, ktery server odesle uzivateli, uzivatel prijme html kod a zobrazi.
  2. Pouzijes ajax/httprequest, kteremu zadas url stranky, on ti stahne data do promenne a tu pres js zobrazis.
Toto je v podstate toez jako tvuj priklad.
<script>
var a, b, c;
a = 1;
b = <?php echo 2; ?>;
c = <?php echo '3'; ?>; // js cislo, php cislo
d = '<?php echo '4'; ?>'; // js string 1, php string 1
d = '<?php echo "4"; ?>'; // js string 1, php string 2
e = "<?php echo '5'; ?>"; // js string 2, php string 1...
f = <?php $f = 6; echo $f; ?>; // js cislo, php cislo
alert([a, b, c, d, e, f]); // bud to vypise [1, 2, 3, 4, 5, 6] nebo [nic] nebo [1, nesmysl/undefined, ...]
</script>

Navic, bys tam mel mit escapovani html kodu, pokud to vypisujes do html, htmlspecialchars. A escapovani pro js kod.

<script>
d = '<?php echo '4'; ?>'; // js string 1, php string 1 -- to tam je
d = '4';
d = '<?php echo "xyz'4"; ?>'; // js string 1, php string 2 -- tady bys v html kodu mel dost osklivou vec
d = 'xyz'4'; // string zacina apostrofem ' konci apostrofem ' a jeste tam mas treti
// apostrof , protoze sis v php nepohlidal, ze vypisujes string do js kodu a
// nepouzil escapovani, nejspis sis neprohlizes v prohlizeci vyslednou stranku,
// takze vlastne jsi tipoval, sam sobe prilis veril, ze to napises v php spravne
// (kdyz bys nekdy takovou chybu udelal, se mi parkrat stalo)
</script>
Editováno 1.4.2020 8:27
 
Nahoru Odpovědět
1.4.2020 8:24
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:1.4.2020 8:29

Obarveni kodu, od forka selhalo, protoze pocitalo s php kodem. Za normalnich okolnosti by se treba podle spatneho obarveni dalo najit podobnou chybu s apostrofy, kterou jsem se snazil naznacit.

 
Nahoru Odpovědět
1.4.2020 8:29
Avatar
David
Člen
Avatar
David:1.4.2020 14:23

Text z konzole zde:

 
Nahoru Odpovědět
1.4.2020 14:23
Avatar

Člen
Avatar
Odpovídá na David
:1.4.2020 14:56

V tom kóde chybu nemáš, len ti chýba v head značke toto: <meta charset="utf-8">.

Ty si to zle neodpísal, ty si to zle pochopil. A následne si to zle otestoval. Po prvé, tú stránku musíš premenovať na php_html.php a po druhé, musíš si nainštalovať web server s podporou PHP a pýtať si tú stránku zo serveru. A nie otvárať ju dvojklikom ako obyčajnú html stránku...

Takže si stiahni a nainštaluj napriklad XAMPP server, tam kde ho nainštaluješ choď do priečinka htdocs, vymaž všetko čo v ňom nájdeš, nakopíruj doň tú stránku, premenuj ju aby mala príponu php, otvor prehliadač a v ňom si otvor tú stránku ako http://localhost/php_html.php a bude to fungovať.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
1.4.2020 14:56
Avatar
David
Člen
Avatar
David:1.4.2020 15:45

Ano, v xamppu to samozřejmě testuji. Jedinné, co jsem tam měl špatně bylo pojmenování, kdy jsem to měl jako .html. Toto je pro mě tedy nová věc, že kód kde jde <html>, <body> atd může mít příponu .php. Chápu to tedy správně, že kdykoliv se v kódu objeví nějaká php funkce, má být přípona .php?

 
Nahoru Odpovědět
1.4.2020 15:45
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:2.4.2020 8:25

Ty mas nekolik programu, na serveru, ktere se staraji o komunikaci s uzivatelem a posilaji mu soubory. Ve tvem pripade je to balicek xamp.

V nastaveni serveru mas receno, jak se ma zachovat. Pravidla filtrovani.
Soubory htm, html, posli pres ten a ten program.
Soubory php pres apache.
Nebo oblibena pravidla jsou treba hezka url. Pokud se v adrese vyskytuje slozka/joe/cokoliv, tak to presmeruj na slozka/joe/in­dex.php?find=clan­ky/cokoliv (cokoliv=kome­die/american-pie)

Cili, chapes to spravne, v nastaveni serveru mas, ze, pokud ma soubor priponu php, tak nez se odesle uzivateli, tak jej zpracuje php.

Muzes nastavit, ze i html pujde pres php. A muzes pridat i jine pripony., treba *.ph nebo *.auticko. To by melo smysl, treba na ostrem serveru, kde bys jinou priponou mohl maskovat php kod pred hackerovym programem, ktery pouzije "ls *.php" (dir *.php) nebo neco, najdi vsechny php soubory a pridej tam parazitni kod. Samozrejme, pokud je hacker uz na serveru nabourany a uvidi spoustu souboru s priponou auticko, tak si je prohledne a zjisti, ze je tam php kod.
Ale pres webovou aplikaci, dokud jeset nema pristup k souborum, bude mit slozitejsi tipovani jmena souboru. Treba takovy oblibeny soubor, ktery by nahodne mohl zkusit ziskat je config.php, cfg.php (byvaji tam hesla k sql db), func.php (byvaji tam ruzne funkce, muze zjistit slabinu nektere funkce)

 
Nahoru Odpovědět
2.4.2020 8:25
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 7 zpráv z 7.