timeo
20.03.2018, 09:08:51
Witam
Dzisiaj borykam się z takim problemem. Mam w pętli while kilka checkboxów i chciałbym, żeby klient zaznaczył (żeby to było obowiązkowe) jednego checkbox. Gdy wpisuję w tabeli przy checkbox required to formularz każe zaznaczyć wszystkie opcje.
Poniżej kod.
<div class="form-group">
<?php
include('configbase.php');
$q = $_GET['q'];
$stmt = $db->query("SELECT * FROM cennik2019 WHERE PELNANAZWA = '".$q."' GROUP BY EAN ");
$stmt3 = $db->query("SELECT * FROM cennik2019 WHERE PELNANAZWA = '".$q."' AND ALERT <> 'ALERT' GROUP BY PRODUKT ");
while($row2 = $stmt3->fetch()){
?>
<br>
<input type="checkbox" required name="category['
<?php echo $row2['ID']; ?>']" id="category['
<?php echo $row2['ID']; ?>']">
<?php echo " ".$row2['TYP'] . " " . $row2['INFO']. " " . $row2['RAMKA']. " " . $row2['KOLOR']; ?>
<input type="hidden" name="MARKA" value="
<?php echo $row2['MARKA']; ?>" readonly>
<input type="hidden" name="MODEL" value="
<?php echo $row2['MODEL']; ?>" readonly>
<input type="hidden" name="KATEGORIA['
<?php echo $row2['ID']; ?>']" value="
<?php echo $row['KATEGORIA']; ?>" readonly>
<input type="hidden" name="CZESCTYP['
<?php echo $row2['ID']; ?>']" value="
<?php echo $row2['CZESCTYPE']; ?>" readonly>
<input type="hidden" name="EAN['
<?php echo $row2['ID']; ?>']" value="
<?php echo $row2['EAN']; ?>" readonly>
<input type="hidden" name="SKU['
<?php echo $row2['ID']; ?>']" value="
<?php echo $row2['SKU']; ?>" readonly>
<input type="hidden" name="TYP" value="
<?php echo $row2['TYP']; ?>" readonly>
<?php echo $row2['PRODUKT'].'<br>'; }?>
</div>
olszam
20.03.2018, 09:57:53
Bo dla każdego checkboxa przypisujesz required i źle to robisz bo w tej chwili wymagasz by każdy chceckbox był obowiązkowo zaznaczony.
trueblue
20.03.2018, 10:04:23
Zmień na typ radio.
timeo
20.03.2018, 10:14:55
Ok. Radio
Wprowadzam takie coś
<input type="radio" name="category" id="category['
<?php echo $row2['ID']; ?>']">
<?php echo " ".$row2['TYP'] . " " . $row2['INFO']. " " . $row2['RAMKA']. " " . $row2['KOLOR']; ?>
a co z resztą ukrytych danych (z pól inout hidden), żeby zostały przekazane do następnego kroku?
<input type="hidden" name="MARKA" value="
<?php echo $row2['MARKA']; ?>" readonly>
<input type="hidden" name="MODEL" value="
<?php echo $row2['MODEL']; ?>" readonly>
<input type="hidden" name="KATEGORIA['
<?php echo $row2['ID']; ?>']" value="
<?php echo $row['KATEGORIA']; ?>" readonly>
<input type="hidden" name="CZESCTYP['
<?php echo $row2['ID']; ?>']" value="
<?php echo $row2['CZESCTYPE']; ?>" readonly>
<input type="hidden" name="EAN['
<?php echo $row2['ID']; ?>']" value="
<?php echo $row2['EAN']; ?>" readonly>
<input type="hidden" name="SKU['
<?php echo $row2['ID']; ?>']" value="
<?php echo $row2['SKU']; ?>" readonly>
<input type="hidden" name="TYP" value="
<?php echo $row2['TYP']; ?>" readonly>
<?php echo $row2['PRODUKT'].'<br>';
trueblue
20.03.2018, 10:26:54
A nie są przesyłane?
Atrybut readonly dla pola hidden nie jest potrzebny i nie jest to również sposób na zabezpieczenie przed modyfikacją zawartości. Większość pól ma wartości z rekordu o tym samym id kategorii co wybrana kategoria, więc możesz je odczytać z bazy w drugim kroku. Wyjątkiem jest wartość KATEGORIA, ale tu chyba pomyliłeś się.
timeo
20.03.2018, 10:34:32
Dopisanie wartości do radio buttona poniższego powoduje, że mogę zaznaczyć kilka opcji.
name="category['
<?php echo $row2['ID']; ?>']"
trueblue
20.03.2018, 10:36:15
Bo grupa radio ma mieć wspólną nazwę.
W jaki celu nadajesz nazwę tablicową, skoro radio i tak przekazuje jedną wartość?
timeo
20.03.2018, 10:41:22
Radio name jest
name="categoria"
Ale var_dump pokazuje wszysttko co wywaliło z tabeli w przypadku checbkoxa jest tylko dana kategoria a nie wszystkie.
trueblue
20.03.2018, 10:43:29
"Wszystko co wywaliło z tabeli", czyli co dokładnie?
timeo
20.03.2018, 10:46:57
Proszę
["KATEGORIA"]=> array(17) { ["'37'"]=> string
(0) "" ["'2026'"]=> string
(0) "" ["'680'"]=> string
(0) "" ["'681'"]=> string
(0) "" ["'682'"]=> string
(0) "" ["'792'"]=> string
(0) "" ["'875'"]=> string
(0) "" ["'874'"]=> string
(0) "" ["'879'"]=> string
(0) "" ["'878'"]=> string
(0) "" ["'876'"]=> string
(0) "" ["'880'"]=> string
(0) "" ["'1339'"]=> string
(0) "" ["'1342'"]=> string
(0) "" ["'1340'"]=> string
(0) "" ["'1341'"]=> string
(0) "" ["'2059'"]=> string
(0) "" } ["CZESCTYP"]=> array(17) { ["'37'"]=> string
(7) "Bateria" ["'2026'"]=> string
(3) "PCB" ["'680'"]=> string
(5) "Frame" ["'681'"]=> string
(5) "Frame" ["'682'"]=> string
(5) "Frame" ["'792'"]=> string
(15) "Szklo hartowane" ["'875'"]=> string
(5) "Glass" ["'874'"]=> string
(5) "Glass" ["'879'"]=> string
(5) "Glass" ["'878'"]=> string
(5) "Glass" ["'876'"]=> string
(5) "Glass" ["'880'"]=> string
(5) "Glass" ["'1339'"]=> string
(7) "Fullset" ["'1342'"]=> string
(19) "Fullset with frame " ["'1340'"]=> string
(7) "Fullset" ["'1341'"]=> string
(19) "Fullset with frame " ["'2059'"]=> string
(6) "Socket" } ["EAN"]=> array(17) { ["'37'"]=> string
(13) "2256624100345" ["'2026'"]=> string
(13) "2266624101402" ["'680'"]=> string
(13) "2040130626013" ["'681'"]=> string
(13) "2040130626020" ["'682'"]=> string
(13) "2040130626044" ["'792'"]=> string
(13) "2276624100695" ["'875'"]=> string
(13) "2020130326021" ["'874'"]=> string
(13) "2020130326014" ["'879'"]=> string
(13) "2020130326113" ["'878'"]=> string
(13) "2020130326090" ["'876'"]=> string
(13) "2020130326045" ["'880'"]=> string
(13) "2020130326151" ["'1339'"]=> string
(13) "2020130126027" ["'1342'"]=> string
(13) "2020130127093" ["'1340'"]=> string
(13) "2020130126058" ["'1341'"]=> string
(13) "2020130127055" ["'2059'"]=> string
(13) "2266624101211" } ["SKU"]=> array(17) { ["'37'"]=> string
(0) "" ["'2026'"]=> string
(5) "BD023" ["'680'"]=> string
(21) "FRA-SAMS40-AAA-NF-SIL" ["'681'"]=> string
(21) "FRA-SAMS45-AAA-NF-SIL" ["'682'"]=> string
(20) "FRA-SAMS4-AAA-NF-SIL" ["'792'"]=> string
(0) "" ["'875'"]=> string
(20) "GLA-SAMS4-AAA-NF-WHI" ["'874'"]=> string
(20) "GLA-SAMS4-AAA-NF-BLK" ["'879'"]=> string
(20) "GLA-SAMS4-AAA-NF-RED" ["'878'"]=> string
(20) "GLA-SAMS4-AAA-NF-VIO" ["'876'"]=> string
(20) "GLA-SAMS4-AAA-NF-BLU" ["'880'"]=> string
(20) "GLA-SAMS4-AAA-NF-PNK" ["'1339'"]=> string
(20) "LCD-SAMS4-AAA-NF-WHI" ["'1342'"]=> string
(21) "LCD-SAMS45-AAA-WF-WHI" ["'1340'"]=> string
(20) "LCD-SAMS4-AAA-NF-DBL" ["'1341'"]=> string
(20) "LCD-SAMS4-AAA-WF-DBL" ["'2059'"]=> string
(5) "US029" }
trueblue
20.03.2018, 10:48:48
Skoro nie ograniczyłeś danych do wybranej w radio kategorii, to czego oczekujesz?
timeo
20.03.2018, 11:06:49
Ok. Chyba ogarnąłem - prośba o weryfikację
KOD
<?php
include('configbase.php');
$q = $_GET['q'];
$stmt = $db->query("SELECT * FROM cennik2019 WHERE PELNANAZWA = '".$q."' GROUP BY EAN ");
$stmt3 = $db->query("SELECT * FROM cennik2019 WHERE PELNANAZWA = '".$q."' AND ALERT <> 'ALERT' GROUP BY PRODUKT ");
while($row2 = $stmt3->fetch()){
$ID = $row2['ID'];
?>
<br>
<input type="radio" name="category" id="category['
<?php echo $row2['ID']; ?>']">
<?php echo " ".$row2['TYP'] . " " . $row2['INFO']. " " . $row2['RAMKA']. " " . $row2['KOLOR']; ?><?php
$stmt4 = $db->query("SELECT * FROM cennik2019 WHERE ID = '".$ID."' ");
while($row3 = $stmt4->fetch()){
?>
<input type="hidden" name="MARKA" value="
<?php echo $row3['MARKA']; ?>" >
<input type="hidden" name="MODEL" value="
<?php echo $row3['MODEL']; ?>" >
<input type="hidden" name="KATEGORIA" value="
<?php echo $row3['KATEGORIA']; ?>" >
<input type="hidden" name="CZESCTYP" value="
<?php echo $row3['CZESCTYPE']; ?>" >
<input type="hidden" name="EAN" value="
<?php echo $row3['EAN']; ?>" >
<input type="hidden" name="SKU" value="
<?php echo $row3['SKU']; ?>" >
<input type="hidden" name="TYP" value="
<?php echo $row3['TYP']; ?>" >
<?php echo $row3['PRODUKT'].'<br>'; }
}?>
["PELNANAZWA"]=> string(22) "Samsung Galaxy S5 mini" ["MARKA"]=> string(7) "Samsung" ["MODEL"]=> string(14) "Galaxy S5 mini" ["KATEGORIA"]=> string(6) "Szybki" ["CZESCTYP"]=> string(5) "Glass" ["EAN"]=> string(13) "2020133326059" ["SKU"]=> string(21) "GLA-SAMS5M-AAA-NF-DBL" ["TYP"]=> string(6) "Szybka" ["category"]=> string(2) "on"
trueblue
20.03.2018, 11:11:53
Nadal przesyłasz dane w polach hidden, które są niepotrzebne w tym momencie.
timeo
20.03.2018, 11:28:02
Wydawało mi się, że tak jest dobrze. Zwłaszcza, że klient nie może tego widzieć.
Input type=text?
trueblue
20.03.2018, 11:38:07
W poście #5 o tym napisał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.