Ik heb hier een code waarbij je een training onder meerdere categorien en subcategorien kan toevoegen.
het probleem is wanneer je een training onder een categorie toevoegd die subcategorien heeft lukt het wel, maar wanneer je een categorie selecteert die geen subcategorien heeft en het toevoegd, het niet opslaat in de database. Graag jullie hulp.

dit is mijn code
form.php

<?php
mysql_connect('localhost','root','');

mysql_select_db('test');




$query = "SELECT id FROM training ORDER BY id DESC LIMIT 1";
$resultaat = mysql_query($query);
$rij = mysql_fetch_array($resultaat);
$laatste_id = $rij["id"];

$id_num = $laatste_id + 1;
$nieuw_id = $id_num;
?>
<html>
<head>
<script type = "text/javascript">
//categorie en subcategorie
function showSelect33() {
var d = document.getElementById("mydiv33");
if (document.getElementById("chk33").checked) {
d.style.display ="block";
}
else {
d.style.display = "none";
d.selectedIndex = 0;
}
}

function showSelect34() {
var d = document.getElementById("mydiv34");
if (document.getElementById("chk34").checked) {
d.style.display ="block";
}
else {
d.style.display = "none";
d.selectedIndex = 0;
}
}

function showSelect35() {
var d = document.getElementById("mydiv35");
if (document.getElementById("chk35").checked) {
d.style.display ="block";
}
else {
d.style.display = "none";
d.selectedIndex = 0;
}
}
</script>
</head>
<body>
<div id="training">
<b>Een nieuwe training toevoegen:</b>
<br/><br/>
    <form name="formulier" action="invoegen.php" method="post" >
        <table width="300" border="0">
          <tr>
            <td><input type="hidden" name="tid" readonly="readonly" value="<?php echo $nieuw_id; ?>" style="text-align:right" /></td>
          </tr>
          <tr>
            <td>Naam</td>
            <td><input type="text" name="naam" style="text-align:right" /></td>
          </tr>
		  <tr>
            <td>Beschrijving</td>
            <td><input type="text" name="beschrijving" style="text-align:right" /></td>
          </tr>
        </table>
</div>

<div id="choseLoc">
    <table border="0">
  <br>Selecteer Categorie:
  <div id=""> 
    <input type="checkbox" id = "chk33" name="chk3[]" value="1" onclick = "showSelect33()">A<br>
</div>
<div id = "mydiv33" style="display:none">
</div>
<div id=""> 
    <input type="checkbox" id = "chk34" name="chk3[]" value="2" onclick = "showSelect34()">B<br>
</div>
<div id = "mydiv34" style="display:none">
</div>
<div id=""> 
    <input type="checkbox" id = "chk35" name="chk3[]" value="3" onclick = "showSelect35()">B<br>
</div>
<div id = "mydiv35" style="display:none">
<input type="checkbox" name="chk4[3][]"  value="1">B1<br />
<input type="checkbox" name="chk4[3][]"  value="2">B2<br />
<input type="checkbox" name="chk4[3][]"  value="2">B3<br />
<input type="checkbox" name="chk4[3][]"  value="4">B4<br />
</div>
    </table>
</div>
<br/>
<div id="buttons">
    <input type="reset" value="Leeghalen" /> <input type="submit" value="Opslaan" name="opslaan" />
    </form>
</div>
</body>
</html>


invoegen.php

<?php
mysql_connect('localhost','root','');

mysql_select_db('test');

/* Nieuwe ID genereren */
$query = "SELECT id FROM training ORDER BY id DESC LIMIT 1";
$resultaat = mysql_query($query);
$rij = mysql_fetch_array($resultaat);
$laatste_id = $rij["id"];

$id_num = $laatste_id + 1;
$nieuw_id = $id_num;



$tel = mysql_num_rows($resultaat);
?>

<?php
if(isset($_POST["opslaan"]))
{
    //training gegevens opslaan
    $id = $_POST["tid"];
    $naam = $_POST["naam"];
	$beschrijving = $_POST["beschrijving"];

    $query = "INSERT INTO training(id, training_naam, beschrijving) VALUES('$id', '$naam', '$beschrijving')";
    $resultaat = mysql_query($query);
   

$afd_subafd = array();
if (isset($_POST['chk3'])){
foreach ($_POST['chk3'] as $key) {
}
}
    if (isset($_POST['chk4'][$key])) {
        foreach($_POST['chk4'][$key] as $sub) {
            $afd_subafd[] = '(' . (int)$key . ',' . (int) $sub . ',' . (int) $id . ')';
        }
   }
if (count($afd_subafd) > 0) {
    $query = "INSERT INTO training_cat_subcat(cat_id,subcat_id,training_id) VALUES " . implode(',', $afd_subafd);
    mysql_query($query);
}	
?>
<?php
    } 	
?>
<a href="form.php">Nog een training toevoegen</a>;
<a href="index.php">Terug naar de hoofdmenu</a>;
Even wat opmerkingen bij je code:

form.php
Stap over op mysqli of pdo. mysql is deprecated.
Waar is de foutafhandeling van je query?
Waarom regel 12 t/m 15? Je maakt daar drie (!) variabelen aan. Lijkt mij twee te veel.

Een formulier wordt tegenwoordig zelden nog opgemaakt d.m.v. een tabel, maar met css.
Waarom
<div id="">
? Een id moet een unieke naam hebben. Jij gebruikt op meerdere plaatsen geen naam.
Verder zou ik niet gaan werken met nummers in je formulier. Heb jij (over twee maanden) enig idee welk nummer bij welke checkbox (of ander veld) hoort?

invoegen.php
Deels dezelfde opmerkingen als over form.php
Waar controleer je of de $_POST-waarden bestaan? Je maakt wel nieuwe variabelen aan (waarom eigenlijk) op regel 24 - 26. Vervolgens heb je geen enkele beveiliging in je query, waardoor je script lek is. Iemand kan daardoor toegang krijgen tot je database.

Ten aanzien van je vraag:
zet error-reporting aan.
bouw foutafhandeling in.
ga debuggen: wordt het script doorlopen op de manier die je verwacht?

Bedankt voor de tips, zal Ik zeker wat mee doen. Weet je ook hoe Ik het probleem moet oplossen?
Obelix en Idefix op 03/05/2014 12:38:25

Even wat opmerkingen bij je code:

form.php
Stap over op mysqli of pdo. mysql is deprecated.
Waar is de foutafhandeling van je query?
Waarom regel 12 t/m 15? Je maakt daar drie (!) variabelen aan. Lijkt mij twee te veel.

Een formulier wordt tegenwoordig zelden nog opgemaakt d.m.v. een tabel, maar met css.
Waarom
<div id="">
? Een id moet een unieke naam hebben. Jij gebruikt op meerdere plaatsen geen naam.
Verder zou ik niet gaan werken met nummers in je formulier. Heb jij (over twee maanden) enig idee welk nummer bij welke checkbox (of ander veld) hoort?

invoegen.php
Deels dezelfde opmerkingen als over form.php
Waar controleer je of de $_POST-waarden bestaan? Je maakt wel nieuwe variabelen aan (waarom eigenlijk) op regel 24 - 26. Vervolgens heb je geen enkele beveiliging in je query, waardoor je script lek is. Iemand kan daardoor toegang krijgen tot je database.

Ten aanzien van je vraag:
zet error-reporting aan.
bouw foutafhandeling in.
ga debuggen: wordt het script doorlopen op de manier die je verwacht?






Toevoeging op 03/05/2014 13:42:01:

Bedankt voor de tips, zal Ik zeker wat mee doen. Weet je ook hoe Ik het probleem moet oplossen?
Obelix en Idefix op 03/05/2014 12:38:25

Even wat opmerkingen bij je code:

form.php
Stap over op mysqli of pdo. mysql is deprecated.
Waar is de foutafhandeling van je query?
Waarom regel 12 t/m 15? Je maakt daar drie (!) variabelen aan. Lijkt mij twee te veel.

Een formulier wordt tegenwoordig zelden nog opgemaakt d.m.v. een tabel, maar met css.
Waarom
<div id="">
? Een id moet een unieke naam hebben. Jij gebruikt op meerdere plaatsen geen naam.
Verder zou ik niet gaan werken met nummers in je formulier. Heb jij (over twee maanden) enig idee welk nummer bij welke checkbox (of ander veld) hoort?

invoegen.php
Deels dezelfde opmerkingen als over form.php
Waar controleer je of de $_POST-waarden bestaan? Je maakt wel nieuwe variabelen aan (waarom eigenlijk) op regel 24 - 26. Vervolgens heb je geen enkele beveiliging in je query, waardoor je script lek is. Iemand kan daardoor toegang krijgen tot je database.

Ten aanzien van je vraag:
zet error-reporting aan.
bouw foutafhandeling in.
ga debuggen: wordt het script doorlopen op de manier die je verwacht?




Waarom zijn er tegenwoordig zoveel mensen die het nodig vinden om alles quoten, zonder dat het enige toegevoegde waarde heeft?! :(

Ik heb meerdere dingen aangegeven, met tot slot drie aandachtspunten ten aanzien van je vraag.
Ik neem aan dat je daar al wat mee hebt gedaan(?) Ben dus benieuwd naar het resultaat daarvan.

Reageren