Autor | Zpráva | ||
---|---|---|---|
fan_dax Profil * |
#1 · Zasláno: 2. 3. 2017, 10:44:07
Dobrý den, potřeboval bych načíst data ze .json souboru a vypsat je v tabulce pomocí PHP metody. Zkušel jsem různé tutoriály na internetu, ale vždycky nastal nějaký problém. Poslední pokus, který jsem teď udělal mi vypsal několik errorů a za nimi kombinaci čísel a písmen, které ani nevím, kde se vzaly. Zkusil jsem dát ukázku mého kódu na kod.djpw.cz, ale zřejmě to neumí PHP (odkaz tady). Tak jsem vytvořil nový FTP účet určený jen pro tento účel s údaji: server - 124299.w99.wedos.net , login - w124299_jakpsatweb , heslo - JakPsatWeb1! . Riziko napadení webu si uvědomuji, proto jsem nastavil oprávnění uživatele jen na možnost zobrazení. Veškerý postup mi prosím pište sem do vlákna. Výstup FTP na webu můžete najít na této adrese.
|
||
Radek9 Profil |
#2 · Zasláno: 2. 3. 2017, 11:49:59
fan_dax:
Když se pozorně podíváš na strukturu toho JSON souboru, tak uvidíš problém. Pod klíčem "previous" se neskrývá kolekce, ale přímo objekt. Pokud chceš vypsat jen ty klíče, které tímto stringem začínají, tak takto:
<?php $jsonData = file_get_contents("http://phptest.originalfm.cz/jsontest/json1/test.json"); $json = json_decode($jsonData, true); echo '<h3>Data</h3>'; $output = ""; foreach($json as $key => $previous) { if (strpos($key, 'previous') !== 0) continue; $output .= $previous['song_name']; } echo $output; ?> |
||
fan_dax Profil * |
#3 · Zasláno: 2. 3. 2017, 19:49:16
Super, funguje to, ještě bych potřeboval nastavit, aby skript každých 20 sekund refreshoval a aktualizoval údaje v případě změny.
|
||
Keeehi Profil |
#4 · Zasláno: 2. 3. 2017, 21:13:11
Meta tagy přesměruj stránku samu na sebe a nastav tam 20 sekund.
|
||
fan_dax Profil * |
#5 · Zasláno: 2. 3. 2017, 21:31:14
ok, děkuji. Ještě by mě zajímalo, jak nastavit, aby interpret_url bylo odkazem interpreta s tím, že by se otevřelo v novém okně. Jako další by mě zajímalo, jak k previous přidat další objekt - current a jak nastavit, aby se zobrazovala jen data z previous a ne z previous 2-4.
|
||
fan_dax Profil * |
#6 · Zasláno: 4. 3. 2017, 22:46:20
Omlovám se, asi jsem to nenapsal srozumitelně. Chtěl bych nastavit, aby interpret_url, který je v JSON souboru byl odkazem na interpret_name, takže zhruba takto:
<a href="interpret_url">interpret_name</a> , toto samozřejmě nelze, protože jsme v PHP, takže jsem to vyřešil takhle:
$output .= '<a href="#" target="blank">'.$current['interpret_name'].'</a>'; , zajímalo by mě, co mám doplnit místo #, aby to odkazovalo na interpret_url.
|
||
Radek9 Profil |
fan_dax:
„current a jak nastavit, aby se zobrazovala jen data z previous a ne z previous 2-4“ Tak to je ale něco trochu jiného. Původně to vypadalo, že chceš vypsat všechny, které na previous začínají. Pokud chceš vypsat jen určitě klíče, tak třeba takto: $keys = ['previous', 'current']; foreach($keys as $key) { $item = &$json[$key]; $output .= $item['song_name']; } „zajímalo by mě, co mám doplnit místo #, aby to odkazovalo na interpret_url.“ No přeci vypsat tu danou položku. Stejně jako to děláš u interpret_name . Navíc je vhodné to ošetřit pomocí funkce htmlspecialchars . A taktéž pomocí isset zjistit, zda tam URL vůbec je:
if (isset($item['interpret_url'])) { $output .= '<a href="' . htmlspecialchars($item['interpret_url']) . '" target="_blank">' . $item['interpret_name'] . '</a>'; } |
||
fan_dax Profil * |
#8 · Zasláno: 5. 3. 2017, 21:48:52
Když jsem script překopíroval a dal pryč previous, který nakonec asi nebudu potřebovat, vznikl mi tento kód, je to správně?
<meta http-equiv="refresh" content="3"> <title>JSONTEST</title> <?php $jsonData = file_get_contents("test.json"); $json = json_decode($jsonData, true); $output = ""; $keys = ['current']; foreach($keys as $key) { $item = &$json[$key]; } foreach($json as $key => $current) { if (strpos($key, 'current') !== 0) continue; if (isset($item['interpret_url'])) { $output .= $item['song_name'].'<br>'; $output .= '<a href="' . htmlspecialchars($item['interpret_url']) . '" target="_blank">' . $item['interpret_name'] . '</a>'; } echo $output;} ?> <div id="por"> a interpret_name (i s odkazem) přidám do <div id="grep"> ?
|
||
Radek9 Profil |
fan_dax:
„vznikl mi tento kód, je to správně?“ Proboha ne. Doporučuji, aby ses pořádně naučil základy. Předně k čemu jsou cykly atp. Určitě ti dobře poslouží místní učebnice: Péhápko: Učebnice PHP Pokud potřebuješ vypsat jednu konkrétní položku, tak přece ten cyklus nepotřebuješ: <?php $jsonData = file_get_contents("test.json"); $json = json_decode($jsonData, true); $output = ""; $item = &$json['current']; $output .= $item['song_name'].'<br>'; $output .= '<a href="' . htmlspecialchars($item['interpret_url']) . '" target="_blank">' . $item['interpret_name'] . '</a>'; echo $output; ?> „jak k song_name přidám do <div id="por"> a interpret_name (i s odkazem) přidám do <div id="grep"> ?“
Prostě ty kusy obal. Stejně jako položku interpret_name obaluješ odkazem.
|
||
fan_dax Profil * |
#10 · Zasláno: 5. 3. 2017, 23:30:09
Takže kód bude takhle?
<meta http-equiv="refresh" content="3"> <title>JSONTEST</title> <?php $jsonData = file_get_contents("test.json"); $json = json_decode($jsonData, true); $output = ""; $item = &$json['current']; $output .= '<div id="por">' .$item['song_name'] .'</div>'; $output .= '<div id="grep"><a href="' . htmlspecialchars($item['interpret_url']) . '" target="_blank">' . $item['interpret_name'] . '</div></a>'; echo $output; ?> <meta http-equiv="refresh" content="3"> , refreshuje se mi celá stránka, lze nějakým způsobem refreshnout pouze skript?
|
||
Radek9 Profil |
#11 · Zasláno: 6. 3. 2017, 08:13:23
fan_dax:
„Takže kód bude takhle?“ Ještě se ti kříží ukončovací značky: $output .= '<div id="grep"><a href="' . htmlspecialchars($item['interpret_url']) . '" target="_blank">' . $item['interpret_name'] . '</a></div>'; „lze nějakým způsobem refreshnout pouze skript?“ Pomocí PHP ne. Jde to pomocí JS (ajax), nebo pomocí iframu (kdy vlastně reloaduješ jenom rám). |
||
fan_dax Profil * |
Ukončovací značky jsem upravil a vytvořil nový soubor iframe.php, kam jsem dal následující kód:
<iframe id="hraje" src="index.php"></iframe> <script>window.onload = function(){ setInterval(function(){ parent.frames['abradioplay'].location.href = "index.php"; },30);}</script><style> #hraje {border: none; padding: 0px; margin: 0px;}</style> Je to takhle OK? Teď jsem si všiml, že to nějak nechce fungovat, jdu hledat dál... |
||
Časová prodleva: 4 dny
|
|||
fan_dax Profil * |
#13 · Zasláno: 10. 3. 2017, 23:22:47
Nakonec jsem nějaký script našel a pokusil se ho přizpůsobit, mohlo by to být takhle?
<iframe id="hraje" src="index.php"></iframe> <script> window.setInterval(function() { reloadIFrame() }, 10000); function reloadIFrame() { document.getElementById('hraje').contentWindow.location.reload(); } </script> <style> #hraje {border: none; padding: 0px; margin: 0px;}</style> |
||
Časová prodleva: 4 měsíce
|
|||
fan_dax Profil * |
#14 · Zasláno: 17. 7. 2017, 01:42:22
Zdravím, script mi funguje přesně tak, jak má. Narazil jsem ale na věc, která se mi jeví jako nepraktická - v případě, že v souboru json nejsou žádná data, tak to logicky nic nevypíše. Mohl bych poprosit o vytvoření kódu, kde bych si napsal vlastní text a ten by se mi ukazoval v případě žádných dat?
|
||
Časová prodleva: 6 let
|
0