Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php]Lista produktów z checkbox
defrost
post
Post #1





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 24.03.2003
Skąd: Warszawa

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


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 15)
nospor
post
Post #2





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




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
Go to the top of the page
+Quote Post
defrost
post
Post #3





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 24.03.2003
Skąd: Warszawa

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


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>


Ten post edytował defrost 20.03.2006, 16:21:08
Go to the top of the page
+Quote Post
nospor
post
Post #4





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




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
Go to the top of the page
+Quote Post
defrost
post
Post #5





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 24.03.2003
Skąd: Warszawa

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


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ę (IMG:http://forum.php.pl/style_emoticons/default/cool.gif)

Ten post edytował defrost 20.03.2006, 18:24:59
Go to the top of the page
+Quote Post
-Guest-
post
Post #6





Goście







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 (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
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 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
Go to the top of the page
+Quote Post
defrost
post
Post #8





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 24.03.2003
Skąd: Warszawa

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


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?

Ten post edytował defrost 21.03.2006, 10:31:18
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




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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

ps: i nie pisz dwoch postow pod sobą
Go to the top of the page
+Quote Post
defrost
post
Post #10





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 24.03.2003
Skąd: Warszawa

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


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 :-)
Go to the top of the page
+Quote Post
nospor
post
Post #11





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




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? (IMG:http://forum.php.pl/style_emoticons/default/aaevil.gif)
Go to the top of the page
+Quote Post
defrost
post
Post #12





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 24.03.2003
Skąd: Warszawa

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


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 :-(

Ten post edytował defrost 21.03.2006, 10:53:10
Go to the top of the page
+Quote Post
krzyszbi
post
Post #13





Grupa: Zarejestrowani
Postów: 251
Pomógł: 13
Dołączył: 15.09.2005

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


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
Go to the top of the page
+Quote Post
defrost
post
Post #14





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 24.03.2003
Skąd: Warszawa

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


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 to the top of the page
+Quote Post
-Gość_mateusz-
post
Post #15





Goście







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 to the top of the page
+Quote Post
-Gość_mateusz-
post
Post #16





Goście







Przepraszam za kłopot, uświadomiłem sobie właśnie, że cały czas używałem method=get (IMG:http://forum.php.pl/style_emoticons/default/dry.gif)
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: 22.08.2025 - 17:09