Avatar billede phillipvarsted Nybegynder
23. december 2012 - 15:31 Der er 12 kommentarer og
1 løsning

PHP MySQL problem

Hej eksperter!

Jeg har gået og spekuleret lidt over noget kode, som jeg ikke rigtig kan få til at hænge sammen.
På min hjemmeside har jeg lavet et brugersystem til vores firmas personale, hvor de kan gå ind og rette i de forskellige faktura som der bliver lavet efterhånden.

Mit spørgsmål til jer er følgende:

Jeg har en MySQL database med følgende rows: id, beskrivelse, subtotal.
Det jeg gerne vil have lavet er, at når en bruger går ind og retter, eller laver en ny faktura, skal brugeren kunne tilføje en beskrivelse og subtotal for hvert enkelt byggemateriale. Hvordan kan man, uden at tilføje flere rows i databasen, tilføje flere "inputs" der skriver de forskellige beskrivelser af materialerne ind i databasen?

Eksempel af faktura og problem:

Beskrivelse:                              Subtotal:
Trægulv                                  32.052,00 kr.

Hvodan får jeg tilføjet flere beskrivelser ind i databasen uden at skulle tilføje så mange rows som der er materialer?

Håber spørgsmålet er til at forstå. Tak på forhånd!
Avatar billede olebole Juniormester
23. december 2012 - 17:23 #1
<ole>

"Hvodan får jeg tilføjet flere beskrivelser ind i databasen uden at skulle tilføje så mange rows som der er materialer?"

Den gode løsning indebærer faktisk en række pr. materialeenhed - men nok iukke helt på den måde, du forestiller dig  =)

Du laver en ekstra tabel 'materialer'. I den opretter du et felt, som f.eks. hedder faktura_id - samt et, der hedder materiale_navn.

Hvergang et materiale skal indtastes og knyttes til en faktura, indsættes en række i 'materialer', hvor id'et refererer til fakturaens id.

/mvh
</bole>
Avatar billede olebole Juniormester
23. december 2012 - 17:26 #2
- udover faktura_id og materiale_navn kan du naturligvis tilføje andre felter til materialer - alt efter, hvad du har brug for  =)
Avatar billede phillipvarsted Nybegynder
23. december 2012 - 17:28 #3
Kan det ikke være muligt at bruge arrays i stedet for at oprette flere tabeller og lign. ? :)
Avatar billede olebole Juniormester
23. december 2012 - 17:55 #4
Jo, der er masser af muligheder, mindre gode og direkte dårlige løsninger - men jeg går udfra, du ønsker en god og holdbar/udvidbar løsning.

Derfor foreslog jeg den fremgangsmåde, man bruger i halv- og helprofessionelle løsninger i stedet for en dårligt performende løsning, du i bedste fald vil fortryde, første gang du skal foretage en udvidelse  =)
Avatar billede phillipvarsted Nybegynder
23. december 2012 - 18:04 #5
Så vælger jeg første løsning du kom med. Er det muligt at få et eksempel på hvordan det skal opbygges, eller en guide på nettet et sted? Kan sagtens lave PHP og MySQL koding, men jeg forstår ikke rigtig din metode til systemet :)

Håber ikke det er for meget at forlange! God jul
Avatar billede phillipvarsted Nybegynder
23. december 2012 - 18:05 #6
Måske et eksempel med noget kode ville være rart, hvis det kunne lade sig gøre :)
Avatar billede olebole Juniormester
23. december 2012 - 18:30 #7
Det er lidt svært at sige, hvad du skal gøre og hvordan, når jeg ikke ved mere om, hvad du har, og hvordan det bruges. Prøv at læse lidt om begrebet 'relational database' - der er skrevet masser om emnet på WWW  =)
Avatar billede phillipvarsted Nybegynder
23. december 2012 - 18:54 #8
Prøver lige at lave et eksempel ud fra det jeg forstår.

Hvis jeg har en tabel med følgende rækker i: "id", "fakturanr", "kundenavn", "kundeadresse" & "kundeemail". Mener du så, at jeg skal oprette en ekstra tabel med følgende rækker i: "id", "faktura_id", "beskrivelse", "priseksmoms" & "subtotal"?

Derefter mener du, at jeg skal referere til den nye tabel i php siden? :)
Avatar billede olebole Juniormester
23. december 2012 - 19:15 #9
Lige for at få lingoen på plads, så taler vi om felter/kolonner - ikke rækker. En række er en postering i databasen  =)

Jeg ville nok oprette flere tabeller og knytte dem sammen. Ét bud kunne være noget i stil med:

brugere:
kunde_id,
kunde_navn,
kunde_adresse,
kunde_email

faktura:
faktura_id,
kunde_id,
faktura_beskivelse,
pris_xmoms,
subtotal

ekstra_materialer:
faktura_id,
soem,
skruer,
braedder

Hvorefter du kan lave joined SELECT forspørgsler, men om det er den mest hensigtsmæssige tabelopbygning, er jeg ikke helt sikker på. Det kan godt være, der skal være en tabel mere, men det kræver mere indsigt at afgøre  =)
Avatar billede phillipvarsted Nybegynder
23. december 2012 - 21:03 #10
Hvis brugeren skal have mulighed for at kunne gå tilbage og rette i en faktura, hvordan får man så alle dataerne til at hænge sammen? Alle materialer skal jo gerne kunne vises på den specifikke faktura?
Avatar billede olebole Juniormester
23. december 2012 - 22:05 #11
Hvergang, du indsætter en række i ekstra_materialer, sørger du for, at faktura_id feltets værdi bliver sat til den pågældende fakturas faktura_id (i 'faktura' tabellen).

Så kan du hente fakturaen sammen med materialerne med SQL efter princippet:

SELECT faktura.*, ekstra_materialer.* FROM faktura, ekstra_materialer WHERE ekstra_materialer.faktura_id = faktura.faktura_id

Som sagt: Prøv at læse lidt om begrebet 'relational database' - og i den forbindelse kommer 'joined selects' helt automatisk på banen  =)
Avatar billede phillipvarsted Nybegynder
26. december 2012 - 00:44 #12
Fandt selv ud af en løsning på mit spørgsmål, så lukker den bare her. Men ellers tak for jeres hjælp :)
Avatar billede olebole Juniormester
26. december 2012 - 00:52 #13
Hvad var løsningen?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester