Insert Multiple Table
Ik probeer om via een form om informatie te stoppen in twee database tabellen. In de ene tabel wordt de werknemer, de dienst, de afdeling waar men werkt en de datum gezet. In de andere tabel worden de werkzaamheden en de uren gezet. Deze twee tabellen staan apart omdat er meerdere uren per dag gevuld kunnen worden met verschillende soorten werk. Omdat deze samen moeten komen onder eenzelfde ID ben ik tot die oplossing gekomen.
Ik heb nu iets opgezet waarin hij alles gewoon toevoegt in de tabel diensten. In de urentabel vult hij echter alleen de ID in van die dienst. De uren en het soort werk worden niet meegenomen.
Weet iemand wat ik hier verkeerd doe?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
$action="none";
if(isset($_GET['action'])) $action=$_GET['action'];
if(isset($_POST['action'])) $action=$_POST['action'];
if($action=="diensten"){
$datum=$_POST['datum'];
$dienst=$_POST['dienst'];
$afdeling=$_POST['afdeling'];
$weknemer=$_POST['werknemer'];
$functie=$_POST['functie'];
$uren=$_POST['uren'];
$sql = "INSERT INTO diensten (datum, dienst, afdeling, werknemer) VALUES ('$datum', '$dienst', '$afdeling', '$werknemer')";
$result = mysql_query( $sql );
if( isset($uren) )
{
$dienst_id = mysql_insert_id( );
$sql = "INSERT INTO uren (dienst_id, werk, uren) VALUES ('$dienst_id', '$werk', '$uren')";
$result = mysql_query( $sql);
}
}
mysql_free_result( $result );
?>
Dit is het gedeelte van de code wanneer het formulier verstuurd is geworden. Op lege velden controleren zal ik er nog bij zetten.
$action="none";
if(isset($_GET['action'])) $action=$_GET['action'];
if(isset($_POST['action'])) $action=$_POST['action'];
if($action=="diensten"){
$datum=$_POST['datum'];
$dienst=$_POST['dienst'];
$afdeling=$_POST['afdeling'];
$weknemer=$_POST['werknemer'];
$functie=$_POST['functie'];
$uren=$_POST['uren'];
$sql = "INSERT INTO diensten (datum, dienst, afdeling, werknemer) VALUES ('$datum', '$dienst', '$afdeling', '$werknemer')";
$result = mysql_query( $sql );
if( isset($uren) )
{
$dienst_id = mysql_insert_id( );
$sql = "INSERT INTO uren (dienst_id, werk, uren) VALUES ('$dienst_id', '$werk', '$uren')";
$result = mysql_query( $sql);
}
}
mysql_free_result( $result );
?>
Dit is het gedeelte van de code wanneer het formulier verstuurd is geworden. Op lege velden controleren zal ik er nog bij zetten.
gebruik PDO, ADO, DB of MySQLi
verder ben je gevaarlijk want in jouw systeem kunnen mensen geen ---> ' <--- invoeren zonder dat je een sql fout krijgt
verder
Je structuur is volgens mij niet helemaal juist; zo als eens bekeken
Diensten
- id
- omschrijving
- tarief
Afdelingen
- id
- omschrijving
Medewerkers
- id
- afdeling_id
- naam
Klanten
- id
- naam
Projecten
- id
- klant_id
Activiteiten/Uren
- id
- datum
- project_id
- medewerker_id
- aantaluur
- dienst_id
categorie_id
categorie
Producten
categorie_id
artikelcode
omschrijving (Naam)
Activiteiten
dienst_id
datum
project_id
artikelcode
medewerker_id
uren
Diensten
dienst_id
omschrijving
Projecten
project_id
naam
Medewerker
mederwerker_id
voornaam
achternaam etc.
Ik heb ze nu op deze manier ingedeeld.
Maar dan zal ik (zoals ik het nu voor mij zie) ook weer zaken aan elkaar moeten koppelen. Tenminste de gegevens moeten allemaal in één formulier komen te staan. Dan voor diensten en uren. Projecten, medewerkers, categorieën en producten (deze twee zijn gecombineerd) geef ik weer via een dropdownmenu. Dus daar zit het probleem niet. Maar dus wel met diensten en uren (activiteiten vindt ik een beter idee). Is er een mogelijkheid dat deze middels een form aan elkaar gekoppeld worden?
Ik zal in ieder geval eens kijken naar mysqli enz.
Het gedeelte waar het om draait.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
for ($i = 0; $i < 6; ++$i){
$datum = mysql_real_escape_string($_POST['datum'][$i]);
etc.
if( isset($activiteiten) )
{
$dienst_id = mysql_insert_id();
$sql="INSERT INTO activiteiten (dienst_id, datum, project_id, artikelcode, medewerker_id, uren)
VALUES ('$dienst_id', '$datum', '$project_id', '$artikelcode', '$medewerker_id`, '$uren')";
$datum = mysql_real_escape_string($_POST['datum'][$i]);
etc.
if( isset($activiteiten) )
{
$dienst_id = mysql_insert_id();
$sql="INSERT INTO activiteiten (dienst_id, datum, project_id, artikelcode, medewerker_id, uren)
VALUES ('$dienst_id', '$datum', '$project_id', '$artikelcode', '$medewerker_id`, '$uren')";
Nog niet naar een andere db versie gekeken.
Ik heb op verschillende manieren geprobeerd om [$i] toe te voegen achter dienst_id maar dan geeft hij helemaal geen waarde terug en wordt de dienst_id standaard gevuld met 0.
Gewijzigd op 01/01/1970 01:00:00 door Annemarie Peters
SQL injectie! Je script is nu zo lek als een mandje.. Bovendien heeft variabele zomaar in een andere variabele stoppen niet zo heel veel zin, dat is alleen maar byteverbruik.
Edit: zijn $_POST['datum'] e.d. arrays?
Ga wat doen aan Edit: zijn $_POST['datum'] e.d. arrays?
Gewijzigd op 01/01/1970 01:00:00 door Jesper Diovo
Nee, geen arrays. Maar als ik zo her en der lees is dit wel veel beter?