Avatar billede BTEngineer Novice
01. februar 2017 - 08:54 Der er 1 løsning

Checkbox for-loop forkert indsættelse i MySQL

Hej eksperter,

Jeg sidder og døjer med et tilmeldingssystem, hvor det skal være muligt at krydse 2 checkboxes af frivilligt for hver deltager. Det er muligt at vælge antal deltagere, dvs. at checkboxene et lavet som et array. De to checkboxe:

<input type="checkbox" name="DSKYU[]" value="DSKYU1" class="custom-control-input">

<input type="checkbox"  name="DFF[]" value="DFF1" class="custom-control-input">

Når det er submittet køre php i samme fil:

if(isset($_POST["tilmeld"])) { // Køres når der er submitted

for($i = 0;$i < $nr;$i++) { // $nr er antallet af deltagere fra 1 til 5.
                                   
if(isset($_POST['DSKYU'][$i]) && $_POST['DSKYU'][$i] == "DSKYU1") {
echo "DSKYU1 ER sat<br>";
$dskyucontribution = "50";
} else {
echo "DSKYU1 IKKE sat<br>";
$dskyucontribution = "0";
}

if(isset($_POST['DFF'][$i])&& $_POST['DFF'][$i] == "DFF1") {
echo "DFF1 ER sat<br>";
$dffcontribution = "50";
} else {
$dffcontribution = "0";
echo "DFF1 IKKE sat<br>";
}
                               
if(isset($_POST['DSKYU'][$i]) && $_POST['DSKYU'][$i] == "DSKYU2") {
echo "DSKYU2 ER sat<br>";
$dskyucontribution = "50";
} else {
$dskyucontribution = "0";
echo "DSKYU2 IKKE sat<br>";
}

if(isset($_POST['DFF'][$i])&& $_POST['DFF'][$i] == "DFF2") {
echo "DFF2 ER sat<br>";
$dffcontribution = "50";
} else {
$dffcontribution = "0";
echo "DFF2 IKKE sat<br>";
}

$fornavn = $_POST['fornavn'];
$efternavn = $_POST['efternavn'];
$klub = $_POST['klub'];
                               
$fornavn = $fornavn[$i];
$efternavn = $efternavn[$i];
$klub = $klub[$i];
$arrangementid = $_GET["id"];
$tilmeldingsid = $lastid;
$dato = date("d/m-Y");
$klok = date("H:i:s");
                               
$insert = $conn->prepare("INSERT INTO `deltagerliste` (`fornavn`, `efternavn`, `klub`, `tilmeldingsid`, `arrangementid`, `dato`, `klok`, `dskyu`, `dff`) VALUES (?,?,?,?,?,?,?,?,?)");
$insert->bind_param('sssiissss',$fornavn,$efternavn,$klub,$tilmeldingsid,$arrangementid,$dato,$klok,$dskyucontribution,$dffcontribution);
$insert->execute();
$insert->close();
}

Alt andet virker, udover at der bliver smidt forkert data ind i `dff` og `dskyu`, formentlig pga. for() loopet. Jeg er godt nok i tvivl om hvordan jeg skal smide de rette værdier ind i min sql query. Jeg har også oplevet at hvis man tjekker begge deltagere 2 checkbox af, men lader deltager 1 checkbox stå tomme, så smider den alligevel 50 og 50 ind hos deltager 1 og 0 ind i deltager 2.

Jeg håber der er nogen der kan komme med bud på, hvor den går galt/hvordan det evt. kan løses..

Tak på forhånd

// Henrik
Avatar billede BTEngineer Novice
01. februar 2017 - 09:20 #1
Tror jeg har forstået den grundlæggende fejl i dette: Når formen er submitted, dannes et array som kun indeholder det antal der er afkrydset. Dvs. jeg får kun et array på 3 værdier ud af 4 (ved 2 deltagere), de to første indsættes ved deltager 1, og den resterende værdi hos deltager 2.

Men koger stadig lidt over, hvordan dette evt. kan løses på en god måde?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester