Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP] Chceckbox, dodatkowe parametry.
Forum PHP.pl > Forum > Przedszkole
pisiorek
Czy można za pomocą kontrolki checkbox przekazać więcej parametrów niż tylko ten w postaci Value ? Chcę zrobić na stronie kilka chceckboxów, każdy chceckbox przypisany jest do fotografii towaru, towar posiada nazwę i cenę, chciałbym żeby zaznaczenie określonych checkboxów powodowało przekazanie do skryptu php nazwy i ceny towaru jednocześnie. Standardowo zaznaczenie checkaboxa powoduje przekazanie do php tylko parametru Value, a chciałbym przekazać i cenę i nazwę.
gorden
możesz w jednym value przekazywać kilka parametrów oddzielając je czymś, a później za pomocą php je oddzielać i wykonywać na nich dalsze operacje, np.
  1. <input type=checkbox value="cos1|cos2" name="checkbox" />

  1. $cosie = explode('|', $_POST['checkbox']);
pisiorek
Niestety otrzymuję taki komunikat:
Warning: explode() expects parameter 2 to be string, array given in D:\xampp\...
gorden
na pewno podałeś oba parametry? myślę, że trochę pokombinuj i powinno być okej.
pisiorek
Wiem gdzie jest błąd, parametr "name" jest w tym przypadku tablicą i tu jest kłopot, ale muszę go miec jako tablicę, bo na stronie musi być możliwość zaznaczania większej ilość chceckboxów na raz i potem z pomocą pętli for wylistowania wszystkich zaznaczonych elementów, da się to jakoś rozwiązać ?
Zamieszczam fragment kodu:

fragment formularza:
  1. <p><input type="checkbox" name="wybrany[]" value="foto1 , 15" /></p>
  2. <p><input type="checkbox" name="wybrany[]" value="foto2 , 10" /></p>
  3. <p><input type="checkbox" name="wybrany[]" value="foto3 , 11" /></p>


skrypt php, który ma wylistować wybrane elementy, niestety tu powstaje błąd, który pokazałem wcześniej:
  1. <?php
  2. $wybrany = explode (',', $_POST['wybrany']);
  3.  
  4. for($i = 0; $i <= count($wybrany); $i++){
  5. echo $wybrany[$i].'<br/>';
  6. }
  7.  
  8. ?>
toaspzoo
w explode zamiast ',' daj ","

czyli

Kod
$wybrany = explode (",",$_POST['wybrany']);
gorden
  1. foreach($_POST['wybrany'] as $numer) {
  2. $wybrany[$numer] = explode(', ', $_POST['wybrany'][$numer]);
  3. echo $numer.' - nazwa: '.$wybrany[$numer][0].', cena: '.$wybrany[$numer][1].'<br />';
  4. }
toaspzoo
Tylko takie coś jest niebezpieczne, lepiej tutaj trzymać tylko id a w bazie reszte
pisiorek
Dzięki koledzy za zaangażowanie w temat, SOG-i oczywiście otrzymacie.

@gorden
postęp już jakiś jest, ale jeszcze nie wszystko działa tak jak powinno, nie do końca działa chyba funkcja explode, efekt Twojego skryptu jest taki:

foto1,15 - nazwa: , cena:
foto2,10 - nazwa: , cena:
foto3,11 - nazwa: , cena:

@toaspzoo
Cytat
Tylko takie coś jest niebezpieczne, lepiej tutaj trzymać tylko id a w bazie reszte

mógłbyś troszkę rozwinąć temat, dlaczego jest niebezpieczne, czym to grozi ?
toaspzoo
W tym wypadku każdy potencjalny kupujący może manipulować ceną i przedmiotem wg jego upodobań
gorden
racja. może w value po prostu wstaw id aukcji i pobieraj z bazy potrzebne informacje ukrywające się pod nim. debugując stronę jakimś firebugiem czy czymś, można manipulować wszystkimi parametrami, między innymi value, więc każdy będzie mógł wpisać co chce.
toaspzoo
Albo WebDeveloperem
pisiorek
OK, dzięki za pomoc.

Koledzy jeszcze jedna prośba o pomoc, zrobiłem prostą bazę danych jednak jest problem z tymi checkboxami, bo jeśli parametr name mam ustawiony na "id[]", to niestety skrypt php tego nie obsługuje, tzn. nie wyświetla wyników. Jeżeli zmienię tylko parametr name na samo "id" to wtedy wszystko działa, ale nie można wyświetlić więcej niż jednego elementu, a chodzi o to że mają się wyświetlać wszystkie zaznaczone checboxy. Jak to naprawić, żeby można było zaznaczać więcej niż jeden ?
Poniżej kod formularza:
  1. <form action="zamowienie.php" method='post'>
  2. <input type="checkbox" name="id[]" value="1" />
  3. <input type="checkbox" name="id[]" value="2" />
  4. <input type="checkbox" name="id[]" value="3" />
  5. <input type="submit" value="Wyslij" />
  6. </form>


Poniżej kod php:
  1. <?php
  2. $id = $_POST['id'];
  3.  
  4. if(!$id){
  5. echo('Nic nie wybrano');
  6. }
  7.  
  8.  
  9. mysql_connect('localhost','root','') or die (mysql_error());
  10. mysql_select_db('bellaflor') or die (mysql_error());
  11.  
  12. $sql = " SELECT * from ceny WHERE id = '$id' ";
  13. $result = mysql_query($sql) or die (mysql_error());
  14.  
  15. while( $row = mysql_fetch_array( $result ) ){
  16. echo ("$row[Nazwa], $row[Cena]<br>");
  17. }
  18. ?>
toaspzoo
Daj w checkboxie name = "1", "2", "3" itd...

Potem sprawdzaj zaznaczenia issetami, czyli

if(isset($_POST['1'])) { ... }

pisiorek
Rozumiem, że w tym przypadku ten fragment kodu
Kod
if(isset($_POST['1'])) { ... }
będzie musiał być użyty dla każdego checkboxa. Jest to o tyle kłopotliwe, że będzie tego docelowo kilkadziesiąt sztuk.
toaspzoo
to zrób tworzenie pól w php i sprawdzanie
Ociu
Proponuje abyście zaczęli używać bbCode, bo skończy się zamknięciem tematu.
pisiorek
Cytat("toaspzoo")
to zrób tworzenie pól w php i sprawdzanie
Mógłbyś troszkę przybliżyć ten sposób ? Nie do końca rozumiem, jak to ugryźć.
gorden
pisiorek, użyj foreach. ta pętla przeleci przez całą tablicę $_POST i samodzielnie sprawdzi, czy istnieje. możesz w niej np przypisać do oddzielnej tablicy zaznaczone checkboxy i operować na nich, o ile dobrze zrozumiałem.
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.