Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL][PHP] POST i przechwycenie tablicy do bazy
Forum PHP.pl > Forum > Przedszkole
XP'ek
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 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. }
piotrek_ma_problem
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. }
buliq
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?
XP'ek
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ść questionmark.gif
buliq
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
XP'ek
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 )
nospor
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?
XP'ek
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 smile.gif

np. papier o rozmiarze 13x14 => 0.20 zł
nospor
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.
buliq
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.
XP'ek
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 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ę questionmark.gif
buliq
  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ć.
XP'ek
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 smile.gif)

tylko jak przekazać dwa parametry dla tej jednej pętli questionmark.gif

np. dla 13X28 rozmiar 13x28 i cena np. 0.10
buliq
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.
XP'ek
  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
buliq
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 />';
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.