Autor | Zpráva | ||
---|---|---|---|
tmvitek Profil * |
#1 · Zasláno: 21. 5. 2013, 21:21:11
Zdravím, jellikož jsem v javascriptu v životě nic nedělal, ale teď ho bohužel nutně potřebuji využít pro jeden můj nápad, tak bych potřeboval poradit. Z databáze MYSQL načtu data, v ní mám tabulku, ta má zatím 2 sloupce. Pak to potřebuji dostat do proměných do javacriptu, ale v javascriptu se mi vypíše pouze první sloupec - jmeno tabulky, druhý - adresa mi vypíše hodnotu null. Když však přes echo v php vypíšu druhý sloupec, tak mi to vypíše správnou hodnotu. Čím to prosím může být? Díky Tomáš
include ("./spojeni_databaze.php"); $databaze=neco; $q = mysql_query("SELECT * FROM tabulka ORDER BY adresa LIMIT 3") or die(mysql_error()); echo "Seznam adres"; while($data=mysql_fetch_array($q)){ echo $data["adresa"]; ?> <script> var data = <? echo json_encode($data) ?>; document.write(data["jmeno"]); document.write(data["adresa"]); </script> |
||
RockFire Profil |
#2 · Zasláno: 21. 5. 2013, 21:24:49
A v PHP už jsi něco dělal? Jsou tam hrubé chyby, např. while není uzavřený. Jinak tato proměnná bude fungovat jen v rámci toho cyklu.
|
||
tmvitek Profil * |
#3 · Zasláno: 21. 5. 2013, 21:29:11
V php jakž takž něco, pardon, že while není uzavřený, zapoměnl jsem to dokopírovat. Ukončerný to má být až úplně na konci. ... S tím, že to bude fungovat jen v rámci cyklu počítám, stačí mi když mi to prostě vyípíše i jméno i adresu a né pouze jméno a null.
|
||
peta Profil |
tmvitek:
Povídání o živých ukázkách www prohlizec FF - ctrl + u (zobrazit zdrojovy kod webove stranky) - to je vystup z php, ten je pro reseni dulezity, za predpokladu, ze mas spravne php. Pokud ne, pak je dulezity puvodni php a i html z prohlizece. <script> var data = <? echo json_encode($data) ?>; document.write(data["jmeno"]); document.write(data["adresa"]); </script> pokud to vygeneruje html kod <script> var data = {"jmeno":1,"adresa":2}; document.write(data["jmeno"]); document.write(data["adresa"]); </script> (pod radek 7 bych dal mozna var_dump($data); ) |
||
Sir Tom Profil |
#5 · Zasláno: 22. 5. 2013, 11:19:45
tmvitek:
„stačí mi když mi to prostě vyípíše i jméno i adresu a né pouze jméno a null.“ Na to není potřeba javascript, ale prosté $result = mysql_query("SELECT jmeno, adresa FROM tabulka ORDER BY adresa LIMIT 3"); echo "Seznam adres:"; while(list($jmeno, $adresa)=mysql_fetch_array($result)){ echo $jmeno; echo $adresa; ?> PHPkem vypíšeš přímo obsah a nemusíš ho cpát do proměnné v JS - zaleží, ale na situaci - třeba tu JS proměnnou data potřebuješ k něčemu dalšímu... |
||
tmvitek Profil |
#6 · Zasláno: 22. 5. 2013, 18:52:43
peta:
Kód je prakticky on až na hlavičku atp., php předpokládám, že mám dobře, jelikož když to, co potřebuji vypíšu pomocí echo, tak není problém. Avšak když to chci vypsat pomocí JS, tak už mi to nefakčí :( Ještě jednou teda vložím celý kód. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=windows-1250"> <meta name="generator" content="PSPad editor, www.pspad.com"> <title></title> </head> <body> <? include ("./spojeni_databaze.php"); $databaze=bazar; $q = mysql_query("SELECT * FROM inzerat ORDER BY adresa LIMIT 3") or die(mysql_error()); echo "Seznam všech článků <ul>"; while($data=mysql_fetch_array($q)){ echo "<br>"; ?> <script> var data = <? echo json_encode($data) ?>; document.write(data["jmeno"]); document.write(data["adresa"]); </script> <? } ?> </body> </html> Jinak zatím to mám vložené zde http://bazar.4fan.cz/test.php Sir Tom: PHPkem bych už to měl 4x bez problémů :D Ale nutně to potřebuji to JS a v tom se nějak neorientuji. |
||
Amunak Profil |
tmvitek:
v PHP si prvně sestav celý objekt, který pak předáš do JS, nedávej ten JS do (PHP) cyklu přímo. Tedy něco jako: <?php header('Content-Type: text/html; charset=utf-8'); /* spojení s databází, dostanu třeba $res (jako resource) */ $data = array(); while($row = mysql_fetch_array($res)) $data[$row['jmeno']] = $row['adresa']; /* v $data mám teď pole ve tvaru: 'Jan' => 'Praha', 'Martin' => 'Brno' */ ?> <!doctype html> <script> var data = <? echo json_encode($data) ?>; var jmeno; for(jmeno in data) document.write( jmeno + ': ' + data[jmeno] + '<br>\n' ); </script> Jan: Praha<br> Martin: Brno<br> Ale nechápu, proč to nemůžeš vypsat jen v PHP. |
||
tmvitek Profil |
#8 · Zasláno: 22. 5. 2013, 20:20:54
Amunak:
tak toto řešení bohužel fungovalo úplně stejně. ALE teď jsem zjistil v čem je problém. A to v tom, že data v databázi mám s diakritikou a to mi nějak javascript nechce spolknout. KDyž vložím data do MYSQL bez diakritiky, tak funguje bez problému. Takže na co jsem prosím já blbec zapomněl? |
||
Jan Tvrdík Profil |
#9 · Zasláno: 22. 5. 2013, 20:42:22
tmvitek:
Funkce json_encode očekává řetězec v UTF-8 kódování. Máš-li data v databázi v jiném kódování, je nezbytné je před voláním json_encode do UTF-8 převést, např. pomocí funkce iconv. |
||
tmvitek Profil |
#10 · Zasláno: 22. 5. 2013, 21:49:33
Tak díky moc všem! Už mě to fachá. Chyba byla pouze v kódování.
|
||
Amunak Profil |
#11 · Zasláno: 23. 5. 2013, 09:22:48
tmvitek:
jsem si jistý, že fungovalo efektivněji, rychleji a s menším množstvím dat posílaných ke klientovi. Kdyby ses chtěl úplně zbavit JSONu, můžeš do toho PHP while cyklu dát rovnou jen document.write. ale to se pak můžeš zbavit i toho JS. To zadání prostě pořád nedává smysl. |
||
Časová prodleva: 4 dny
|
|||
tmvitek Profil |
#12 · Zasláno: 27. 5. 2013, 16:58:33
Amunak:
položky potřebuji do javascriptu, protože plánuji pomocí nic vkládat data do mapy. Mohu se ještě zeptat, jak bych měl tento kód upravit, tak abych měl přeřazeno k 'Jan' => 'Praha', a k tomu ještě jeden příp. více sloupců? Např. sloupce jméno, adresa, telefon tj JAN - Praha, - 604604604 Nevím kolik sloupců se mi bude ještě hodit, ale aspoň jeden nebo dva přidat by se mě hodily. <?php header('Content-Type: text/html; charset=utf-8'); /* spojení s databází, dostanu třeba $res (jako resource) */ $data = array(); while($row = mysql_fetch_array($res)) $data[$row['jmeno']] = $row['adresa']; /* v $data mám teď pole ve tvaru: 'Jan' => 'Praha', 'Martin' => 'Brno' */ ?> <!doctype html> <script> var data = <? echo json_encode($data) ?>; var jmeno; for(jmeno in data) document.write( jmeno + ': ' + data[jmeno] + '<br>\n' ); </script> |
||
Amunak Profil |
tmvitek:
Udělat z toho dvourozměrné pole, v JS z toho pak bude objekt obsahující další objekty... Bude to pak vypadat takto: $data = array(); while($row = mysql_fetch_array($res)) $data[$row['jmeno']] = array( 'adresa' => $row['adresa'], 'tel' => $row['telefon'] ); /* v $data mám teď pole ve tvaru: 'Jan' => array( 'adresa'=>'Praha', 'tel'=>123546 ), 'Martin' => array( 'adresa'=>'Brno', 'tel'=>456446 ) */ v JS bude něco takového: for(jmeno in data) //v data je {"Jan":{"adresa":"Praha","tel":123546},"Martin":{"adresa":"Brno","tel":456446}} document.write( jmeno + ': ' + data[jmeno].adresa + ', ' + data[jmeno].tel + '<br>\n' ); A výsledek: Jan: Praha, 123456<br> Martin: Brno, 456446<br> Opraven Javascript. |
||
tmvitek Profil |
#14 · Zasláno: 27. 5. 2013, 18:38:48
Bohužel nemůžu to nějak rozchodit, Vypíše mi to jméno a pak už jenom undefined. Zde je http://bazar.4fan.cz/test4.php
a zde je kód <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=windows-1250"> <meta name="generator" content="PSPad editor, www.pspad.com"> <title></title> </head> <body> <? include ("./spojeni_databaze.php"); $databaze=bazar; $q = mysql_query("SELECT * FROM inzerat") or die(mysql_error()); $data = array(); while($row = mysql_fetch_array($q)) $data[$row['jmeno']] = array( 'adresa' => $row['adresa'], 'tel' => $row['telefon'] ); ?> <script> var data = <? echo json_encode($data) ?>; var jmeno; for(jmeno in data) //v data je {"Jan":{"adresa":"Praha","tel":123546},"Martin":{"adresa":"Brno","tel":456446}} document.write( jmeno + ': ' + data[jmeno.adresa] + ', ' + data[jmeno.tel] + '<br>\n' ); </script> </body> </html> |
||
Chamurappi Profil |
#15 · Zasláno: 27. 5. 2013, 19:13:45
Reaguji na tmvitka:
Dej data[jmeno].adresa místo data[jmeno.adresa] a obdobně uprav i telefon. V proměnné jmeno je řetězec, takže jmeno.adresa je undefined a pak data["undefined"] je také undefined .
|
||
tmvitek Profil |
#16 · Zasláno: 27. 5. 2013, 19:21:47
Díky chlapy, už to běží! :)
|
||
Časová prodleva: 11 let
|
0