tabel met variabele kolommen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Michel Koonen

Michel Koonen

27/02/2014 23:29:00
Quote Anchor link
Ik ben bezig met een competentiemgt systeem en hier mijn vraag: Vanuit een formulier met 55 checkboxes laat ik een dumptabel maken met -afhankelijk van het aantal checkboxes die aangevinkt zijn- een aantal kolommen. Deze variable kolommen worden comp_id_ genoemd met een nummer.. bv. comp_id_49. De waardes die opgeslagen worden in die kolommen vertegenwoordigen 't percentage welke iemand behaald heeft op die competentie

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)
PHP script in nieuw venster Selecteer het PHP script
1
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']; //
                 }


Zelf dacht ik eraan om de code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
echo $comp_id_48 = $report_row['comp_id_48'];
echo $comp_id_49 = $report_row['comp_id_49'];

te vervangen door:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
foreach($_POST as $field => $value)
   {
   $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?
 
PHP hulp

PHP hulp

17/11/2024 06:00:20
 
Peter K

Peter K

28/02/2014 08:18:29
Quote Anchor link
Waarom probeer je niet gebruik te maken van een extra tabel waarin je de competenties weg kunt schrijven?

Je maakt 1 tabel met de competenties zelf.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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 ;


Vervolgens heb je nog een tabel nodig waar je de data kunt gaan opslaan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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 ;


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.
 
Michel Koonen

Michel Koonen

28/02/2014 08:27:50
Quote Anchor link
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.


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.
 
Peter K

Peter K

28/02/2014 08:38:28
Quote Anchor link
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)
PHP script in nieuw venster Selecteer het PHP script
1
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\">");
 }
}


Deze zelfde loop doe je tijdens het opslaan uitvoeren om te controleren of één van de velden geselecteerd is.

Je krijgt dan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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++)
 {
   $waarde = $_POST['waarde_'.$index_personeel_$index_competentie];
 }
}
 
Michel Koonen

Michel Koonen

28/02/2014 09:01:38
Quote Anchor link
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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
foreach($_POST as $field => $value)
   {
   $column = "comp_id_".$field;
   echo $competentieperc = $report_row['$column'];
   }
 
Peter K

Peter K

28/02/2014 09:05:36
Quote Anchor link
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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
foreach($_POST as $field => $value)
   {
   $column = "comp_id_".$field;
   echo $competentieperc = $report_row['$column'];
   }


Wat is het result van je select? Wat komt daar uit?
 
Michel Koonen

Michel Koonen

28/02/2014 09:05:49
Quote Anchor link
$report_row['$column']; blijkt zo geschreven te worden en dan werkt 't $report_row[$column].. van $competentieperc kan ik een array maken en kan ik verder.

Kornelis bedankt.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

28/02/2014 17:57:57
Quote Anchor link
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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
foreach($_POST as $field => $value)
   {
   $column = "comp_id_".$field;
   echo $competentieperc = $report_row['$column'];
   }

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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.