Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Lista produktów z checkbox
Forum PHP.pl > Forum > Przedszkole
defrost
Przestudiowałem tamety zawierające checkbox'y ale niestety nie bardzo znalazłem to co mnie interesuje.
Mam taki oto kod:
  1. <?php
  2. print "<table border=0 cellspacing=3 cellpadding=3>";
  3. include ("config.php");
  4. mysql_connect ("$host", "$user", "$pass" ) or die ("Brak polączenia z MySQL.");
  5. mysql_select_db ("$db") or die ("Brak połączenia z bazą danych.");
  6. $wynik = mysql_query ("select * from nazwa_tabeli");
  7.  
  8.  
  9. while ($rekord = mysql_fetch_array ($wynik)) {
  10.  
  11. print "<tr><td><img src=lalki/duze/".$rekord['foto']." width=100 height=100></td>
  12.  <td align=left valign=top>
  13.  <table border=0 width=100% cellspacing=0 cellpadding=0>
  14.  <tr>
  15.  <td align=left valign=top></td>
  16.  </tr>
  17.  <tr>
  18.  <td align=left valign=top><input type=checkbox name=nazwa value=\"".$rekord['nazwa']."\" />&nbsp;".$rekord['nazwa']."</td>
  19.  </tr>
  20.  </table>
  21.  </td></tr>";
  22. }
  23. print "</table>";
  24. ?>

Efekt jest taki, że wyświetla mi się lista produktów ze zdjęciami i nazwą oraz pole checkbox. Kowalski Jan może wybrac sobie np. 2 produkty i zamówić je.
Niestety efekt działania powyższego kodu jest taki, że jak wyświetlają się 4 produkty i zaznaczone zostaną pozycje np. 2 i 3 to w zamówieniu pojawia sie zawsze ostatnia wartość - w tym przypadku 3. Jeżeli zaznaczone zostana 4 z 4-ech to wyświetli się ostatni czyli 4.

Jak zrobić, żeby po zaznaczeniu kilku lub wszystkich wyświetlały się właśnie te zaznaczone? Dumam już od 3 dni nad tym i nic mi do głowy nie przychodzi.

Niby jak w formularzu jest pole checkbox np.
  1. <input type="checkbox" name="nazwa" value="wartość1" /> Opis1
  2. <input type="checkbox" name="nazwa" value="wartość2" /> Opis2
  3. <input type="checkbox" name="nazwa" value="wartość3" /> Opis3

Zaznaczając np. 1 i 3 przesyłane jest 1 i 3 ale mi to cholerka nie działa.

Czekam na jakieś wskazówki, porady etc.

Dzięki
nospor
nalezy dla kazdego checkboxa nadac nazwę tablicową (z []):
....name="nazwa[]"...
wowczas w poscie pod indexem nazwa otrzymasz tablice zaznaczonych checkboxow lub wogole taki index nie bedzie istnial, jesli nic nie zaznaczysz
defrost
Próbowałem czegoś takiego po przeczytaniu postów na forum ale zawsze wyskakiwało mi Array
  1. <td align=left valign=top><input type=\"checkbox\" name='nazwa[]' value=\"".$rekord['nazwa']."\" />&nbsp;".$rekord['nazwa']."</td>
nospor
no bo jak napisalem: otrzymasz tablice.
zeby poruszac sie po tablicy sluzy chociazby:
http://pl.php.net/manual/pl/control-structures.foreach.php

a wogole to przeczytaj se jeszcze to:
http://pl.php.net/manual/pl/language.types.array.php
defrost
No wiele mi to nie pomogło. Tablicami jeszcze się nie zajmowałem :-(

Ale poszukałem i poczytałem dalej i znalazłem takie rozwiązanie:
  1. <?php
  2. foreach ($_POST['nazwah'] as $index=>$idRekordu){
  3. $ktore = $_POST['nazwa'][$index];
  4. print "$ktore, ";
  5. }
  6. ?>

pod checkbox'em o którym wyżej dodałem input hidden
  1. <input type="hidden" name="nazwah[]" value=".$rekord[0]." />

I teraz formularz przekazuje zaznaczone produkty dalej.


nospor dzięki za inspirację cool.gif
Guest
Z góry przepraszam, że jeden post pod drugim ale..... chciałem to zaznaczyć, żeby nie przeszło bez echa.

Zmiany, o których piszę powyżej faktycznie spowodowały, że wyświetlają się zaznaczone produkty jednak w dalszej cześci miał się wysyłać email z zamówieniem. Niestety tutaj juz nie działa foreach.

Mając 10 produktów funcja mail() wysyłała mi 10 e-maili z czego prawidłowe były tylko te, które zawierały zaznaczony produkt. Pozostałe niestety zawierały tylko dane kupującego bez produktu - pole pozostało puste.

Funkcję mail() umieściłem tak:
  1. <?php
  2. foreach ($_POST['nazwah'] as $index=>$idRekordu){
  3. $ktore = $_POST['nazwa'][$index];
  4. mail(adres,temat,tresc);
  5. }
  6. ?>

Oczywiście jest to skrót. Podczas umieszczania funkcji mail() poza foreach wysyła sie email ale pusty - to znaczy nie zawiera zaznaczonego produktu.

Wie ktos o co chodzi? W linkach od nospor'a nie znalazłem wskazówek niestety sad.gif
nospor
Nie zalapales idei. Nie musisz juz robic pol ukrytych. Checkboxy ci wystarczą .No bo poco ci te hiddeny pod checkboxami?

Pozatym pętlą lecisz po hiddenie, a potem wyswietlasz z checkboxow. Tablica z checkboxami bedzie rozna, gdyz hiddeeny wysla sie wszystkie, natomiast checkboxy tylko te, ktore zostaly zaznaczone
defrost
Hiddeny wstawiłem bo same checkboxy nie powodowały absolutnie nic. Pewnie nie bardzo wiem jak to zastosowac :-(

Możesz mnie bardziej oświecić w tej kwestii?
nospor
no ale co tu oswiecac? Przepraszam, ale nie rozumiem.
W poscie dostaniesz tablicę zaznaczonych checkboxów, o wartosiach takich, jakie wpiszesz w paramterze value. Jesli wiec chcesz otrzymac id, to musisz dla value checkboxa przypisac id rekordu (teraz przypisales to do value hiddena). Jesli zaden checkbox nie zostanie zaznaczony, to nie otrzymasz zadnej tablicy.

Jesli dalej nie rozumiesz, to napisz dokladniej czego nie rozumiesz. ale zanim to zrobisz, potestuj to jeszcze w praktyce winksmiley.jpg

ps: i nie pisz dwoch postow pod sobą
defrost
Za chwile przetestuję ale może napisze jaki efekt chcę osiągnąc.
Zaznaczam kilka checkboxów i podaję swoje dane -> naciskam wyslij i chcę dostac email z nazwami wybranych produktów oraz wpisanymi danymi.

Wydaje mi sie, że id nie jest mi potrzebne tylko nazwa, która ma zostać wstawiona w email i przesłana.

p.s. za 2 posty przeprosiłem z góry :-)
nospor
no to ok. moze byc nazwa zamiast id. to nie zmienia niczego. w opisanym problemie hiddeny są niepotrzebne.

bo ty te dodatkowe dane to wpisujesz ogolnie, nie zależnie od checkboxa?

Cytat
p.s. za 2 posty przeprosiłem z góry :-)
To ja moze zaczne dawac warningi z gory? aaevil.gif
defrost
Bez hiddenów zrobiłem to tak:
  1. <?php
  2. while($element = each($produkt))
  3. {
  4.     echo $element['value'];
  5.     echo '<br />';
  6. }
  7. ?>

Nazwy wyświetlają sie prawidłowo ale nadal nie mogę tych nazw umieścić w emailu :-(
krzyszbi
witam
chyba zapewne o cośtakiego ci chodzilo
  1. <?php
  2. $email = 'mail@do.wyslania';
  3. $subject ='Wysylanie checkboxów';
  4. if (!empty($produkt))
  5. {
  6. $checkboxy = ' Wybrane checkboxy: '.implode(' , ', $produkt);
  7. mail($email, $subject, $checkboxy);
  8. }
  9. else 
  10. mail($email, $subject, 'Nie wybrano żadnego checkboxa');
  11. ?>

jeżeli jednak nie o to to napisz
defrost
Po drobnych modyfikacjach rozwiązanie krzyszbi'ego okazało się strzałem w 10-tkę.
Ten temat sporo mnie nauczył - dzięki za pomoc chłopaki :roll2:
Gość_mateusz
Zgłaszam się bo właśnie miałem problem z checkbox. Zastosowałem się do powyższych wskazówek, ale wciąż wyskakiwał błąd:
Warning: Invalid argument supplied for foreach() in c:\usr\krasnal\www\test\test99.php on line 38
Nie wiedzieć czemu rozwiązanie okazało się dla mnie zaskakujące, zrezygnowałem z $_POST['miasto'] ( przy takim zapisie pojawiał się powyższy warning ) na rzecz zapisu mniej formalnego:
  1. foreach ( $miasto as $id_miasto ){ }

Wiem że jest to rozwiązanie krótkotrwałe. Jeśli można spytać, z czego to wynika i najlepiej , jak sobie z tym poradzić. Z góry dziękuję.
Gość_mateusz
Przepraszam za kłopot, uświadomiłem sobie właśnie, że cały czas używałem method=get dry.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.