Het ene probleem is nu verholpen maar nu zit ik met het volgende probleem. Ik heb twee tabellen. Eentje met werkzaamheden en de andere met gedraaide diensten (aantal uren en de werkzaamheden). In de tabel diensten staan de uren en de werkzaamheden middels werk1, werk2, werk3 etc.. die laatste wordt gekoppeld aan de tabel werkzaamheden. Maar hoe krijg ik het voor elkaar dat hij die werk-id's samenvoegt.
Hier de twee tabellen (ik heb allen erin gezet welke gekoppeld moeten worden).
Ik stel een voorbeeld. Op eenn dag verricht Piet vier werkzaamheden in totaal werkt hij 8 uur (ik verzin maar iets, erg uitlopend maar gaat om het voorbeeld). Tussenhaakjes wat de ID betekent.
Werk1: id1 (Uitwerken binnengekomen post) 1 uur
Werk2: id2 (Financieële verslagen) 3 uur
Werk3: id3 (Bezoek klanten) 3 uur
Werk4: id4 (Boekhouding) 1 uur
De volgende dag verricht Piet 2 werkzaamheden
Werk1 id4 (Boekhouding) 3 uur
Werk2 id3 (Bezoek klanten) 5 uur
In de tabel moet dus komen te staan:
Uitwerken binnengekomen post 1
Financiële verslagen 3
Bezoek klanten 8
Boekhouding 4
ON werkzaamheden.werkid = diensten.werk1 AND werzaamheden.werkid = diensten.werk2
GROUP BY werknaam
Ik krijg nu geen resultaat. In phpmyadmin werkt het wel. Maar de waarde bij werknaam is NULL. In php krijg ik: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource. Dit is de code.
Ik snap de relatie niet helemaal, voor zover ik snap wil je een lijst van het tabel werknemers linken aan een tabel die hun functies bevat samen met hun uren.
Zou het niet beter zijn een kolom werk_id te plaatsen, daarnaast de functie (numeriek), samen met het aantal uren en de dag?
en dan kolom functie weer verbinden met het tabel functies.
Ik zou voorstellen de structuur van de tabel te veranderen, ik laat je hier echter de keuze om je oude tabel te behouden indien je dit niet ziet zitten.
Dus wat hieronder staat is louter een suggestie!
tabel werknemers: werk_id
werk_naam
tabel diensten: werk_id functie_id
uren
datum
tabel functies: functie_id
functie_naam
vet: sleutels, onderstreept: index
De tabel diensten hebben meerdere koloms die volgens mij onnutig waren, daarmee zet ik die tabellen onder elkaar en geef ik een extra kolom datum (om meerdere functies op 1 dag te kunnen registreren)
De tabel functies zette ik apart omdat er daar repeterende waarden in voorkomen.
Met bovenstaande script is het allemaal goedgekomen. Bedankt hiervoor. Berekeningen gaan nu ook goed via GROUP BY en SUM. Enige waar ik nog naar moet kijken is hoe dit via een form kan gaan verlopen. Dus dat hij meerderen malen iets in dezelfde tabel (diensten) kan zetten. Wel natuurlijk elke keer een nieuwe rij.
Alles is nu grotendeels opgelost. Het enige waar ik nog mee zit. Heeft wel betrekking tot een andere database maar qua namen komen ze wel overeen. Van iets wordt een begintijd en een eindtijd ingezet (niet in tijden) dus bijvoorbeel 8 = begintijd en 12 = eindtijd. Wanneer de volgende dienst plaatsvindt moet 12 automatisch worden toegewezen aan de begintijd van die dienst. De eindtijd van de vorige dienst is dus de begintijd van de volgende dienst. Dat gaat dan per werknemer (is trouwens voor iets heel anders). Nu moet deze telling de hele maand doorlopen. Wanneer de eerste van de maand is moet die teller weer op 0 staan. Dus de eerste dienst op de eerste (of de tweede wanneer de eerste op een zaterdag of zondag valt) van de maand moet de begintijd 0 zijn. Hoe kan ik dat met php regelen?
Ik gebruik deze code om de laatste eindtijd te onthouden.
Ik zou het probleem over de forms oplossen met het toevoegen van het knop 'meer toevoegen'.
Dit is mogelijk met een klein truukje toe te passen in js {kijk hier voor een script}
Dan heb je gewoon een keuzelijst voor de functie en een input box voor het aantal uren
Hier kan ik wel iets mee. Dankjewel. Wanneer ik deze dan nu in de database wil toevoegen hoe moet ik dit dan doen? In de php code meer mogelijkheden zetten (dus bij de Values in de query) om het aantal uren in te vullen? Zonder dat ik een foutmelding krijg.
Je plaats dus alle gegevens gewoon onder elkaar (door de structuur van de tabel juist vergemakkelijkt)
Bij js zou ik bij de naamgeving gebruik maken van een verborgen verld (type hidden) met het aantal gegevens, de naam van de velden krijgen op het einde een nummer
Met php kan je via dat nummer weten hoeveel velden er zijn ingevuld, je kunt ook zonder nummer werken en php de velden aflopen tot het veld niet bestaat (een arrayelement met de waarde null).
ps: indien je wilt kun je ook op de chat komen (link 'snel vragen' hierboven)
Ik heb nu onderstaande gemaakt. Nu voegt hij ze wel vaker toe. Maar hij voegt altijd vier velden in. Hoe krijg ik het voor elkaar dat hij maar 2 velden invult wanneer er maar 2 ingevuld worden en de rest leeg blijft? Dus die rijen ook niet gevuld worden. Nu worden ze gevuld en staan er alleen nullen (bij degene die niet zijn ingevuld).
Op de één of andere manier krijg ik maar niets werkend. Sterker: ik kom er niet uit met de arrays. Dus als ik bijvoorbeeld 4 uren toevoeg dat ook de ID juist toegewezen wordt. Hij voegt namelijk wel toe wat ik invul. Maar alleen bij de eerste rij vult hij de juist ID in. Daarna is het standaard nul. Ik zit dus behoorlijk vast met de arrays.
Ik heb iets geprobeerd maar dan krijg ik een foutmelding. Tenminste heb er een count aan toegevoegd.. Key lukt niet echt. Ik heb nu dit maar dan krijg ik een foutmelding. Hij voegt dan wel iets toe. Maar dan maar één resultaat.
De foutmelding
Warning: Cannot use a scalar value as an array in C:\wamp\www\test\index1.php on line 52
Warning: Cannot use a scalar value as an array in C:\wamp\www\test\index1.php on line 53
Warning: Cannot use a scalar value as an array in C:\wamp\www\test\index1.php on line 54
Dit zijn de velden tussen de foreach in.
Wanneer ik deze gebruik voegt hij nu wel overal de juiste ID in. In principe wordt dus nu alles goed berekend. Enige nadeel is dat hij altijd vier velden vult. Waar iets ingevuld is staat alles juist. Maar lege velden bevatten alleen nullen. Hebben wel de juiste ID meegekregen.