Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Menu: mechanizmy zależności (projekt PHP/MYSQL)
Forum PHP.pl > Forum > PHP
medicalitlogistic
Szanowni Państwo,

Jestem na początku drogi jeżeli chodzi o PHP i MYSQL. Przygotowałem mechanizm do generowania formularzy.
Jednak zatrzmałem się nad peweną kwestia. Zależności po wyborze jednej pozycji z pozycją drugą.
Przedstawie może temat na zalaczonym obrazku. Konsultowałem sprawę z Adobe bo cały mechanizm jest stworzony
w programie "Adobe Dreamweaver". Stąd tłumaczenie również angielskie.

Jeżeli mogę liczyć na pomoc będę wdzieczny. Dane na tym poziome są zaciągane z bazy MYSQL (nazwy działów i nazwy formularzy)

https://picasaweb.google.com/10932344148621...816917951672978

Z góry dziękuje za wsparcie.
medicalitlogistic
Dziękuje za odpowiedz.

Prosze tylko o jeszcze jedna odpowiedz. Tak jak zaznaczyłem dane zaciągane są z bazy (Dział i formularze - "nazwy danych")
jeżlei wprowadze któryś z tych mechanizmów nadal będa się do tych danych odnosiły. Dlaczego pytam docelowo po wyborze
danego formularza ma otworzyć się nowe okono zawierające formularz. A w nim dane wpisywane miałby zapisywać się na serwerze MYSQL?
Bags_Bunny
Wybacz, ale kompletnie nie zrozumiałem o co Ci chodzi.
medicalitlogistic
ok, nie przechadzam. Dziękuje za chęci.
Bags_Bunny
Może sparafrazuj.
medicalitlogistic
...chodzi mi o to czy wykorzystując select np. AjAXA, Java. Nadal opieram się na danych bazy z której są wyciągane dane takie jak nazwa działu?
Bags_Bunny
Masz pełną dowolność. Możesz użyć Ajax do pobrania listy wygenerowanej przez PHP.

PS. JavaScript!!! Java to zupełnie inny język.
medicalitlogistic
Zobacz proszę... tak wygląda mój plik php po którym otrzymuje informacje z bazy dotyczące działu i nazwy formularza.
Analizując link ze wzdjęciem który wysłałem w którym miejscu wstawić skrypt do filtrowania o którym rozmawiamy:

  1. <?php require_once('Connections/Fobos_Form.php'); ?>
  2. <?php
  3. mysql_query('SET NAMES utf8');
  4. if (!function_exists("GetSQLValueString")) {
  5. function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
  6. {
  7. if (PHP_VERSION < 6) {
  8. $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  9. }
  10.  
  11. $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
  12.  
  13. switch ($theType) {
  14. case "text":
  15. $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
  16. break;
  17. case "long":
  18. case "int":
  19. $theValue = ($theValue != "") ? intval($theValue) : "NULL";
  20. break;
  21. case "double":
  22. $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
  23. break;
  24. case "date":
  25. $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
  26. break;
  27. case "defined":
  28. $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
  29. break;
  30. }
  31. return $theValue;
  32. }
  33. }
  34.  
  35. mysql_select_db($database_Fobos_Form, $Fobos_Form);
  36. $query_Recordset1 = "SELECT nazwa_dzialu FROM wybor_dzialu";
  37. $Recordset1 = mysql_query($query_Recordset1, $Fobos_Form) or die(mysql_error());
  38. $row_Recordset1 = mysql_fetch_assoc($Recordset1);
  39. $totalRows_Recordset1 = mysql_num_rows($Recordset1);
  40.  
  41.  
  42. mysql_select_db($database_Fobos_Form, $Fobos_Form);
  43. $query_Recordset2 = "SELECT nazwa_formularza FROM wybor_formularza";
  44. $Recordset2 = mysql_query($query_Recordset2, $Fobos_Form) or die(mysql_error());
  45. $row_Recordset2 = mysql_fetch_assoc($Recordset2);
  46. $totalRows_Recordset2 = mysql_num_rows($Recordset2);
  47.  
  48.  
  49. ?>
  50. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  51. <html xmlns="http://www.w3.org/1999/xhtml">
  52. <head>
  53. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  54. <title>Formularze Fobos Invest</title>
  55. <style type="text/css">
  56. #form1 table tr th {
  57. text-align: left;
  58. font-family: Arial, Helvetica, sans-serif;
  59. font-size: 12px;
  60. font-weight: bold;
  61. }
  62. #form1 table tr td {
  63. font-family: Arial, Helvetica, sans-serif;
  64. font-size: 12px;
  65. font-weight: bold;
  66. }
  67. body {
  68. background-image: url(%20);
  69. background-repeat: no-repeat;
  70. }
  71. </style>
  72. </head>
  73.  
  74. <body tracingsrc=" " tracingopacity="100">
  75. <form id="form1" name="form1" method="post" action="">
  76. <p><img src="Images/obraz.jpg" width="220" height="100" alt="logo" /></p>
  77. <table width="210" border="0" cellspacing="0" cellpadding="0">
  78. <tr>
  79. <td width="210">&nbsp;</td>
  80. </tr>
  81. <tr>
  82. <td><font size="5"><font color="red">Formularze</font></td>
  83. </tr>
  84. <tr>
  85. <td>&nbsp;</td>
  86. </tr>
  87. </table>
  88. <table width="209" border="0" cellspacing="0" cellpadding="0">
  89. <tr>
  90. <th width="209" scope="col">Wybierz Dział:</th>
  91. </tr>
  92. <tr>
  93. <td><label for="wybor_dzialu"></label>
  94. <select name="wybor_dzialu" size="1" id="wybor_dzialu">
  95. <?php
  96. do {
  97. ?>
  98. <option value="<?php echo $row_Recordset1['nazwa_dzialu']?>"><?php echo $row_Recordset1['nazwa_dzialu']?></option>
  99. <?php
  100. } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1));
  101. $rows = mysql_num_rows($Recordset1);
  102. if($rows > 0) {
  103. mysql_data_seek($Recordset1, 0);
  104. $row_Recordset1 = mysql_fetch_assoc($Recordset1);
  105. }
  106. ?>
  107. </select></td>
  108. </tr>
  109. <tr>
  110. <td>&nbsp;</td>
  111. </tr>
  112. </table>
  113. <table width="283" border="0" cellspacing="0" cellpadding="0">
  114. <tr>
  115. <td width="283">Wybierz Formularz:</td>
  116. </tr>
  117. <tr>
  118. <td><select name="wybor_formularza" id="wybor_formularza">
  119.  
  120. <?php
  121. do {
  122. ?>
  123. <option value="<?php echo $row_Recordset2['nazwa_formularza']?>"><?php echo $row_Recordset2['nazwa_formularza']?></option>
  124. <?php
  125. } while ($row_Recordset2 = mysql_fetch_assoc($Recordset2));
  126. $rows = mysql_num_rows($Recordset2);
  127. if($rows > 0) {
  128. mysql_data_seek($Recordset2, 0);
  129. $row_Recordset2 = mysql_fetch_assoc($Recordset2);
  130. }
  131. ?>
  132. </select></td>
  133. </tr>
  134. <tr>
  135. <td>&nbsp;</td>
  136. </tr>
  137. </table>
  138. <table width="283" border="0" cellspacing="0" cellpadding="0">
  139. <tr>
  140. <td width="283"><p>
  141. <input type="submit" name="wybor" id="wybor" value="Generuj nowy Formularz" />
  142. </p>
  143. <p>&nbsp;</p>
  144. <p><font size="5"><font color="red">Archiwum</font></p></td>
  145. </tr>
  146. <tr>
  147. <td>&nbsp;</td>
  148. </tr>
  149. <tr>
  150. <td>Wybierz Dział:</td>
  151. </tr>
  152. </table>
  153. <table width="283" border="0" cellspacing="0" cellpadding="0">
  154. <tr>
  155. <td width="283"><select name="wybor_dzialu2" id="wybor_dzialu2">
  156. <?php
  157. do {
  158. ?>
  159. <option value="<?php echo $row_Recordset1['nazwa_dzialu']?>"><?php echo $row_Recordset1['nazwa_dzialu']?></option>
  160. <?php
  161. } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1));
  162. $rows = mysql_num_rows($Recordset1);
  163. if($rows > 0) {
  164. mysql_data_seek($Recordset1, 0);
  165. $row_Recordset1 = mysql_fetch_assoc($Recordset1);
  166. }
  167. ?>
  168. </select></td>
  169. </tr>
  170. <tr>
  171. <td>&nbsp;</td>
  172. </tr>
  173. <tr>
  174. <td>Wybierz Formularz:</td>
  175. </tr>
  176. </table>
  177. <table width="283" border="0" cellspacing="0" cellpadding="0">
  178. <tr>
  179. <td width="283"><select name="wybor_formularza2" id="wybor_formularza2">
  180. <?php
  181. do {
  182. ?>
  183. <option value="<?php echo $row_Recordset2['nazwa_formularza']?>"><?php echo $row_Recordset2['nazwa_formularza']?></option>
  184. <?php
  185. } while ($row_Recordset2 = mysql_fetch_assoc($Recordset2));
  186. $rows = mysql_num_rows($Recordset2);
  187. if($rows > 0) {
  188. mysql_data_seek($Recordset2, 0);
  189. $row_Recordset2 = mysql_fetch_assoc($Recordset2);
  190. }
  191. ?>
  192. </select></td>
  193. </tr>
  194. <tr>
  195. <td>&nbsp;</td>
  196. </tr>
  197. <tr>
  198. <td><input type="submit" name="Archiwum" id="Archiwum" value="Generuj historie Formularza" /></td>
  199. </tr>
  200. </table>
  201. <p>&nbsp;</p>
  202. </form>
  203. </body>
  204. </html>
  205. <?php
  206. mysql_free_result($Recordset1);
  207.  
  208. mysql_free_result($Recordset2);
  209. ?>

Bags_Bunny
Na początek, stwórz osobny skrypt, który na podstawie ID pobranego z pierwszego selecta będzie wypisywał zawartość dla drugiego.

Jak będziesz to mieć, w momencie zmiany pierwszego selecta, musisz pobrać ten wyniki Ajaksem i zmienić zawartość drugiego.

Na początek poczytaj o funkcjach jQuery: ready(), change(), ajax(), val(), html(), a także o JSON.
medicalitlogistic
Dziękuje. Nie chciałbym iść na łatwizne ale czas mnie goni... są podobne gotowe rozwiązania które mógłbym podejrzeć?
Bags_Bunny
W zasadzie podawałem Ci już linki. Np. plugin do jQuery: http://plugins.jquery.com/plugin-tags/dependent-selects

http://www.google.co.uk/search?sourceid=ch...07decfb9c829533 - pierwsze kilka wyników to poradniki krok po kroku. W Googlu wszystko się znajdzie.

A tu gotowy skrypt z opisem: http://www.9lessons.info/2010/08/dynamic-d...-box-using.html
medicalitlogistic
Jeszcze raz dziekuje.
Bags_Bunny
Bardzo proszę. Jeśli pomogłem to poproszę o "Pomógł".

@down: dziękuję.
medicalitlogistic
klikniete smile.gif

Cytat(medicalitlogistic @ 26.04.2011, 13:14:06 ) *
klikniete smile.gif


Witam,

DO tego tematu powracam jeszcze raz. Pewien etap został zamkniety. Za co dziękuje "Bags_bunny"

Ale teraz:


Mam takie pytanie. moja baza składa się z dwóch tabel tabela pierwsza to "wybor_działu" tabela druga "wybor_formularza"
W tabeli "wybor_działu" (znajdują sie pola "dzial_ID" "nazwa_dzialu") a w tabeli "wybor_formularza" (znajdują sie pola "form_ID", "nazwa_formularza", "dzial_ID")

DO tego ostatniego czyli pola "dzial_ID" wpisałem wartości odpowiadające ID z tabeli nazwa działu. W celu uzyskania efektu, że jak w formularzu wybiore np. "dział produkcyjny który w bazie ma ID=3 to po wyborze w formularzu opcji "wybór formularza" pokaża się tylko lista formularzy przypisanych po ID stąd trzecia kolumna
"dzial_ID" w tabeli "wybor_formularza"

Pozostaje teraz kwestia skryptu który musze umieścić w pliku php aby tak zadziałało. Ale niestety wiedza się kończy. Dopiero zaczynam z tematem.
Czy mogę prosić o wskazówki jak ma wyglądać mechanizm działania aby uzyskać zamierzony efekt.

Z góry dziękuje.
Bags_Bunny
Najprościej IMO użyc JSON.
Powiedzmy, że masz tablicę w postaci:
  1. $formularze[3] = 'Nazwa';
  2. $formularze[7] = 'Inna nazwa';
  3. ...

gdzie 3 i 7 to wartość form_ID, zrób z tego JSON
  1. echo json_encode($formularze);

Teraz możesz wysłać to prosto "do" jQuery (dając mu do zrozumienia, że jest to JSON - musisz* ustawić odpowiedni parametr funkcji ajax(), zawsze zapominam jak się nazywa, ale w dokumentacji bez problemu znajdziesz).
jQuery to zdekoduje, i będziesz mieć dokładnie taką samą tablicę w JS.

* hipotetycznie nie musisz i jQuery powinien rozpoznać sam, ale z tego, co zauważyłem, niezbyt dobrze mu to wychodzi.
medicalitlogistic
Dziękuje.

A gdzie wskazuje do jakiego działu maja się podpiąć wybrane formularze.?
Czyli wybieram z pierwszego slecta dział produkcja i w drugim select pokazują się wskazane formularze i analogicznie z pozostałymi działami?
Bags_Bunny
Musisz przekazać id wybranego działu w momencie pobierania formularzy. Przyjmując, że id selecta to "dzial":
Kod
$.ajax(
{
    ...,
    data: { dzial: $('#dzial').val() },
    ...
});


O ile czegoś nie pokręciłem pisząc z palca, będziesz mógł odczytać wartość "dzial" poprzez get (lub post, jeśli tak ustawisz - request w każdym bądź razie).
medicalitlogistic
Hmm, czy mogę prosić Cię o email. Wysłałbym print screen bazy MySql jak ma tablice i pola poukładane.
Na podstawie tego poprosił o wsparcie w przygotowaniu skryptu.

Czy będzie to problem?
Bags_Bunny
Nie udzielam pomocy poza forum.

Mogę to wykonać, ale to już zależy jakim budżetem dysponujesz.

Jeśli chodzi Ci tylko o wstawienie zrzutów ekranu, to zrób to tutaj, ale nikt nie będzie pisał skryptu za Ciebie.
medicalitlogistic
Dziękuje. W takim razie walcze dalej.
Hpsi
sorry koleś, przeczytałem własnie cały temat od deski do deski, masz od a-z informacje jak to zrobić, z czym ty masz problem? jeśli potrafisz używać szarych komórek to dostałeś przepis.... to tak jakbyś nie umiał jajka ugotować...
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.