Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQL][PHP] POST i przechwycenie tablicy do bazy
XP'ek
post
Post #1





Grupa: Zarejestrowani
Postów: 263
Pomógł: 9
Dołączył: 3.05.2009
Skąd: Wroc

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


Witam,

Mam kod który wygląda tak

  1. <table width="100%"><tr>
  2. <td valign="top" style="border-right:1px solid #CCC;">
  3. <h4>Filtry</h4>
  4. <table>
  5. <?php
  6.  
  7. $zapytanie="SELECT * FROM `foto_filtr` ORDER BY `id` ASC";
  8. $wykonaj=mysql_query($zapytanie);
  9.  
  10. while($wiersz=mysql_fetch_array($wykonaj))
  11. {
  12. $nazwa = $wiersz['nazwa'];
  13. $cena = $wiersz['cena'];
  14.  
  15. print'<tr><td><input type="checkbox" name="filtr_nazwa[]" value="'.$nazwa.'" /> '.$nazwa.' </td><td><input type="text" name="filtr_cena[]" class="poleCena" value="'.$cena.'" /> cena </td></tr>';
  16. }
  17.  
  18. ?>
  19. </table>
  20. </td>
  21. <td valign="top" style="border-right:1px solid #CCC;">
  22. <h4>Papier</h4>
  23. <table>
  24. <?php
  25.  
  26. $zapytanie="SELECT * FROM `foto_papier` ORDER BY `id` ASC";
  27. $wykonaj=mysql_query($zapytanie);
  28.  
  29. while($wiersz=mysql_fetch_array($wykonaj))
  30. {
  31. $nazwa = $wiersz['nazwa'];
  32. $cena = $wiersz['cena'];
  33.  
  34. print'<tr><td><input type="checkbox" name="papier_nazwa[]" value="'.$nazwa.'" /> '.$nazwa.' </td><td><input type="text" name="filtr_papier[]" class="poleCena" value="'.$cena.'" /> cena </td></tr>';
  35. }
  36.  
  37. ?>
  38. </table>
  39. </td>
  40. <td valign="top">
  41. <h4>Rozmiar</h4>
  42. <table>
  43.  
  44. <?php
  45.  
  46. $zapytanie="SELECT * FROM `foto_rozmiar` ORDER BY `id` ASC";
  47. $wykonaj=mysql_query($zapytanie);
  48.  
  49. while($wiersz=mysql_fetch_array($wykonaj))
  50. {
  51. $nazwa = $wiersz['nazwa'];
  52. $cena = $wiersz['cena'];
  53.  
  54. print'<tr><td><input type="checkbox" name="papier_rozmiar[]" value="'.$nazwa.'" /> '.$nazwa.' </td><td><input type="text" name="filtr_rozmiar[]" class="poleCena" value="'.$cena.'" /> cena </td></tr>';
  55. }
  56.  
  57. ?>
  58. </table>
  59. </td>
  60. </tr></table>


w jaki sposób zrobić przechwycenie tego do bazy danych (IMG:style_emoticons/default/questionmark.gif)


próbowałęm tak ale nie działa

  1. $il = count($filtr_nazwa);
  2. for($i=0; $i < $il; $i++) {
  3. $query = "INSERT INTO foto_kat_filtr (id, nazwa, cena) VALUES ( 0, '".$id."', '".$filtr_nazwa[$i]."','".$filtr_cena[$i]."')";
  4. $wynik = mysql_query($query);
  5. }
  6.  
  7. $il = count($papier_nazwa);
  8. for($i=0; $i < $il; $i++) {
  9. $query = "INSERT INTO foto_kat_papier (id, nazwa, cena) VALUES ( 0, '".$id."', '".$papier_nazwa[$i]."','".$papier_cena[$i]."')";
  10. $wynik = mysql_query($query);
  11. }
  12.  
  13. $il = count($rozmiar_nazwa);
  14. for($i=0; $i < $il; $i++) {
  15. $query = "INSERT INTO foto_kat_rozmiar (id, nazwa, cena) VALUES ( 0, '".$id."', '".$rozmiar_nazwa[$i]."','".$rozmiar_cena[$i]."')";
  16. $wynik = mysql_query($query);
  17. }


Ten post edytował XP'ek 30.12.2011, 12:11:49
Go to the top of the page
+Quote Post
piotrek_ma_probl...
post
Post #2





Grupa: Zarejestrowani
Postów: 47
Pomógł: 2
Dołączył: 6.02.2007
Skąd: Kotlina Kłodazka

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


Ja zazwyczaj robię to w taki sposób może coś pomoże :]

  1. <FORM METHOD=POST ACTION="?a=show" name="l" autocomplete=off>
  2. <td align="center">
  3. <input type="submit" name="submit" value="wyślij";">
  4. </td>
  5. </form>
  6. if ($a=show){
  7. if($submit){
  8. {
  9.  
  10. mysql_select_db ("stopnie");
  11. $sql = "INSERT INTO `database`.`table` (id, ) VALUES ( NULL,)";
  12. $result = mysql_query($sql) or die(mysql_error());
  13. }
  14. }
  15. }
Go to the top of the page
+Quote Post
buliq
post
Post #3





Grupa: Zarejestrowani
Postów: 559
Pomógł: 93
Dołączył: 4.03.2008
Skąd: Olsztyn

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


A przypisujesz pod $filtrnazwa itp dane z POST? Zainstaluj firebug lub jak masz Chrome to odpal Inspector (ctrl+shift+j). Tam w network będziesz miał w jaki sposób zostały przesłane dane. Na leniwca wyświetl zawartość $_POST przy pomocy print_r

Poza tym nie szybciej użyć foreach?
Go to the top of the page
+Quote Post
XP'ek
post
Post #4





Grupa: Zarejestrowani
Postów: 263
Pomógł: 9
Dołączył: 3.05.2009
Skąd: Wroc

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


tak zmienna jest i print_r wyświetla tablice a błąd zlokalizowany zabłkany znak w zmiennej

ale pojawił się drugi problem podczas dodania jeszcze jednego pola o nazwie cena robią się schody


  1. <input type="checkbox" name="rozmiar_nazwa[]" value="13x28" /> 13x28 <input type="text" name="rozmiar_cena[]" value="13x28 zł" /> 13x28 zł <br />
  2. <input type="checkbox" name="rozmiar_nazwa[]" value="53x55" /> 53x55 <input type="text" name="rozmiar_cena[]" value="53x55 zł" /> 53x55 zł <br />
  3. <input type="checkbox" name="rozmiar_nazwa[]" value="50x50" /> 50x50 <input type="text" name="rozmiar_cena[]" value="50x50 zł" /> 50x50 zł <br />
  4. <input type="checkbox" name="rozmiar_nazwa[]" value="50x30" /> 50x30 <input type="text" name="rozmiar_cena[]" value="50x30 zł" /> 50x30 zł <br />


i dajmy rozmiar zaznaczę 2, 3, 4 to cene przypisuje mi 1, 2, 3 jak ustawić kolejność (IMG:style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
buliq
post
Post #5





Grupa: Zarejestrowani
Postów: 559
Pomógł: 93
Dołączył: 4.03.2008
Skąd: Olsztyn

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


Spójrz na składnię for:
  1. for($i=0; $i < $il; $i++)

Za każdym razem rozpoczyna od 0 nawet jeśli nie uzupełnisz pierwszego pola. Ale $il zawiera ilość elementów, czyli nawet jak uzupełnisz tylko ostatni input to i tak wykona się pętla tylko dla pierwszego elementu. Dlatego najlepiej użyć foreach:
  1. foreach($rozmiar_nazwa as $i => $wartosc)

$i przyjmie klucz elementu, natomiast $wartosc przyjmie to co wybrałeś (np 50x30). Cenę pobierzesz dzięki $i
Go to the top of the page
+Quote Post
XP'ek
post
Post #6





Grupa: Zarejestrowani
Postów: 263
Pomógł: 9
Dołączył: 3.05.2009
Skąd: Wroc

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


Cytat(buliq @ 30.12.2011, 13:59:07 ) *
Spójrz na składnię for:
  1. for($i=0; $i < $il; $i++)

Za każdym razem rozpoczyna od 0 nawet jeśli nie uzupełnisz pierwszego pola. Ale $il zawiera ilość elementów, czyli nawet jak uzupełnisz tylko ostatni input to i tak wykona się pętla tylko dla pierwszego elementu. Dlatego najlepiej użyć foreach:
  1. foreach($rozmiar_nazwa as $i => $wartosc)

$i przyjmie klucz elementu, natomiast $wartosc przyjmie to co wybrałeś (np 50x30). Cenę pobierzesz dzięki $i



owszem ale jeśli tak zrobię to i tka nie pobiorę odpowiedniej wartości ponieważ wysyła mi tablicę w ten sposób

Cytat
Array ( [rozmiar_cena] => Array ( [0] => 13x28 zł [1] => 53x55 zł [2] => 50x50 zł [3] => 50x30 zł ) [rozmiar_nazwa] => Array ( [0] => 53x55 [1] => 50x50 ) [dodaj] => Wyślij )
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Nie bardzo kumam sensu w ogóle przesyłania tych drugich inputów rozmiar_cena
Zawiera to samo co rozmiar_nazwa. Czemuś to w ogóle służy? To można modyfikować i wstawiać jako wartość cokolwiek?
Go to the top of the page
+Quote Post
XP'ek
post
Post #8





Grupa: Zarejestrowani
Postów: 263
Pomógł: 9
Dołączył: 3.05.2009
Skąd: Wroc

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


Cytat(nospor @ 30.12.2011, 14:19:54 ) *
Nie bardzo kumam sensu w ogóle przesyłania tych drugich inputów rozmiar_cena
Zawiera to samo co rozmiar_nazwa. Czemuś to w ogóle służy? To można modyfikować i wstawiać jako wartość cokolwiek?



tak można modyfikować i tam będzie cena podawana (IMG:style_emoticons/default/smile.gif)

np. papier o rozmiarze 13x14 => 0.20 zł
Go to the top of the page
+Quote Post
nospor
post
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Dobra, skoro już widzę sens to proszę:

dla inputów z ceną nie nadawaj nazwy: rozmiar_cena[]
a: rozmiar_cena13x28
rozmiar_cena53x55
....

później na podstawie zaznaczonego checkboxa możesz bez problemu pobrać odpowiadającą mu wartość z inputa cena.
Go to the top of the page
+Quote Post
buliq
post
Post #10





Grupa: Zarejestrowani
Postów: 559
Pomógł: 93
Dołączył: 4.03.2008
Skąd: Olsztyn

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


Dobra ja już widzę błąd w moim rozumowaniu. Nie zwróciłem uwagi że nazwy są checkboxami, gdyby były to inputy to zadziałało by to. Jeżeli chcesz używać wielu rozmiarów zapisanych w jakiejś tablicy, to generuj ten formularz z tej tablicy i przypisuj klucze nazwom pól.
Go to the top of the page
+Quote Post
XP'ek
post
Post #11





Grupa: Zarejestrowani
Postów: 263
Pomógł: 9
Dołączył: 3.05.2009
Skąd: Wroc

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


Cytat
Dobra, skoro już widzę sens to proszę:

dla inputów z ceną nie nadawaj nazwy: rozmiar_cena[]
a: rozmiar_cena13x28
rozmiar_cena53x55
....

później na podstawie zaznaczonego checkboxa możesz bez problemu pobrać odpowiadającą mu wartość z inputa cena.


ok ale jak to przekazać do bazy (IMG:style_emoticons/default/questionmark.gif)


Cytat
Dobra ja już widzę błąd w moim rozumowaniu. Nie zwróciłem uwagi że nazwy są checkboxami, gdyby były to inputy to zadziałało by to. Jeżeli chcesz używać wielu rozmiarów zapisanych w jakiejś tablicy, to generuj ten formularz z tej tablicy i przypisuj klucze nazwom pól.



jak w tablicę (IMG:style_emoticons/default/questionmark.gif)

Ten post edytował XP'ek 30.12.2011, 14:36:20
Go to the top of the page
+Quote Post
buliq
post
Post #12





Grupa: Zarejestrowani
Postów: 559
Pomógł: 93
Dołączył: 4.03.2008
Skąd: Olsztyn

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


  1. $form = array("13x28","53x55","50x50","50x30");
  2. //tu generujesz formularz
  3. foreach ($form as $k=>$v) echo '<input type="checkbox" name="rozmiar_nazwa['.$k.']" value="'.$v.'" /> '.$v.' <input type="text" name="rozmiar_cena['.$k.']" value="'.$v.' zł" /> '.$v.' zł <br />';


I to z poprzednim moim kodem powinno już działać.
Go to the top of the page
+Quote Post
XP'ek
post
Post #13





Grupa: Zarejestrowani
Postów: 263
Pomógł: 9
Dołączył: 3.05.2009
Skąd: Wroc

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


Cytat(buliq @ 30.12.2011, 14:39:45 ) *
  1. $form = array("13x28","53x55","50x50","50x30");
  2. //tu generujesz formularz
  3. foreach ($form as $k=>$v) echo '<input type="checkbox" name="rozmiar_nazwa['.$k.']" value="'.$v.'" /> '.$v.' <input type="text" name="rozmiar_cena['.$k.']" value="'.$v.' zł" /> '.$v.' zł <br />';


I to z poprzednim moim kodem powinno już działać.



działa super dzięki (IMG:style_emoticons/default/smile.gif) )

tylko jak przekazać dwa parametry dla tej jednej pętli (IMG:style_emoticons/default/questionmark.gif)

np. dla 13X28 rozmiar 13x28 i cena np. 0.10
Go to the top of the page
+Quote Post
buliq
post
Post #14





Grupa: Zarejestrowani
Postów: 559
Pomógł: 93
Dołączył: 4.03.2008
Skąd: Olsztyn

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


Wszystkie wartości w tablicy mają ustawiony klucz tak? w foreach jako klucz ustawiasz zmienną $i. i wystarczy teraz odwołać się do danego elementu w odpowiedniej tablicy wartości.
Go to the top of the page
+Quote Post
XP'ek
post
Post #15





Grupa: Zarejestrowani
Postów: 263
Pomógł: 9
Dołączył: 3.05.2009
Skąd: Wroc

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


  1. $form = array("nazwa" => array("13x28","53x55","50x50","50x30"), "cena" => array("0.20", "0.40", "0.10", "0.50"));
  2.  
  3. //tu generujesz formularz
  4.  
  5. foreach ($form as $k=>$v)
  6. print '<input type="checkbox" name="rozmiar_nazwa['.$k.']" value="'.$v.'" /> '.$v.' <input type="text" name="rozmiar_cena['.$k.']" value="'.$v.' zł" /> '.$v.' zł <br />';


jak $form przenieść na pętle
Go to the top of the page
+Quote Post
buliq
post
Post #16





Grupa: Zarejestrowani
Postów: 559
Pomógł: 93
Dołączył: 4.03.2008
Skąd: Olsztyn

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


Tutaj już trochę inaczej:
  1. foreach ($form as $k=>$v)
  2. //$k to jest to samo co nazwa i cena
  3. //$v to jest to samo co $form['nazwa'] i $form['cena']

powinno być:
  1. foreach ($form['nazwa'] as $k=>$v)
  2. print '<input type="checkbox" name="rozmiar_nazwa['.$k.']" value="'.$v.'" /> '.$v.' <input type="text" name="rozmiar_cena['.$k.']" value="'.$form['cena'][$k].' zł" /> '.$form['cena'][$k].' zł <br />';


Ten post edytował buliq 30.12.2011, 18:39:58
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 25.08.2025 - 06:45