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.
Zobrazeno 7 zpráv z 7.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
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.
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>
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.
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ť.
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?
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/index.php?find=clanky/cokoliv
(cokoliv=komedie/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)
Zobrazeno 7 zpráv z 7.