meerdere checkbox-opties naar meerdere records

Status
Niet open voor verdere reacties.

Laurax

Gebruiker
Lid geworden
19 apr 2009
Berichten
22
Ik weet niet of dit mogelijk is met php/mysql maar ik zit te puzzelen met het volgende.

Ik heb een checkbox-form, bijvoorbeeld :

naam : piet
vervoer : [X] auto [X] motor

Stel, ik vink beide vervoers-opties aan en ik klik op de submitknop, dan zou ik willen dat er in mijn database het volgende gebeurt :

id naam vervoer
-- ---- -------
1 piet auto
2 piet motor


dus voor elk vinkje in het checkbox-form moet er een apart record worden geschreven. Mijn code is nu zo dat alleen het laatst gevinkte checkbox in de database wordt opgenomen.

Ik hoop dat deze uitleg duidelijk is. Maar is zoiets mogelijk en weet iemand hoe? Alvast bedankt! ;)

Laura
 
Je input veld van die checkbox moet dan een array worden.

Dus <input type="checkbox" id="vervoer[]">

Dan met PHP afvangen of er een gezet is.

PHP:
if (isset($_POST['vervoer'])) {
// inhoud hieronder
}

Binnen deze if isset kun je voor elke (foreach) value in de array iets gaan doen. Dus;

PHP:
foreach($_POST['vervoer'] as $value) {
// INSERT INTO query (voor je DB)
}

Hoop dat het duidelijk is :)
 
Hoi Raymond,

Bedankt voor je snelle antwoord.

Als ik jouw oplossing toepast, dan wordt er nog steeds 1 record in de database weggeschreven. Maar dat kan best aan mij liggen :) Hieronder wat stukjes code van mij (vergeet even de waardes van mijn eerdergenoemde voorbeeld) :

HTML :

HTML:
<form name="fa" method="POST">
	<input type="checkbox" name="day[]" value="monday" />Monday<br />
    	<input type="checkbox" name="day[]" value="tuesday" />Tuesday<br />
    	<input type="checkbox" name="day[]" value="wednesday" />Wednesday<br />
    	<input type="checkbox" name="day[]" value="thursday" />Thursday<br />
   	<input type="checkbox" name="day[]" value="friday" />Friday<br />
   	<input type="checkbox" name="day[]" value="saturday" />Saturday<br />
   	<input type="checkbox" name="day[]" value="sunday" />Sunday

	<input type="submit" value="Add Record">

PHP :

PHP:
<?php 
    
    if ($_SERVER['REQUEST_METHOD'] == "POST")  
    { 
       
        $stationname = addslashes($_POST["stationname"]); 
        $stationid = addslashes($_POST["stationid"]); 
	$time = addslashes($_POST["time"]); 
    //$day = $_POST['day'];
	$month = addslashes($_POST["month"]); 
	$frequency = addslashes($_POST["frequency"]); 
	$mode = addslashes($_POST["mode"]); 
	$status = addslashes($_POST["status"]); 
	$remarks = addslashes($_POST["remarks"]); 
	
	if (isset($_POST['day'])) {
		foreach($_POST['day'] as $day) {
		$sql  = " INSERT INTO tbl_skeds "; 
		$sql .= " (stationname, stationid, time, day, month, frequency, mode, status, remarks) VALUES "; 
		$sql .= " ('$stationname', '$stationid', '$time', '$day', '$month', '$frequency', '$mode', '$status', '$remarks') "; 

	}
	}


Ik ben nog maar een beginneling hoor dus wellicht maak ik er een potje van. In ieder geval, hier wil ik een tijdschema voor radiouitzendingen doorvoeren. Wanneer een radiouitzending op meerdere dagen plaats zal vinden, dan moet er via de checkbox-form meerdere dagen kunnen worden aangeklikt en die moeten, per dag, als record in de database worden geschreven.


Mocht je nog ideeen hebben, dan hoor ik het graag, bedankt alvast! :)


Laura
 
Waar wordt de query die je opbouwt in regel 18-20 uitgevoerd? Als je dit buiten de foreach-lus doet wordt alleen de laatst opgebouwde query uitgevoerd en verschijnt dus alleen de onderste aangevinkte checkbox in de database.
 
Waar wordt de query die je opbouwt in regel 18-20 uitgevoerd? Als je dit buiten de foreach-lus doet wordt alleen de laatst opgebouwde query uitgevoerd en verschijnt dus alleen de onderste aangevinkte checkbox in de database.

:o Ehm...je hebt helemaal gelijk Supersnail. Daar heb ik overheen gekeken..dom, dom, dom (en nee, ik ben niet blond :D). Maar nu werkt het! Hardstikke bedankt Supersnail...en Raymond :thumb:


Laura
 
Ik zit nu, aansluitend op dit verhaal, met nog een probleem waar ik niet uitkom. Dankzij de hulp van Raymond en Supersnail kan ik nu via de checkbox-form per dag een record in de database laten wegschrijven. Echter, nu wil ik, in hetzelfde formulier, nog een checkbox-array maken voor maand en die moet net als 'day' in de database worden weggeschreven. Nu zit ik te stoeien met dit stukje code :

PHP:
 if (isset($_POST['day'])) {
        foreach($_POST['day'] as $day) {
        $sql  = " INSERT INTO tbl_skeds "; 
        $sql .= " (stationname, stationid, time, day, month, frequency, mode, status, remarks) VALUES "; 
        $sql .= " ('$stationname', '$stationid', '$time', '$day', '$month', '$frequency', '$mode', '$status', '$remarks') ";

Hoe kan ik het zo maken dat niet alleen 'day' maar ook waarde 'month' in de foreach wordt meegenomen? Hebben we het dan over een multidimensional array? Ik heb even zitten Googlen en wat geprobeerd maar ik zie het even niet meer. Hopelijk heeft iemand een idee...alvast bedankt.


Laura
 
Wat wil je in de tabel krijgen? Wil je voor elke dag en elke maand een record hebben?

Dus als ik invul "monday, tuesday" en "januari, march" komen er dan 4 records?

Als dat het is, dan heb je 2 opties. Je kunt een foreach in een foreach doen:

PHP:
foreach ( $_POST['day'] as $day ) {
  foreach ( $_POST['month'] as $month ) {
    // insert day, month into table, blabla je weet hoe het gaat
  }
}

Je kunt ook even naar je database layout kijken want ik vermoed dat je een andere structuur kunt maken waarbij je niet zoveel records nodig hebt als je dit wilt...


Als je het anders erin wil doen moet je even uitleggen wat je als resultaat verwacht :)
 
Hoi Frats,

Spot on! Wat jij omschreef is precies zoals ik het wil hebben. Bedankt. :)

Het zou kunnen zijn dat een andere structuur minder records zou opleveren..daar heb ik niet zo over nagedacht. Op zich is het geen groot probleem want deze database zal door max 3 mensen gebruikt gaan worden. Het is meer als hobby dan dat het een functionele 'live' website moet worden. Interessant genoeg heb ik nu wel weer wat opgestoken over foreach...weer wat geleerd.

Nogmaals bedankt (ook Raymond en Supersnail) :)


Laura
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan