Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][js]Przenoszenie tablicy php do tablicy w js
Forum PHP.pl > Forum > PHP
demonico
Zdaje sobie sprawe, ze ten temat mogl juz tutaj byc ale w kodzie ktory posiadam nie potrafie zupelnie go wprowadzic. Wszystko przez to, ze programowalem przez rok w zupelnie innym jezyku i nie moge zalapac jak to tu jest.

Bardzo prosze jesli ktos bylby laskal niech mi podpowie jak powinien wygladac ten kod aby dzialal poprawnie. Ogolnie maja to byc 3 comboboxy rozwijane z ktorych drugiego wart jest zalezna od 1, a trzeciego od 1 i 3. W 1 mozliwe dokumeny. W 2 mozliwe daty spotkania tych dokumentow. W 3 mozliwe godziny tego dokumentu i daty. Nie wiem czy rozumiecie ale to malo wazne akurat jak to bedzie dzialac. Glownie chodzi o to aby przeniesc ta tablice, dalej sobie poradze smile.gif

Z gory dziekuje za kazda pomoc.

A o to kod: (linia 233)

  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4. <title>TEST</title>
  5. <style type="text/css">
  6. BODY{
  7. background-color:#ffffff;
  8. font-family: Arial;
  9. font-size: 11px;
  10. color: #000000;
  11. margin:0;
  12. overflow: auto;
  13. }
  14. A
  15. {
  16. text-decoration:none;
  17. color:#000000;
  18. }
  19. TD
  20. {
  21. text-align:left;
  22. font-size: 12px;
  23. }
  24. .tr_head
  25. {
  26. font-weight: bold;
  27. padding: 3px;
  28. }
  29. </style>
  30.  
  31.  
  32.  
  33. </head>
  34. <body><center>
  35.  
  36. <?
  37. // DEFINIOWAC TUTAJ
  38.  
  39. // Doradztwo z zakresu marketingu;
  40. // terminy
  41. define("pierwszy", "01.02.2011|12:00|13:00|14:00^20.03.2011|12:00|13:00^01.02.2010|12:00|13:00");
  42.  
  43.  
  44. // Doradztwo z zakresu księgowości;
  45. // terminy
  46. define("drugi", "01.02.2011|12:00|13:00|14:00^20.03.2011|12:00|13:00^01.02.2010|12:00|13:00");
  47.  
  48.  
  49. // Doradztwo prawne;
  50. // terminy
  51. define("trzeci", "01.02.2011|12:00|13:00|14:00^20.03.2011|12:00|13:00^01.02.2010|12:00|13:00");
  52.  
  53.  
  54. // Doradztwo psychologiczne;
  55. // terminy
  56. define("czwarty", "01.02.2011|12:00|13:00|14:00^20.03.2011|12:00|13:00^01.02.2010|12:00|13:00");
  57.  
  58.  
  59.  
  60. //var text = ["wersja1", "inna kategoria", "trzecia kat", "jakas kat"];
  61. // for (licznik=0;licznik<text.length;licznik++)
  62. // {
  63. // var opt = document.createElement("option");
  64. // document.getElementById(nr2).options.add(opt);
  65. // opt.text = text[licznik];
  66. // }
  67.  
  68.  
  69.  
  70. $apars = explode("^", constant("pierwszy"));
  71.  
  72. $array_terminow = array();
  73.  
  74. for ($i = 0 ; $i < sizeof($apars) ; $i++)
  75. {
  76. $array_terminow[$i] = explode("|", $apars[$i]); // podaje jedna kolumne tj 01.02.2011|12:00|13:00|14:00^
  77. }
  78.  
  79.  
  80. $array_godzin = array();
  81.  
  82. for ($i = 0 ; $i < sizeof($array_terminow) ; $i++)
  83. {
  84. $array_godzin[$i] = explode("|", $array_terminow[$i]); // podaje jedna wartosc w kazdym czyli 0 to data z - 01.02.2011|12:00|13:00|14:00^
  85.  
  86.  
  87.  
  88. for ($j = 1 ; $j < sizeof($array_godzin[$i]) ; $j++)
  89. {
  90.  
  91.  
  92.  
  93.  
  94. }
  95.  
  96. }
  97.  
  98. $dlugosc = sizeof($array_terminow);
  99.  
  100.  
  101.  
  102. include("mail.mod.php");
  103. function getinp($nr)
  104. {
  105. $str = 'INPUT';
  106.  
  107.  
  108. if ($nr == 48)
  109. {
  110. $str = '<input type="radio" name="inp_45" value="d"/>';
  111. }
  112. else if ($nr == 1)
  113. {
  114. $str = '
  115. <select OnChange="usun(1,2,3,this)" name="inp_'.$nr.'" id="'.$nr.'">
  116. <option value="test1">test</option>
  117. <option value="test2">test2</option>
  118. <option value="test3">test3</option>
  119. <option value="test4">test4</option>
  120. <option value="test5">test5</option>
  121. </select>';
  122. }
  123. else if ($nr == 2)
  124. {
  125. $str = '
  126. <select OnChange="usun(1,2,3,this)" name="inp_'.$nr.'" id="'.$nr.'">
  127. <option value="test">test</option>
  128. <option value="test2">test2</option>
  129. <option value="test3">test3</option>
  130. <option value="test2">test2</option>
  131. <option value="test3">test3</option>
  132. <option value="test4">test4</option>
  133. <option value="test5">test5</option>
  134. </select>';
  135. }
  136. else if ($nr == 3)
  137. {
  138. $str = '
  139. <select OnChange="usun(1,2,3,this)" name="inp_'.$nr.'" id="'.$nr.'">
  140. <option value="test">test</option>
  141. <option value="test2">test2</option>
  142. <option value="test3">test3</option>
  143. <option value="test2">test2</option>
  144. <option value="test3">test3</option>
  145. <option value="test4">test4</option>
  146. <option value="test5">test5</option>
  147. </select>';
  148. }
  149. else
  150. {
  151. $str = '<input type="text" name="inp_'.$nr.'" style="width:200px; font-size:14px;">';
  152. }
  153. return($str);
  154. }
  155.  
  156. function getans($nr)
  157. {
  158. return('<b>'.$_POST['inp_'.$nr].'</b>');
  159. }
  160. function getanss($nr)
  161. {
  162. return($_POST['inp_'.$nr]);
  163. }
  164.  
  165. if (isset($_POST['msend']))
  166. {
  167.  
  168.  
  169. echo('<br/><br/><br/><table style="border:1px solid #000000; background-color:#948067;"><tr><td style="font-size:20px;">
  170. $w = ' width="100px"';
  171.  
  172.  
  173.  
  174.  
  175. $i = 0;
  176.  
  177. //tu czy popr
  178. $popr1nr = '<b>';
  179. if (getanss(1) == 'b')
  180. {
  181. $popr1nr .= '<font color = "green">1</font></b>';
  182. $i = $i + 1;
  183. }
  184. else
  185. {
  186. $popr1nr .= '<font color = "red">0</font></b>';
  187. }
  188.  
  189.  
  190.  
  191.  
  192. }
  193.  
  194. else
  195. {
  196.  
  197. echo('
  198. <table style="position: absolute; left:20px"; width="550px" height="2290px" border="0" cellspacing="0" cellpadding="0"><tr><td valign="top" style="vertical-align:top;"><div style="position:relative">
  199. <script language="JavaScript">
  200.  
  201. function usun(nr1,nr2,nr3,nr4)
  202. {
  203. var tekst = nr4.options[nr4.selectedIndex].text;
  204.  
  205.  
  206. var id_nr2 = document.getElementById(nr2);
  207. opcje = id_nr2.getElementsByTagName("option");
  208. var ileich = opcje.length
  209. for(i = 0; i < ileich; i++)
  210. {
  211. id_nr2.removeChild( opcje[ 0 ] );
  212. }
  213.  
  214. var id_nr3 = document.getElementById(nr3);
  215. opcje = id_nr3.getElementsByTagName("option");
  216. var ileich = opcje.length
  217. for(i = 0; i < ileich; i++)
  218. {
  219. id_nr3.removeChild( opcje[ 0 ] );
  220. }
  221.  
  222. var lalala = new Array();
  223. lalala = json_encode( $array_terminow );
  224.  
  225. for(i=0; i < '.$dlugosc.'; i++)
  226. {
  227.  
  228. var opt = document.createElement("option");
  229. document.getElementById(nr2).options.add(opt);
  230. opt.text = "'.$array_terminow[.'i'.].'";
  231.  
  232. }
  233.  
  234.  
  235.  
  236.  
  237. }
  238.  
  239.  
  240.  
  241. function js_send()
  242. {
  243. var ok = true;
  244.  
  245.  
  246.  
  247. if ((document.forms.mailform.inp_1[0].checked == false) && (document.forms.mailform.inp_1[1].checked == false) && (document.forms.mailform.inp_1[2].checked == false) && (document.forms.mailform.inp_1[3].checked == false))
  248. {
  249. ok = false;
  250. }
  251.  
  252.  
  253.  
  254.  
  255. if (ok == false)
  256. {
  257. alert("Wypełnij formularz");
  258. }
  259. else
  260. {
  261. document.mailform.submit();
  262. }
  263. }
  264. </script>
  265. ');
  266. $i = 0;
  267. echo('<br/><form name="mailform" action="" method="post">
  268. <input type="hidden" name="msend" value=":)"/>
  269.  
  270.  
  271.  
  272. <center><h2><b>TEST </br>aaa</b></h2>
  273. </br>
  274. </center>
  275.  
  276.  
  277. </br></br>
  278. </br>
  279.  
  280. <table><tbody>
  281. <tr><td><b><font size="4">Imię: </font></b></td><td>
  282. '.getinp(49).'
  283. </td></tr>
  284. </tbody></table>
  285.  
  286.  
  287. <div style="position: absolute; top:10; left:10; width:20px; height:20px;">'.getinp(1).'</div>
  288.  
  289. <div style="position: absolute; top:10; left:100; width:20px; height:20px;">'.getinp(2).'</div>
  290.  
  291. <div style="position: absolute; top:10; left:190; width:20px; height:20px;">'.getinp(3).'</div>
  292.  
  293.  
  294.  
  295. <table><tbody>
  296. <tr><td><b><font size="4">Nazwisko: </font></b></td><td>
  297. '.getinp(50).'
  298. </td></tr>
  299. </tbody></table>
  300.  
  301.  
  302. <table><tbody>
  303. <tr><td><b><font size="4">Adres email: </font></b></td><td>
  304. '.getinp(51).'
  305. </td></tr>
  306. </tbody></table>
  307.  
  308. </br></br></br>
  309.  
  310. <center><input type="button" onCLick="js_send();" style="border:2px solid #000000; width:450px; background-color:#6d5e4b; color:#ffffff; font-weight:bold; cursor:pointer;" value="Wyślij wyniki"/>
  311. </center></form>
  312. </div></td></tr></table>');
  313. }
  314.  
  315. ?></center></body></html>
  316.  
melkorm
Bardzo rzadko rzucam gotowcami, szczególnie przy tak długich kodach, ale ewidentnie błądzisz :/
Oczywiście kod ten można zapisać jeszcze krócej, ale chciałem jak najbardziej zobrazować jak to powinno wyglądać i czego unikać w kodzie, także mam nadzieję że wysuniesz wnioski z popełnionych błędów i nie wkleisz tego na ślepo i walniesz w kąt.

  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4. <script type="text/javascript" src="http://ajax.microsoft.com/ajax/jquery/jquery-1.5.min.js"></script>
  5. <title>TEST</title>
  6. <style type="text/css">
  7. BODY{
  8. background-color:#ffffff;
  9. font-family: Arial;
  10. font-size: 11px;
  11. color: #000000;
  12. margin:0;
  13. overflow: auto;
  14. }
  15. A
  16. {
  17. text-decoration:none;
  18. color:#000000;
  19. }
  20. TD
  21. {
  22. text-align:left;
  23. font-size: 12px;
  24. }
  25. .tr_head
  26. {
  27. font-weight: bold;
  28. padding: 3px;
  29. }
  30. </style>
  31. </head>
  32. <body>
  33. <center>
  34. <?php
  35. // włączamy raportowanie błędów
  36. // gdy uruchomiłem twój skrypt miałem czerwony ekran :)
  37. error_reporting(E_ALL+E_STRICT);
  38. ini_set('display_errors',1);
  39.  
  40. // definujemy tablice
  41. // możesz input mieć jaki chcesz przerobienie tego to już raczej nie jest problem
  42. $documents = array(
  43. 'first' => array(
  44. '12.01.2010' => array( '09:10','10:40' ),
  45. '12.02.2010' => array( '11:10','12:40' ),
  46. '12.03.2010' => array( '13:10','14:40' ),
  47. '12.04.2010' => array( '15:10','16:40' ),
  48. ),
  49. 'second' => array(
  50. '12.05.2010' => array( '09:10','10:40' ),
  51. '12.06.2010' => array( '11:10','12:40' ),
  52. '12.07.2010' => array( '13:10','14:40' ),
  53. '12.08.2010' => array( '15:10','16:40' ),
  54. ),
  55. 'third' => array(
  56. '12.09.2010' => array( '09:10','10:40' ),
  57. '12.10.2010' => array( '11:10','12:40' ),
  58. '12.11.2010' => array( '13:10','14:40' ),
  59. '12.12.2010' => array( '15:10','16:40' ),
  60. ),
  61. );
  62. // wrzucanie html w echo jest przebrzydkie i staraj się tego unikać jak tylko możesz
  63. ?>
  64. <select name="document" id="document" class="select">
  65. <option value="0">Wybierz</option>
  66. <?php foreach ( $documents as $name => $dates ) : ?>
  67. <option value="<?php echo $name;?>">
  68. <?php echo $name;?>
  69. </option>
  70. <?php endforeach;?>
  71. </select>
  72. <select name="date" id="date" class="select">
  73. <option value="0">Wybierz</option>
  74. </select>
  75. <select name="hour" id="hour">
  76. <option value="0">Wybierz</option>
  77. </select>
  78. </center>
  79. <script type="text/javascript">
  80. // przerabiamy tablicę PHP'ową na JSON
  81. // użyłem jQuery by kod był czytelniejszy i mniejszy
  82. var documents = <?php echo json_encode($documents); ?>,
  83. el_document = $('#document'),
  84. el_date = $('#date'),
  85. el_hour = $('#hour');
  86.  
  87. $(document).ready(
  88. function()
  89. {
  90. $('.select').change(function()
  91. {
  92. var options,
  93. opt,
  94. el_to_fill;
  95. if( $(this).val() != '0' )
  96. {
  97. switch( $(this).attr('id') )
  98. {
  99. case 'document' :
  100. el_to_fill = el_date;
  101. el_to_fill[0].length = 1;
  102. el_hour[0].length = 1;
  103. options = documents[$(this).val()] == undefined ? [] : documents[$(this).val()];
  104. $.each(options, function(key, val)
  105. {
  106. el_to_fill.append('<option value="'+key+'">'+key+'</option>');
  107. }
  108. );
  109. break;
  110. case 'date' :
  111. el_to_fill = el_hour;
  112. el_to_fill[0].length = 1;
  113. options = documents[el_document.val()] == undefined ? [] : documents[el_document.val()][$(this).val()] == undefined ? [] : documents[el_document.val()][$(this).val()];
  114. $.each(options, function(key, val)
  115. {
  116. el_to_fill.append('<option value="'+val+'">'+val+'</option>');
  117. }
  118. );
  119. break;
  120. }
  121. }
  122. }
  123. );
  124. }
  125. );
  126. </script>
  127. </body>
  128. </html>


P.S. Chyba się nudzę w domu ... .
demonico
Jestem zaskoczony tym co potrafisz zrobic, gorzej dla mnie ze nie jestem na biezaco z jQuery. Do polowy kod jest calkiem przejrzysty, ale w js zaczyna sie chaos (w mojej glowie) ...domyslam sie, ze dla Ciebie to latwo wygladajace, poukladane komendy. Pomagam na forum ludziom w jezyku ktory potrafie i wiem, ze ciezko idzie im rozumienie... teraz wiem dlaczego.

Coz... efekt koncowy jakis jest ale niestety nie dziala, staralem sie przerobic ten jQuery zeby cos ruszylo, ale dalej stoi w miejscu. Glownie chodzilo mi o to abym mogl miec takie 4 nazwy spotkania, kazdemu przypisana (wedlug mnie) data... i kazdej dacie inne godziny. Co za tym idzie jesli ktos wybierze juz Spotkanie/data1/godzina1 to chcialem dodac element do bazy i aby dalej tego nie wyswietlalo (cos jak terminy i daty, ktore juz zaklepane nie sa dostepne)... dlatego teraz mam powazny problem, a nie chcialbym zeby Twoja praca poszla na marne bo sam nie lubie kiedy ktos przyjdzie na forum, dostanie co chce i pojdzie. Wiec pytanie, czy jest jakas szansa abys mi pomogl?

Pozdrawiam
melkorm
Jeżeli nic nie zmieniałeś, to szczerze powinno to działać wink.gif Wieczorem jeszcze usiądę i postaram się wytłumaczyć co się dzieje w tym kawałku JavaScriptu, tymczasem wklej co masz na ten moment, zobaczymy co może być źle smile.gif

P.S. wklej wersję PHP w razie co.
demonico
Napisze jak chciales smile.gif Ciezko to opisac bo u siebie w jezyku scite po prostu zrobilbym 3 tablice, baze danych i jakos by poszlo... tutaj te polaczenia jezykow zawsze sprawialy mi klopot. Chcialbym miec te 3 listy rozwijane

Pierwsza z 4 Tematami
Druga z Terminami (kazde klikniecie na Temat dawalo by inne terminy)
Trzecia z Datami (kazde klikniecie na Termin dawalo by inne daty zapisane na ten termin... jak rowniez kazdy klik na Temat zmienial by Termin i jego daty)

Trudno mi to inaczej przedstawic.
Rozumiem, ze Tobie dziala ten kod co podales. Ale nie bardzo wiem w jaki sposob on ma nawet dzialac bo tak jak mowilem malo wiem o js,jquery... operowalem glownie na html,php i mysql...

Jesli powinien zmieniac drugi i trzeci combobox po zmienieniu wartosci w pierwszym to niestety nie dziala. Uzywam opery, mozilli... testowalem na obu. Ogolnie to jest taki formularz ktory ma na celu dodanie do bazy danych " Tematu/jego Terminu/godziny wybranego Terminu " po czym przy nastepnych wczytaniu strony ta godzina z tego terminu i tematu nie bedzie juz widoczna. I tu chcialbym wiedziec w jaki sposob moge uzyskac taki efekt? Czy jest mozliwosc uzyskania tego z mojego lub Twojego kodu? I czy naprawde moj byl do niczego? smile.gif

Jeszcze raz dzieki, ze pomagasz.

edit: wersja php powyzej 5
melkorm
No mi działa smile.gif Mam nadzieję że kod pobrałeś klikając "Pobierz" smile.gif

No okej, wieczorem opiszę cały javascript i poprawię małą duperelę, tymczasem wrzuć co masz i zobaczymy co poszło nie tak.

Co do Twojego kodu to raczej był `dziwny` kompletnie złe podejście, te define, explody itp jak można było to zrobić po prostu na zwykłych tablicach. No i chyba przyznasz że nie pakowanie html'a do php sprawia że kod jest o wiele czytelniejszy?
demonico
W tym rzecz, ze staram sie non stop przerobic Twoj kod aby cos ruszylo... nie wiem jak to sie dzieje, ze i pobierz i kopiowanie - nic nie dziala, non stop mam w 1 liscie wybierz,first,second,third... w drugiej i trzeciej niezaleznie od wyboru tylko 'wybierz'

Myslalem, ze moze ajax by tu pomogl i po kazdym wybraniu comboboxa wczytywal dane do dwoch kolejnych ale tez go nie ogarnalem. Sam juz nie wiem co robic, gdyby to uzupelnienie dzialalo mi tak jak i Tobie to moze sklepal bym reszte kodu metoda prob i bledow. Ale w tej chwili jestem w kropce.
melkorm
Dane zmieniają się dopiero po wybraniu odpowiedniej wartości z select'a Wybierasz first - ustawiają się daty dla first, wybierasz datę -> ustawiają się godziny dla daty.

Ajax tu nic nie pomoże.

Weź pobierz na czysto kod, wklej do nowego pliku php i sprawdź czy działa, jeżeli nie zadziała to ściągnij sobie firebug'a i zobacz czy może wyskakują jakieś błędy javascriptu, jeżeli nic nie pokaże wklej ten kod bo aż wierzyć mi się nie chce smile.gif
demonico
Bardzo dziwne, sprawdzilem ten sam kod na hostil.pl - darmowy serwer i na nim kod dziala wysmienicie (podziwiam jak dziala)... ale jak to mozliwe, ze na serwerze na ktorym operuje na stale (to serwer znajomego - nawet nie wiem jaki) nic nie dziala... pytalem go, mowil ze wersja php jest 5.2... cos, nie jest pewien ale ze powyzej 5...

jest jakies mozliwe wytlumaczenie, bo nawet nie wiem co moze byc przyczyna iz u Ciebie dziala, u mnie na darmowym dziala, a na tym platnym nic =]
melkorm
Problemem może być niezainstalowany moduł json'a :/ Chociaż powinien wtedy walnąć fatal_errorem :/

Jakbyś mógł sprawdzić phpinfo pod kątem json'a było by miło.
demonico
Ajj, nieciekawie... z tego co widze to:

Kod
Configure Command     './configure' '--prefix=/usr/lib/php5' '--host=i686-pc-linux-gnu' '--mandir=/usr/lib/php5/man' '--infodir=/usr/lib/php5/info' '--sysconfdir=/etc' '--cache-file=./config.cache' '--with-pcre-regex=/usr' '--disable-cli' '--with-apxs2=/usr/sbin/apxs2' '--with-config-file-path=/etc/php/apache2-php5' '--with-config-file-scan-dir=/etc/php/apache2-php5/ext-active' '--without-pear' '--disable-bcmath' '--with-bz2' '--disable-calendar' '--with-curl' '--without-curlwrappers' '--disable-dbase' '--disable-exif' '--without-fbsql' '--without-fdftk' '--disable-filter' '--enable-ftp' '--with-gettext' '--without-gmp' '--disable-hash' '--disable-ipv6' '--disable-json' '--without-kerberos' '--enable-mbstring' '--with-mcrypt' '--without-mhash' '--without-msql' '--without-mssql' '--with-ncurses' '--with-openssl' '--with-openssl-dir=/usr' '--disable-pcntl' '--disable-pdo' '--without-pgsql' '--disable-posix' '--without-pspell' '--without-recode' '--disable-simplexml' '--disable-shmop' '--without-snmp' '--disable-soap' '--disable-sockets' '--without-sybase' '--without-sybase-ct' '--disable-sysvmsg' '--disable-sysvsem' '--disable-sysvshm' '--without-tidy' '--disable-tokenizer' '--disable-wddx' '--without-xmlrpc' '--with-xsl' '--enable-zip' '--with-zlib' '--disable-debug' '--enable-dba' '--without-cdb' '--with-db4' '--disable-flatfile' '--with-gdbm' '--disable-inifile' '--without-qdbm' '--with-freetype-dir=/usr' '--with-t1lib=/usr' '--disable-gd-jis-conv' '--with-jpeg-dir=/usr' '--with-png-dir=/usr' '--without-xpm-dir' '--with-gd' '--with-imap' '--with-imap-ssl' '--with-mysql=/usr' '--with-mysql-sock=/var/run/mysqld/mysqld.sock' '--without-mysqli' '--with-unixODBC=/usr' '--without-adabas' '--without-birdstep' '--without-dbmaker' '--without-empress' '--without-esoob' '--without-ibm-db2' '--with-iodbc=/usr' '--without-sapdb' '--without-solid' '--with-readline' '--without-libedit' '--without-mm' '--without-sqlite'


i widze tutaj: --disable-json sad.gif

php - PHP Version 5.2.11-pl1-gentoo
jakies rady? bo ten Twoj kod naprawde dziala wysmienicie, tylko jeszcze gdyby potrafil to co pisalem to ratujesz mi zycie
melkorm
zamiast json_encode użyj tego link

I powinno śmigać smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.