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: Zobrazení řetězce z PHP v JS

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

Aktivity
Avatar
gorri
Člen
Avatar
gorri:12.9.2019 12:46

Zdravím všechny zkušenější.
Měl bych dotaz. Měl jsem v DB uložený kód k měření návštěvnosti (analytics). Uložil jsem si do DB čistě jen číslo pro měření "UA-123456689-0" a v kódu stránky jsem měl

<script type="text/javascript">
var kod = <?php echo json_encode(htmlspecialchars($meta['analytics'])); ?>;
var _gaq = _gaq || [];
_gaq.push(['_setAccount', kod]);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();</script>

Jak jsem zjistil, tak tento měřící kód už nějak nefunguje, tak jsem ho nahradil novým. Nicméně u něj už mi nejde vypsání čísla pro měření z DB ale musí tam být "natvrdo".
Věděl by prosím někdo o nějaké vychytávce? Nechce se mi pokaždé když něco upravím na stránkách dávat pozor abych náhodou nepřepsal měřící kód.

Děkuji moc za rady

Zkusil jsem: Google a různé úpravy měřícího scriptu z GA podle mé staré verze.

Chci docílit: Vypsání čísla pro měření v GA z DB přes PHP

Editováno 12.9.2019 12:48
Odpovědět
12.9.2019 12:46
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
gorri
Člen
Avatar
gorri:12.9.2019 13:29

Tak se omlouvám za zbytečné otravování.
Už jsem na to přišel. Kdyby někdo měl stejný problém, tak tady je řešení

<!-- Global site tag (gtag.js) - Google Analytics -->
<script>
var kod = decodeURIComponent("<?php echo rawurlencode(příkaz na vypsání třeba z DB); ?>");
</script>
<script async src="https://www.googletagmanager.com/gtag/js?id=kod"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', kod);
</script>

Otestováno a funguje. :-)

Nahoru Odpovědět
12.9.2019 13:29
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:12.9.2019 15:04

To je nesmysl. Oboje

var kod = <?php echo json_encode(htmlspecialchars($meta['analytics'])); ?>;
var kod = decodeURIComponent("<?php echo rawurlencode(příkaz na vypsání třeba z DB); ?>");
// rawurlencode - php kodovani do urladresy
// decodeURIComponent - js dekodovani url

<?php
$value = "příkaz na vypsání třeba z DB"; // php string
$value =  htmlspecialchars($value, ENT_QUOTES); // php string upraveny pro html - potrebujes nahradit hlavne " za &quot;
?>
var kod = "<?php echo $value; ?>";

Jeste jinak. Rikas, ze mas hodnotu UA-123456689-0.

V php bys to zapsal takto:

<?php $value = "UA-123456689-0"; /* protoze je to string */ ?>

V javascriptu zas takto:

<script>
value = "UA-123456689-0";
</script>

Kdyby tam byli parazitni znaky \"\<\> (bez lomitek), tak

<script>
value = "UA-123456689-0\"<>";
value = 'UA-123456689-0"<>';
</script>
<?php
$value = "UA-123456689-0\"<>";
$value = 'UA-123456689-0"<>';

No, a kdyz to pretahujes z php do html kodu, tak htmlspecialchars, aby ses zbavil \<\>.
Kdyz to pretahujes do dvojitych uvozovek, tak tam potrebujes se uvozovek zbavit, aby ti tam nenastalo neco takoveho

value = "UA-123456689-0"<>";
value = "UA-123456689-0\"<>"; - bud tu uvozovku zalomitkovat
value = "UA-123456689-0&quot;<>"; - nebo prevest na &quot;, coz by mel html dekoder spravne dekodovat,
// hlavne to potrebujes do js kodu , ktery je soucasti html
<span onclick=" neco ">
<span onclick=" value = 'A-123456689-0&quot;<>'; ">
<span onclick=" value = 'A-123456689-0"<>'; "> tohle by dopadlo pro html asi takto
<span onclick=" value = 'A-123456689-0" nejaky_nesmysl_<>'; ">
<span onclick="neco" nejaky_nesmysl_<>'; ">

Jinymi slovy, mozna by ti bohate stacilo

var kod = "<?php echo "UA-123456689-0"; ?>";
//var kod = "<?php echo "phpstring"; ?>"; // "phpstring
//var kod = "jstring"; // "jstring";

Zkousel jsi v prohlizeci nekdy kliknout Zobrazit-zdrojovy-kod? Ukaze ti htm kod, jaky dostal ze serveru prohlizec, jaky mu server poslal, vygeneroval z tveho php.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
12.9.2019 15:04
Avatar
gorri
Člen
Avatar
Odpovídá na Peter Mlich
gorri:12.9.2019 15:25

Tak to je dobrá sranda. :-D
Toto mě nenapadlo. Zkoušel jsem to pořád s htmlspecialchars bez echo. Nicméně ano. Zobrazilo se mi to vždy. Nepíšu web první den ;-)
Takže CTRL+U znám a dokonce i F12. Ale díky.
Toto funguje taky. A je to i jednodušší.

Nahoru Odpovědět
12.9.2019 15:25
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:13.9.2019 7:39

Ty tam nemas v tom prvnim hlavne vozovky pro javascript. Ty mas potom v tom druhem kodu, ale temer naprosto zbytecne ty funkce.

 
Nahoru Odpovědět
13.9.2019 7:39
Avatar
gorri
Člen
Avatar
Odpovídá na Peter Mlich
gorri:13.9.2019 9:37

Jo to jsem si pak taky všimnul ve zdrojáku. Ale kupodivu to fungovalo i tak. Navštívil jsem si stránky z mobilu a normálně mi to zaznamenalo. Však to kdyžtak zkus. Za test nic nedáš. ;-)

Nahoru Odpovědět
13.9.2019 9:37
Když vím, tak poradím. Nikdo neví všechno :-)
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 6 zpráv z 6.