In een formulier staan een aantal checkboxes.
De waarde daarvan komt uit een andere tabel en haal ik als volgt op:


<?php
  				$sql = "SELECT DISTINCT Groep_Naam FROM groep ";
  				$resulaat = mysql_query($sql);
  				while($rij = mysql_fetch_assoc($resulaat)){
	  				extract($rij);
            echo "<input type='checkbox' class='check' name='groep[$Groep_Naam]' value='$Groep_Naam'> $Groep_Naam\n";
						echo "<br \>\n";
			    }
  			  ?>


Na vezenden haal ik de waarde als volgt op:


foreach($_REQUEST['groep'] as $key => $Groep_Naam) {
        $Groep_Naam . $_REQUEST['groep'][$key];
    }


Het probleem is nu dat als iemand meerdere checkboxes gebruikt alleen de laatste wordt opgelsagen in de datbase in het veld Groep_Naam.

Hoe kan ik er voor zorgen dat alle waarde worden opgeslagen? Wel zodat ik ze later natuurlijk nog kan afzonderlijk kan gebruiken.
Voor elke waarde een veld opnemen is geen optie omdat die groepen regelmatig worden aangepast.
- Foutafhandeling.
- Variabelen buiten quotes.
- Extract lijkt mij niet nodig.
- Gebruik $_POST of $_GET, geen $_REQUEST.
- Waar slaat $Groep_Naam . $_REQUEST['groep'][$key] op?
- [php]foreach[/php] & [php]array[/php].

Hoe ziet je databasemodel eruit?
-Foutafhandeling.

Bedoel je
<?php
error_reporting(E_ALL);
?>
Dat staat er in! Geen errors.

- Variabelen buiten quotes.


Zo dan?

<tr>
    <td width="175">Behoort tot groep:</td>
    <td width="330"><?php
  				$sqlg = "SELECT DISTINCT Groep_Naam FROM groep ";
  				$resulaat3 = mysql_query($sqlg);
  				while($rij3 = mysql_fetch_assoc($resulaat3)){
	  				extract($rij3);?>
            <input type="checkbox" class="check" name="<?php echo 'groep[$Groep_Naam]'?>" value="<?php echo $Groep_Naam ?>" /><?php echo $Groep_Naam ?>;
						<br \>
            <?php
			    }
  			  ?>
    </td>
  </tr>


- Extract lijkt mij niet nodig.


Hoe dan wel?

- Gebruik $_POST of $_GET, geen $_REQUEST.

Zal ik doen! Waarom geen $_REQUEST, ik heb dat zo geleerd.

- Waar slaat $Groep_Naam . $_REQUEST['groep'][$key] op?



Tja wist ik het maar, ik heb dit van een voorbeeld om het te tonen met echo's. Deze:


  echo '<ul>';
    foreach($_POST['naam'] as $key => $naam) {
        echo '<li>'.$naam.' - '.$_POST['groep'][$key].'</li>';
    }
    echo '</ul>';


Hoe ziet je databasemodel eruit?


Leden: hierin staan alle naw gegevens van de leden.
Groep: hierin staan de groepen waartoe de leden kunnen behoren.

Bijv.
Lid 1 kan behoren tot groep "bestuur" en "feestcommissie"
Lid 2 tot "bestuur" en "activiteitencommissie" enz.


Ik denk dat je eerst moet normaliseren en daarin ook een koppeltabel moet zetten.
Tja, oké en hoe doe ik dat?
Door rechts bovenin 'normaliseren' in te tikken en de tutorials te lezen.
Normaliseren is tot voor deze functie volgens mij wel oké.

Ik denk dat ik nu een tabel moet aanmaken met

LEDEN_GROEP
Lid_ID
Groep_ID

Maar hoe kan ik er voor zorgen dat er uit dat formulier dan ook die twee op slaat.
en dat herhaald bij meerdere groepen per lid.

Onderstaand het complete script. (behalve wat in de <HEAD> en er boven staat)


 <?php
			if(!isset($_POST['verzenden'])){
		?>
<fieldset><legend>Leden toevoegen</legend>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" name="form1">
<table width="505" border="0">
  <tr>
    <td width="175">Voornaam:</td>
    <td width="330"><input type="text" name="Voornaam" id="Voornaam" /></td>
  </tr>
  <tr>
    <td width="175">Tussenvoegsel:</td>
    <td width="330"><input type="text" name="Tussenvoegsel" id="Tussenvoegsel" /></td>
  </tr>
  <tr>
    <td width="175">Achternaam:</td>
    <td width="330"><input type="text" name="Achternaam" id="Achternaam" /></td>
  </tr>
  <tr>
    <td width="175">Adres:</td>
    <td width="330"><input type="text" name="Adres" id="Adres" /></td>
  </tr>
  <tr>
    <td width="175">Postcode:</td>
    <td width="330"><input type="text" name="Postcode" id="Postcode" /></td>
  </tr>
  <tr>
    <td width="175">Woonplaats:</td>
    <td width="330"><input type="text" name="Woonplaats" id="Woonplaats" /></td>
  </tr>
  <tr>
    <td width="175">Telefoon:</td>
    <td width="330"><input type="text" name="Telefoon" id="Telefoon" /></td>
  </tr>
  <tr>
    <td width="175">GSM:</td>
    <td width="330"><input type="text" name="GSM" id="GSM" /></td>
  </tr>
  
  <tr>
    <td width="175">E-mail:</td>
    <td width="330"><input type="text" name="Email" id="Email" /></td>
  </tr>
   <tr>
    <td width="175">Geboortedatum:</td>
    <td width="330">
    
    <input class="datum1" name="Geboortedag" type="text" id="Geboortedag" size="2" maxlength="2" /> - 
    <input class="datum1" name="Geboortemaand" type="text" id="Geboortemaand" size="2" maxlength="2" /> - 
    <input class="datum2" name="Geboortejaar" type="text" id="Geboortejaar" size="4" maxlength="4" /> 
    <em>als 20-05-2012</em> 
    </td>
  </tr>
  <tr>
    <td width="175">lid vanaf:</td>
    <td width="330">
    <input class="datum1" name="Liddag" type="text" id="Liddag" size="2" maxlength="2" /> - 
    <input class="datum1" name="Lidmaand" type="text" id="Lidmaand" size="2" maxlength="2" /> - 
    <input class="datum2" name="Lidjaar" type="text" id="Lidjaar" size="4" maxlength="4" /> 
    <em>als 20-05-2012</em>
    </td>
  </tr>
  <tr>
    <td width="175">Instrument:</td>
    <td width="330"><select name="Instrument" id="Instrument"><?php
  				$sqli = "SELECT Instrument_ID, Instrument_Naam 
										FROM instrument 
										ORDER BY Instrument_Naam ";
  				$resulaat1 = mysql_query($sqli);
  				while($rij1 = mysql_fetch_array($resulaat1)){
	  				echo '<option value="'. $rij1['Instrument_ID'] . '">' . $rij1['Instrument_Naam'] . '</option>';
			    }
  			  ?>
    </select>
    </td>
  </tr>
  <tr>
    <td width="175">Status:</td>
    <td width="330"><select name="Status" id="Status"><?php
  				$sqls = "SELECT Status_ID, Status_Status
									 FROM status ";
  				$resulaat2 = mysql_query($sqls);
  				while($rij2 = mysql_fetch_array($resulaat2)){
	  				echo '<option value="'. $rij2['Status_ID'] . '">' . $rij2['Status_Status'] . '</option>';
			    }
  			  ?>
    </select>
    </td>
  </tr>
  <tr>
    <td width="175">Behoort tot groep:</td>
    <td width="330"><?php
  				$sqlg = "SELECT DISTINCT Groep_Naam FROM groep ";
  				$resulaat3 = mysql_query($sqlg);
  				while($rij3 = mysql_fetch_assoc($resulaat3)){
	  				extract($rij3);?>
            <input type="checkbox" class="check" name="<?php echo 'groep[$Groep_Naam]'?>" value="<?php echo $Groep_Naam ?>" /><?php echo $Groep_Naam ?>;
						<br \>
            <?php
			    }
  			  ?>
    </td>
  </tr>
  <tr>
   			<td width="175">Bijzonderheden:</td>
    		<td width="330"><textarea name="Bijzonderheden" id="Bijzonderheden" cols="40" rows="6"></textarea></td>
      </tr>
  <tr>
    <td width="175">&nbsp;</td>
    <td width="330">&nbsp;</td>
  </tr>
  <tr>
    <td width="175"><label>
      <input name="verzenden" type="submit" class="button" id="verzenden" value="Opslaan" />
    </label></td>
    <td width="330"><label>
      <input name="reset" type="reset" class="button" id="reset" value="Wissen" />
    </label></td>
  </tr>
</table>

</form></fieldset>
<?php
		}else{ 	// hier komt de verwerking van het formulier.
		
		//eerst die datumvelden aan elkaar maken.
		
		$geboortedag = $_POST['Geboortedag'];
		$geboortemaand = $_POST['Geboortemaand'];
		$geboortejaar = $_POST['Geboortejaar'];
		$geboortedatum = $geboortejaar . '-' . $geboortemaand . '-' . $geboortedag;
		
		$liddag = $_POST['Liddag'];
		$lidmaand = $_POST['Lidmaand'];
		$lidjaar = $_POST['Lidjaar'];
		$datumlid = $lidjaar . '-' . $lidmaand . '-' . $liddag;
		
		$Lid_Voornaam = $_POST['Voornaam'];
		$Lid_Tussenvoegsel = $_POST['Tussenvoegsel'];
		$Lid_Achternaam = $_POST['Achternaam'];
		$Lid_Adres = $_POST['Adres'];
		$Lid_Postcode = $_POST['Postcode'];
		$Lid_Woonplaats = $_POST['Woonplaats'];
		$Lid_Telefoon = $_POST['Telefoon'];
		$Lid_GSM = $_POST['GSM'];
		$Lid_Email = $_POST['Email'];
		$Lid_Geboortedatum = $geboortedatum;
		$Lid_Datumlid = $datumlid;
		$Lid_Status = $_POST['Status'];
		$Lid_Instrument = $_POST['Instrument'];
		foreach($_POST['groep'] as $key => $Groep_Naam) {
        $Groep_Naam . $_POST['groep'][$key];
    }
		$Lid_Bijzonderheden = $_POST['Bijzonderheden'];
		
		$sql = "INSERT INTO leden (Lid_ID, Lid_Voornaam, Lid_Tussenvoegsel, Lid_Achternaam, Lid_Adres, Lid_Postcode, Lid_Woonplaats, Lid_Telefoon, Lid_GSM, Lid_Mail, Lid_Geboortedatum, Lid_Datumlid, Status_ID, Instrument_ID, Groep_Naam, Lid_Bijzonderheden) VALUES ('','$Lid_Voornaam', '$Lid_Tussenvoegsel', '$Lid_Achternaam', '$Lid_Adres', '$Lid_Postcode', '$Lid_Woonplaats', '$Lid_Telefoon', '$Lid_GSM', '$Lid_Email', '$Lid_Geboortedatum', '$Lid_Datumlid', '$Lid_Status', '$Lid_Instrument', '$Groep_Naam', '$Lid_Bijzonderheden')";


		if(!mysql_query($sql)){
			echo '<p class="red">Het nieuwe lid werd niet toegevoegd</p>';
		}else{
			echo '<p>Het nieuwe lid werd correct toegevoegd <br /></p>';
			echo '<a class="normal" href="leden_toevoegen.php">Nog een lid toevoegen</a>';
		}
		mysql_close($db);
		}	
		?>

Ikke weet nog steeds niet hoe je datamodel (of ERD w/e) eruit ziet, dus ik kan niet zeggen hoe jij je database moet inrichten.
Jij blijkbaar nu ook niet. Dus is het misschien slim om dat effe te gaan maken zodat je zelf ook kan zien hoe je het moet doen...
Voor deze gegevens is het volgende aangemaakt.
Ik weet dat die Groep_Naam in de eerste tabel niet is zoals het moet, maar weet niet hoe ik het anders moet aanpakken, vandaar ook deze vraag.


-- Tabelstructuur voor tabel `leden`
--

CREATE TABLE IF NOT EXISTS `leden` (
  `Lid_ID` int(11) NOT NULL auto_increment,
  `Lid_Voornaam` varchar(25) NOT NULL,
  `Lid_Tussenvoegsel` varchar(10) NOT NULL,
  `Lid_Achternaam` varchar(25) NOT NULL,
  `Lid_Adres` varchar(40) NOT NULL,
  `Lid_Postcode` varchar(7) NOT NULL,
  `Lid_Woonplaats` varchar(25) NOT NULL,
  `Lid_Telefoon` varchar(11) NOT NULL,
  `Lid_GSM` varchar(11) NOT NULL,
  `Lid_Mail` varchar(40) NOT NULL,
  `Lid_Geboortedatum` date NOT NULL,
  `Lid_Datumlid` date NOT NULL,
  `Status_ID` int(11) NOT NULL,
  `Instrument_ID` int(11) NOT NULL,
  `Groep_Naam` varchar(50) NOT NULL,
  `Lid_Bijzonderheden` text NOT NULL,
  PRIMARY KEY  (`Lid_ID`),
  UNIQUE KEY `Lid_ID` (`Lid_ID`)

----------------------------------------------------------------------------

-- Tabelstructuur voor tabel `status`
--

CREATE TABLE IF NOT EXISTS `status` (
  `Status_ID` int(11) NOT NULL auto_increment,
  `Status_Status` varchar(20) character set latin1 NOT NULL,
  PRIMARY KEY  (`Status_ID`)

----------------------------------------------------------------------------
-- Tabelstructuur voor tabel `instrument`
--

CREATE TABLE IF NOT EXISTS `instrument` (
  `Instrument_ID` int(11) NOT NULL auto_increment,
  `Instrument_Naam` varchar(20) NOT NULL,
  PRIMARY KEY  (`Instrument_ID`)

-----------------------------------------------------------------------------

-- Tabelstructuur voor tabel `groep`
--

CREATE TABLE IF NOT EXISTS `groep` (
  `Groep_ID` int(3) NOT NULL auto_increment,
  `Groep_Naam` varchar(20) character set utf8 NOT NULL,
  PRIMARY KEY  (`Groep_ID`)

Je moet nog eens naar dat normaliseren kijken, of een boek zoals sql in de praktijk of inleiding dbms kopen / lenen.
Nu heb je redunantie.
Verder klopt je n:m relatie ook nog niet echt.

Reageren