Hallo,

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
$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.
goed je bent vies wat je gebruikt mysql_*
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
Categorieen
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 werkt nu trouwens wel. Ik had verkeerde indexen toegewezen in de database. Nu loopt het in principe wel. Enige wat nu nog niet klopt is dat hij maar in één veld een id invult. Het kan dus voorkomen dat er meerdere uren zijn. Die uren (van bijvoorbeeld 2 velden) vult hij nu wel in. Maar hij pakt maar één keer de ID mee. De rest wordt gewoon 0.

Het gedeelte waar het om draait.


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')";



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.
Ga wat doen aan [google]SQL injectie[/google]! 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?
Ik zal er naar gaan kijken. Nu staat alles alleen nog op de lokale server.

Nee, geen arrays. Maar als ik zo her en der lees is dit wel veel beter?

Reageren