Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Konstrukcja zapytania do bazy MySQL, z dynamicznymi zmiennymi
Fallout
post
Post #1





Grupa: Zarejestrowani
Postów: 154
Pomógł: 0
Dołączył: 17.12.2003
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


Witam,

Nie jestem pewien czy ten post nadaje sie do php czy do MySql ale w sumie obydwa są powiązane ze soba nierozlacznie wiec nie krzyczec jakby co tongue.gif

mam taka funkcje:

  1. <?php
  2.  
  3. function _zmien()
  4. {
  5. $co = func_get_arg(0);
  6.  $id = func_get_arg(1);
  7.  $stare = func_get_arg(2);
  8.  $nowe = func_get_arg(3);
  9.  
  10. switch ($co)
  11. {
  12.  case 'cechy':
  13.  $sql = &#092;"UPDATE $co SET (nazwa_cechy = $nowe WHERE nazwa_cechy = $stare AND id_cn = $id\";
  14.  break;
  15.  
  16.  case 'producenci':
  17.  break;
  18. }
  19.  
  20.  include 'config.inc.php';
  21.  $p = mysql_connect($host,$user,$pass)   or Die($blad['E_BASE']);
  22.  $db = mysql_select_db($baza,$p)  or Die($blad['E_DB']);
  23.  $wynik = mysql_query($sql,$p)  or Die($blad['E_QUERY_UPD']);
  24. }
  25.  
  26. ?>


Do tej funkcji jest np takie odwolanie:

  1. <?php
  2.  
  3. (...)
  4.  case 'upd':
  5.  {
  6. $tab_nazwy = $_POST['nazwy'];
  7. $tab_dane = $_POST['dane'];
  8. $tab_idx = $_POST['idx'];
  9. foreach ($tab_nazwy as $index => $wartosc)
  10. {
  11. $oryg = $tab_dane[$index];
  12. $id = $tab_idx[$index];
  13. if ($oryg!=$wartosc) _zmien($co,$id,$oryg,$wartosc);
  14. //echo \"ID: $id, Było: $oryg , Jest: $wartosc\".\"n\";
  15. }
  16.  }
  17.  break;
  18. (...)
  19.  
  20. ?>


Dodam ze:
- zmienna $co zwraca nazwe tabeli do ktorej maja byc zaktualizowane dane
- zmienna $id daje nam numer wiersza w tabeli
- zmienna $stare zwraca stara wartosc danego pola w bazie (w niej jedyna nadzieja)
- zmienna $nowe zwraca nowa wartosc tego pola (moze byc takze jako nowe id)

Szkopul tkwi w tym, ze nie wiem jak zadac/sformulowac zapytanie do bazy aby aktualizowalo mi te pola ktore maja wartosc $stare o nowa wartosc $nowe. Problem w tym ze np tabela cechy (id_cn, nazwa_cechy) to wiadomo co gdzie bedzie ale juz
np w tabeli producenci (id_producent, nazwa, www, foto) nie wszystkie dane moga byc aktualizowane...

Mam nadzieje ze zrozumiale nakreśliłem mój problem, jeśli jakies watpliwości, lub potrzebne wycinki kodu to wrzuce (nie chcialem tutaj wrzucac prawie 600 lini kodu smile.gif )

Z gory dziekuje za (p)odpowiedzi..
Marcin


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
SongoQ
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


Jak dobrze zrozumialem chesz zaktualizowac pole gdzie jest odpowienia wartosc "stare" o wartosc "nowe".

Wiec SQL powienien tak wygaldac

  1. <?php
  2. $sql = 'UPDATE '.$co.' SET nazwa_cechy = '.$nowe.' WHERE nazwa_cechy = '.$stare.' ';
  3. ?>


Niepotrzebne jest wtedy ID.

Mam nadzieje ze dobrze zrozumialem problem


--------------------
Go to the top of the page
+Quote Post
Fallout
post
Post #3





Grupa: Zarejestrowani
Postów: 154
Pomógł: 0
Dołączył: 17.12.2003
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


Niestety, na takie cos to nawet bym nie zaśmiecał forum winksmiley.jpg

Zapewne zasegurowales sie tym:

  1. <?php
  2. $sql = &#092;"UPDATE $co SET (nazwa_cechy = $nowe WHERE nazwa_cechy = $stare AND id_cn = $id\";
  3. ?>


ale to jest proste...

mi chodzi o raczej cos takiego (napewno zle ale to przyklad tongue.gif)

  1. <?php
  2.  
  3. switch ($co)
  4. {
  5.  case 'producenci':
  6. {
  7.  $zapytanie = &#092;" 
  8. (WHERE id_producent=$stare SET id_producent=$nowe) OR
  9. (WHERE nazwa=$stare SET nazwa=$nowe) OR
  10. (WHERE www=$stare SET www=$nowe) OR
  11. (WHERE foto=$stare SET foto=$nowe)&#092;"; 
  12. }
  13.  breakl
  14.  
  15.  case 'cechy':
  16.  {
  17. $zapytanie =&#092;"
  18. (WHERE id_cn = $stare SET id_cn = $nowe) OR
  19. (WHERE nazwa_cechy = $stare SET nazwa_cechy = $nowe)&#092;";
  20.  }
  21.  break;
  22.  
  23.  case (....)
  24.  i tak dalej...
  25.  
  26. }
  27.  
  28.  
  29.  
  30. $sql = &#092;"UPDATE $co SET $zapytanie\";
  31.  
  32. ?>


mam nadzieje ze na tym przykladzie widac o co mi chodzi smile.gif
pozdro


--------------------
Go to the top of the page
+Quote Post
SongoQ
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


No teraz zrozumialem o co chodzi. Chcesz w 1 zapytaniu modyfikowac pola w ktorych wartosci odpowiadaja starym wartosciom.

Nie bardzo przychodzi mi do glowy jak to zrealizowac za pomoca 1 zapytania.

Mozna zastasowac kilka zapytań i wtedy modyfikujesz pola z wybranych warunkow.

Tak na szybko tylko to mi przychodzi do glowy.

A moze CASE questionmark.gif

Ten post edytował SongoQ 24.02.2005, 16:42:12


--------------------
Go to the top of the page
+Quote Post
kszychu
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

Ostrzeżenie: (0%)
-----


A przekazuj sobie jeszcze zmienną $nazwa_kolumny i po kłopocie.


--------------------
"Coś się kończy, coś się zaczyna." Andrzej Sapkowski
Go to the top of the page
+Quote Post
Fallout
post
Post #6





Grupa: Zarejestrowani
Postów: 154
Pomógł: 0
Dołączył: 17.12.2003
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


Cytat(kszychu @ 2005-02-24 16:41:25)
A przekazuj sobie jeszcze zmienną $nazwa_kolumny i po kłopocie.

no taki smile.gif normalnie na to nie wpadlem biggrin.gif

jakbym mogl to bym sobie przekazywal chyba ze pomozecie mi tak zmodyfikowac inny kod z ktorego sa te zmienne biggrin.gif

oto on:

funckja rysujaca tabelke:

  1. <?php
  2.  
  3. function upd_form($co)
  4. {
  5. echo &#092;"<table border=\"1\"><tr align=\"center\"><td><form action=\"tabele.php?co=$co&akcja=upd\" method=\"POST\">\"; include 'config.inc.php';
  6. require 'config.inc.php';
  7. $p = mysql_connect($host,$user,$pass)  or Die ($blad['E_BASE']);
  8. $db  = mysql_select_db($baza,$p)  or Die ($blad['E_DB']);
  9. $sql  = &#092;"SELECT * FROM $co\";
  10. $wynik  = mysql_query($sql,$p)  or Die ($blad['E_QUERY_GET']);
  11. require 'tabs.inc.php';
  12. echo (get_tab_start($co,2));
  13. switch ($co)
  14. {
  15. case 'cechy':
  16. {
  17. while ($wiersz = mysql_fetch_array($wynik))
  18. {
  19. $id_cn = $wiersz['id_cn'];
  20.  $nazwa_cechy = $wiersz['nazwa_cechy'];
  21. echo (get_tab_end($co,2,$id_cn,$nazwa_cechy));
  22. }
  23. }
  24.  break;
  25.  
  26. case 'producenci':
  27. {
  28. while ($wiersz = mysql_fetch_array($wynik))
  29. {
  30. $id_producent = $wiersz['id_producent'];
  31.  $nazwa = $wiersz['nazwa'];
  32. $www = $wiersz['www'];
  33. $foto = $wiersz['foto'];
  34. echo (get_tab_end($co,2,$id_producent,$nazwa,$www,$foto));
  35. }
  36. }
  37. break;
  38. }
  39. echo &#092;"</table>\";
  40. echo &#092;"<table border=\"1\" width=\"100%\"><tr align=\"center\"><td><input type=\"submit\" value=\"Zapisz zmiany\"></td></tr></table></td></tr></table></form>\";
  41.  
  42. ?>


a to funckje je wypelniajace :

  1. <?php
  2. function get_tab_end()
  3. {
  4. include 'config.inc.php';
  5.  
  6. $co  = func_get_arg(0);
  7. $opcja = func_get_arg(1); // 1- kasowanie 2- aktualizacja
  8. $wiersz_id = func_get_arg(2);
  9. $td  = '';
  10. $del_td = &#092;"<td align=center><input type=checkbox name=del[] value=$wiersz_id></td>\";
  11. $end_tr = &#092;"</tr>\";
  12. // input do aktualizacji
  13. $nazwa_pola  = '';
  14. $wartosc_pola  = '';
  15.  
  16. switch ($co)
  17. {
  18. case 'cechy':
  19. case 'jm':
  20. case 'vat':
  21. {
  22. switch ($opcja)
  23. {
  24. case 0:
  25. case 1:
  26.  {
  27.  $td =  &#092;"<tr align=center>
  28.  <td>&#092;".func_get_arg(2).\"</td>
  29.  <td>&#092;".func_get_arg(3).\"</td>\";
  30.  }
  31. break;
  32.  
  33. case 2:
  34. {
  35.  $td = &#092;"<tr align=\"center\">\";
  36. $id_pola = func_get_arg(2);
  37. for ($i=2; $i<func_num_args(); $i++)
  38. {
  39.  $nazwa_pola  = func_get_arg($i);
  40.  $wartosc_pola  = func_get_arg($i);
  41. $input = &#092;"<td><input type=\"text\"  name=\"nazwy[]\" value=\"$wartosc_pola\"></td>\";
  42. $input .= &#092;"<input type=\"hidden\"  name=\"dane[]\" value=\"$nazwa_pola\">\";
  43. $input .= &#092;"<input type=\"hidden\"  name=\"idx[]\"  value=\"$id_pola\">\";
  44.  $td .= $input;
  45. $td .= &#092;"n\";
  46. }
  47. }
  48. break;
  49. }
  50. }
  51. break;
  52.  
  53. case 'producenci':
  54. {
  55. switch ($opcja)
  56. {
  57.  
  58.  case 0:
  59.  case 1:
  60.  {
  61.  $td =  &#092;"<tr align=\"center\">
  62.    <td>&#092;".func_get_arg(2).\"</td>
  63. <td>&#092;".func_get_arg(3).\"</td>
  64. <td>&#092;".func_get_arg(4).\"</td>
  65. <td><img src=&#092;"$img_prod_root\".func_get_arg(5).\"\"></td>\";
  66.  }
  67.  break;
  68.  
  69.  case 2:
  70.  {
  71.  $td = &#092;"<tr align=\"center\">\";
  72. $id_pola = func_get_arg(2);
  73. for ($i=2; $i<func_num_args(); $i++)
  74. {
  75.  $nazwa_pola  = func_get_arg($i);
  76.  $wartosc_pola  = func_get_arg($i);
  77. $input = &#092;"<td><input type=\"text\"  name=\"nazwy[]\" value=\"$wartosc_pola\"></td>\";
  78. $input .= &#092;"<input type=\"hidden\"  name=\"dane[]\" value=\"$nazwa_pola\">\";
  79. $input .= &#092;"<input type=\"hidden\"  name=\"idx[]\"  value=\"$id_pola\">\";
  80.  $td .= $input;
  81. $td .= &#092;"n\";
  82. }
  83.  }
  84.  break;
  85. }
  86.  
  87. }
  88. break;
  89. }
  90. switch ($opcja)
  91. {
  92. // bez zmian
  93. case 0:
  94. {
  95. $td .= $end_tr;
  96. }
  97. break;
  98. // skasowac
  99. case 1:
  100. {
  101. $td .= $del_td;
  102. $td .= $end_tr;
  103. }
  104. break;
  105.  
  106. }
  107. return $td;
  108. }
  109.  
  110. function get_tab_start()
  111. {
  112. $th = '';
  113. $del_th  = &#092;"<th>Skasować?</th>\";
  114. $end_th  = &#092;"</tr>\";
  115. $co  = func_get_arg(0);
  116. $opcja  = func_get_arg(1);
  117. switch ($co)
  118. {
  119. case 'cechy':
  120.  $th = &#092;"<table border=\"1\">
  121. <tr>
  122. <th><a href=&#092;"tabele.php?co=cechy&akcja=pokaz&jak=id_cn\">ID</a></th>
  123. <th><a href=&#092;"tabele.php?co=cechy&akcja=pokaz&jak=nazwa_cechy\">Nazwa Cechy</a></th>\";
  124.  
  125. break;
  126.  
  127. case 'producenci':
  128. $th = &#092;"<table border=\"1\">
  129. <tr>
  130. <th><a href=&#092;"tabele.php?co=producenci&akcja=pokaz&jak=id_producent\">ID</a></th>
  131. <th><a href=&#092;"tabele.php?co=producenci&akcja=pokaz&jak=nazwa\">Nazwa Producenta</a></th>
  132. <th><a href=&#092;"tabele.php?co=producenci&akcja=pokaz&jak=www\">Adres WWW</a></th>
  133. <th>Logo</th>&#092;";
  134. break;
  135.  
  136. case 'jm':
  137. $th = &#092;"<table border=\"1\">
  138. <tr>
  139. <th><a href=&#092;"tabele.php?co=jm&akcja=pokaz&jak=id_jm\">ID</a></th>
  140. <th><a href=&#092;"tabele.php?co=jm&akcja=pokaz&jak=jednostka\">Jednostka Miary</a></th>\";
  141. break;
  142.  
  143. case 'vat':
  144. $th = &#092;"<table border=\"1\">
  145. <tr>
  146. <th><a href=&#092;"tabele.php?co=vat&akcja=pokaz&jak=id_vat\">ID</a></th>
  147. <th><a href=&#092;"tabele.php?co=vat&akcja=pokaz&jak=stawka\">Stawka VAT</a></th>\";
  148. break;
  149.  
  150.  
  151.  
  152. }
  153. switch ($opcja)
  154. {
  155. // bez zmian
  156. case 0:
  157. {
  158. $th .= $end_th;
  159. }
  160. break;
  161. // skasowac
  162. case 1:
  163. {
  164. $th .= $del_th;
  165. $th .= $end_th;
  166. }
  167. break;
  168. }
  169. return $th;
  170. }
  171.  
  172.  
  173. ?>


czy teraz widac ze to nie takie proste?questionmark.gif?


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 04:29