tabel met variabele kolommen
tabel: competency_who_has_tot
tbl_id | empl_id | job_id | fname | lname | l_manager | comp_id_48 | comp_id_49 | total_percentage
1 159 2 Jan Peeters Janssen 50 100 75
Nu wil ik met onderstaande code de kolommen uitlezen comp_id_48 en comp_id_49 welke eenvoudig is als die kolommen vastliggen que hoeveelheid kolommen alsook qua naam...
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$_Post // bevat de aangevinkte checkboxes.
$sql_query = "SELECT fname, lname,";
foreach($_POST as $field => $value)
{
$comp_id_ins = "comp_id_".$field;
$sql_query .= "$comp_id_ins,";
}
$sql_query .= "total_percentage,
FROM competency_who_has_tot";
$report = MYSQL_QUERY($sql_query);
while ($report_row = mysql_fetch_array($report))
{
echo $firstname = $report_row['fname'];
echo $lastname = $report_row['lname'];
//omdat de kolommen variable zijn, hoe uit te lezen...
echo $comp_id_48 = $report_row['comp_id_48']; // hier moet iets gebeuren..
echo $comp_id_49 = $report_row['comp_id_49']; //
}
$sql_query = "SELECT fname, lname,";
foreach($_POST as $field => $value)
{
$comp_id_ins = "comp_id_".$field;
$sql_query .= "$comp_id_ins,";
}
$sql_query .= "total_percentage,
FROM competency_who_has_tot";
$report = MYSQL_QUERY($sql_query);
while ($report_row = mysql_fetch_array($report))
{
echo $firstname = $report_row['fname'];
echo $lastname = $report_row['lname'];
//omdat de kolommen variable zijn, hoe uit te lezen...
echo $comp_id_48 = $report_row['comp_id_48']; // hier moet iets gebeuren..
echo $comp_id_49 = $report_row['comp_id_49']; //
}
Zelf dacht ik eraan om de code:
Code (php)
1
2
2
echo $comp_id_48 = $report_row['comp_id_48'];
echo $comp_id_49 = $report_row['comp_id_49'];
echo $comp_id_49 = $report_row['comp_id_49'];
te vervangen door:
Code (php)
1
2
3
4
5
2
3
4
5
foreach($_POST as $field => $value)
{
$column = "comp_id_".$field;
echo $comp_id_49 = $report_row['$column'];
}
{
$column = "comp_id_".$field;
echo $comp_id_49 = $report_row['$column'];
}
maar ik wil die $comp_id_49 zo hebben dat die ook veranderd aan de hand van de ID.. dus in het voorbeeld hieronder wil ik na dit script 2 strings hebben ($comp_id_48 en $comp_id_49). Is dit een logische aanpak of moet ik 't anders benaderen?
Je maakt 1 tabel met de competenties zelf.
Code (php)
1
2
3
4
5
2
3
4
5
CREATE TABLE IF NOT EXISTS `competenties` (
`competentie_id` int(11) NOT NULL AUTO_INCREMENT,
`omschrijving` text NOT NULL,
PRIMARY KEY (`competentie_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
`competentie_id` int(11) NOT NULL AUTO_INCREMENT,
`omschrijving` text NOT NULL,
PRIMARY KEY (`competentie_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Vervolgens heb je nog een tabel nodig waar je de data kunt gaan opslaan:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
CREATE TABLE IF NOT EXISTS `medewerker_has_competentie` (
`medewerker_has_competentie_id` int(11) NOT NULL AUTO_INCREMENT,
`medewerker_id` int(11) NOT NULL,
`competentie_id` int(11) NOT NULL,
`percentage` decimal(10,0) NOT NULL,
PRIMARY KEY (`medewerker_has_competentie_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
`medewerker_has_competentie_id` int(11) NOT NULL AUTO_INCREMENT,
`medewerker_id` int(11) NOT NULL,
`competentie_id` int(11) NOT NULL,
`percentage` decimal(10,0) NOT NULL,
PRIMARY KEY (`medewerker_has_competentie_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Je kunt nu in laatste tabel alle formulier data opslaan aan de hand van het medewerker id en competentie id. Deze kun je vervolgens ook weer terug ophalen met een simpele JOIN.
Toevoeging op 28/02/2014 08:27:51:
Kornelis, de competenties die iemand heeft, staan al in een andere tabel echter het formulier laat de gebruiker kiezen welke medewerker het beste scoort op de competenties. De keuze is uit max 50 checkboxes en vandaaruit wordt de competency_who_has_tot tabel gevuld. Omdat je niet van tevoren weet hoeveel checkboxes er aangevinkt worden is de tabel dus variabel qua kolommen... en daar ligt dus de uitdaging qua uitlezen. Daar komt nog eens bij dat ik voor iedere competentie /medewerker de % bijhoud. Dus 1 kolom voor de competenties gaat niet werken.
Michel Koonen op 28/02/2014 08:27:50:
Kornelis, de competenties die iemand heeft, staan al in een andere tabel echter het formulier laat de gebruiker kiezen welke medewerker het beste scoort op de competenties. De keuze is uit max 50 checkboxes en vandaaruit wordt de competency_who_has_tot tabel gevuld. Omdat je niet van tevoren weet hoeveel checkboxes er aangevinkt worden is de tabel dus variabel qua kolommen... en daar ligt dus de uitdaging qua uitlezen. Daar komt nog eens bij dat ik voor iedere competentie /medewerker de % bijhoud. Dus 1 kolom voor de competenties gaat niet werken.
Je kunt alle checkboxes ophalen met een loop. Eventueel gekoppeld aan het index nummer daar van of eventueel zelfs gekoppeld aan een medewerker.
Je krijg dan het volgende voor 4 checkboxes:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
// Loop met personeelsleden
for($index_personeel = 1; $index_personeel <= 2; $index_personeel++)
// Loop met competenties
for($index_competentie = 1; $index_competentie <= 2; $index_competentie++)
{
printf("<input type=\"checkbox\" name=\"waarde_$index_personeel_$index_competentie\">");
}
}
for($index_personeel = 1; $index_personeel <= 2; $index_personeel++)
// Loop met competenties
for($index_competentie = 1; $index_competentie <= 2; $index_competentie++)
{
printf("<input type=\"checkbox\" name=\"waarde_$index_personeel_$index_competentie\">");
}
}
Deze zelfde loop doe je tijdens het opslaan uitvoeren om te controleren of één van de velden geselecteerd is.
Je krijgt dan:
Ik stoei met 't onderstaande (zie code)
$column wordt nu via de loop comp_id_48 of comp_id_49 etc (waarbij 't nummer refereerd naar de aangevinkte checkbox..) echter het werkt niet. Als ik $report_row['$column'] verander in respectievelijk comp_id_48 of comp_id_49 krijg ik wel data via $competentieperc.
Michel Koonen op 28/02/2014 09:01:38:
Kornelis... het gaat zich mij niet specifiek over hoe ik die checkboxes uitlees. Ik weet welke checkboxes aangevinkt zijn en alle benodigde info staat in de tabel..
Ik stoei met 't onderstaande (zie code)
$column wordt nu via de loop comp_id_48 of comp_id_49 etc (waarbij 't nummer refereerd naar de aangevinkte checkbox..) echter het werkt niet. Als ik $report_row['$column'] verander in respectievelijk comp_id_48 of comp_id_49 krijg ik wel data via $competentieperc.
Ik stoei met 't onderstaande (zie code)
$column wordt nu via de loop comp_id_48 of comp_id_49 etc (waarbij 't nummer refereerd naar de aangevinkte checkbox..) echter het werkt niet. Als ik $report_row['$column'] verander in respectievelijk comp_id_48 of comp_id_49 krijg ik wel data via $competentieperc.
Wat is het result van je select? Wat komt daar uit?
Kornelis bedankt.
Michel Koonen op 28/02/2014 09:01:38:
Kornelis... het gaat zich mij niet specifiek over hoe ik die checkboxes uitlees. Ik weet welke checkboxes aangevinkt zijn en alle benodigde info staat in de tabel..
Ik stoei met 't onderstaande (zie code)
$column wordt nu via de loop comp_id_48 of comp_id_49 etc (waarbij 't nummer refereerd naar de aangevinkte checkbox..) echter het werkt niet. Als ik $report_row['$column'] verander in respectievelijk comp_id_48 of comp_id_49 krijg ik wel data via $competentieperc.
Ik stoei met 't onderstaande (zie code)
$column wordt nu via de loop comp_id_48 of comp_id_49 etc (waarbij 't nummer refereerd naar de aangevinkte checkbox..) echter het werkt niet. Als ik $report_row['$column'] verander in respectievelijk comp_id_48 of comp_id_49 krijg ik wel data via $competentieperc.
Dus als ik het goed begrijp ga je elke keer als iemand een formulier invult, een tabel aanmaken dan de ingevulde gegevens in kolommen zetten?
Regel 1 bij het werken met databases:
In een productie omgevimg mogen alleen bij uitzondering wijzigingen in de database definitie worden aangebracht, en zeker niet via een webapplicatie die geen database beheertool is.