Avatar billede bcool Nybegynder
02. november 2005 - 19:56 Der er 21 kommentarer

Tilføj valgt produkt til database

Hej

Er ved at lave en simpel webshop, hvor jeg skal have tilføjet det valgte produkt samt køberens navn, adresse osv. til min database. Det er ikke noget problem at være inputfelterne til at skrive i databasen, men ved ikke hvordan jeg får det valgte produkt til at ryge med ind i databasen.
Jeg bruger en ASP:Reapeater til at hente informationer fra databasen og udskrive dem på sitet. Herefter kan man trykke på hver enkelt produkt og komme til køb siden. Dette site hedder så \koeb.aspx?id=1 f.eks. hvor der så bliver vist den valgte vare endnu engang, samt inputbokse til navn, adresse osv. Her skal jeg så bare have varen til at ryge med ind i databasen.

Nogen der kender en god løsning.
Vil meget gerne have et svar hvor det er skåret ud i beton, da jeg ikke lige har den vilde erfaring med dette :)
Avatar billede martor Nybegynder
02. november 2005 - 20:21 #1
Er det id du har med i Url'en, id'et på varen? I så fald kan du få fat i det gennem din QueryString.
int vareID = int.Parse(Request.QueryString["id"]);
Avatar billede bcool Nybegynder
03. november 2005 - 09:47 #2
Jeps id'et er det fra varen. Kan du uddybe lidt hvad der skal stå helt generelt. Vil gerne have det opsat så jeg med lidt held, blot kan sætte det ind i koden :)
Avatar billede martor Nybegynder
03. november 2005 - 11:33 #3
Det jeg har skrevet ovenfor vil give dig varens ID, som kan bruges til at smide i databasen. Ellers tror jeg ikke jeg helt forstår hvad du vil have?
Avatar billede bcool Nybegynder
03. november 2005 - 12:26 #4
Vil gerne vide hvor det skal stå henne, og hvordan jeg kalder det når det skal indføres i databasen
Avatar billede martor Nybegynder
03. november 2005 - 12:44 #5
Du skal have den linie stående på din koeb.aspx (i codeBehind).

Så har du din variabel du kan smide med i din sql. F.eks.
string sql = "insert into ordre(navn, adresse, produkt) values ('" + navn.Text + "','" + adresse.Text + "'," + vareID + ")";

Bemærk at denne sql er meget forsimplet og bundhamrende forkert af sikkerhedsmæssige årsager. Men det burde kunne give dig en ide til hvordan du kan bruge variablen.

Bemærk også, at det ikke er hensigtsmæssigt at gemme navn og adresse sammen med produktet. Produkter knyttet til en ordre bør ligge i en tabel for sig selv.

Håber det hjælper :)
Avatar billede bcool Nybegynder
03. november 2005 - 14:48 #6
Cool nu virkede det takker. Har dog lige et tillægsspørgsmål. Skal have lavet således man kan betale som efterkrav eller via bankoverførsel og disse skal laves med en radiobutton. Hvordan får jeg det med i databasen også?
Avatar billede martor Nybegynder
03. november 2005 - 14:56 #7
Du laver en radioButtonList, og hiver den selectede værdi.

Hvis du bruger f.eks. Visual Studio, kan du drag-drop'e den ind på din form. Og du kan tilføje Items via properties.

I din codeBehind kan du så få fat i den valgte værdi ved at skrive,
Betalingsmetode.SelectedValue(); (hvor Betalingsmetode er navnet på din RadioButtonList).
Avatar billede bcool Nybegynder
03. november 2005 - 15:16 #8
Ingen anelse om hvad du mener sorry :)
Hvis jeg indsætter Betalingsmetode.SelectedValue(); i min codebehind får jeg fejlen: CS0118: 'System.Web.UI.WebControls.ListControl.SelectedValue' angiver 'egenskab', hvor 'metode' var forventet

Why?
Har lavet en asp:radiobuttonlist.
Avatar billede martor Nybegynder
03. november 2005 - 15:20 #9
Sorry, min fejl. Betalingsmetode.SelectedValue; Det er en property, ikke en metode.
Avatar billede bcool Nybegynder
03. november 2005 - 15:22 #10
Ok får nu denne fejl: S0201: Kun tildelinger, kald, adderinger, subtraheringer og udtryk til oprettelse af nye objekter kan bruges som en sætning

Har blot ændret det første du skrev til det sidste
Avatar billede martor Nybegynder
03. november 2005 - 15:29 #11
altså, bruger du værdien til noget? Eller har du den bare stående "stand-alone"?
Bruge den kunne f.eks. være sådan her:
string valgtBetalingsMetode = Betalingsmetode.SelectedValue;
Avatar billede bcool Nybegynder
03. november 2005 - 15:33 #12
Hov my bad. Nu kører siden hvertfald, mangler blot at få lavet den radiobuttonliste færdig nu :)
Avatar billede bcool Nybegynder
04. november 2005 - 14:24 #13
Nyt problem. Jeg har et admin modul til sitet hvor man skal kunne tjekke hvilke produkter der er blevet bestilt. Det eneste den gør pt. er at hente alt det info i en tabel som hedder betaling, hvor kundens informationer ligger i.
Jeg har gjort således at når kunden har udfyldt navn, adresse osv. så ryger det ind i databasen sammen med det id for varen.
Jeg kan sagtens trække informationerne ud igen, men vil gerne have den henter navnet på varen, istedet for blot det id (som er et nummer) således at ejeren kan se hvilket produkt der er tale om.
Så skal sådan set bare have konverteret det id til at hente navnet på produktet fra databasen.

Alternativt er at varens navn og id bliver gemt sammen med brugerens oplysninger når brugeren "køber" en vare. Ved ikke hvad der er smartest?
Avatar billede martor Nybegynder
04. november 2005 - 14:34 #14
Nu er vi vist ved at bevæge os temmelig langt væk fra det oprindelige spørgsmål... men, det er temmelig svært at sige hvad der vil være smartest, da jeg ikke kender din databaseopbygning. Hvis du følger normaliseringsreglerne, så vil du ikke skulle gemme både produktnavn og id sammen med kundeoplysningerne.

Og siden du har id'et på produktet, så er det vel blot at lave et join til produkt-tabellen og hive produktets navn med ud?
Avatar billede bcool Nybegynder
04. november 2005 - 15:57 #15
Rigtigt nok, men ville hellere bruge denne da ovennævnte kommentarer stadig er relevant for projektet. Men, det er en MEGET simpelt shop, og den skal også kun laves til at være meget simpelt. Eneste jeg mangler er som sagt, at få id til at hente navnet på produktet så det er lettere for ejeren af sitet, at se hvilke produkt der er tale om.
Databasen er opbygget således:

PRODUKTER
- id
- Overskrift (titlen på produktet)
- tekst (beskrivelse af produktet)
- billede
- pris
- type (Hvilke type produkt, der findes 4 forskellige markeret med numrene 1-4 for at kunne kalde én bestemt produktgruppe)

PRODUKTER bliver kaldt når sitet skal vise hvilke produkter der findes i databasen.

BETALING
- Id
- Navn
- Adresse
- Postnummer osv.
- Betalingsmetode (efterkrav, bankoverførsel
- VareId (Id'et på varen som var fremvist da bestillingen blev tilføjet til databasen)

BETALING bliver kaldt når kunden skal købe et produkt. Kunden trykker på produktet og ser betalingssiden hvor der vises det pågældende produkt, samt brugerinfo.
Her bliver id'et på varen så gemt sammen med brugerens informationer. Skal lige nævnes at brugeren kun kan købe 1 vare af gangen, ved godt det ikke er hensigtsmæssigt, men som sagt MEGET simpel webshop.

Skal blot have id'et på varen til at hente OVERSKRIFT i tabellen PRODUKTER, således der kommer til at stå produktnavnet istedet for et id nummer.
Ved ikke om en join kan gøre dette, har ingen anelse om hvad præcist en join er.
Avatar billede martor Nybegynder
04. november 2005 - 16:30 #16
select id, navn, adresse, postnummer, betalingsmetode, overskrift from betaling inner join produkter on betaling.vareId = produkter.id.

Hvis du ikke er bekendt med at joine på den måde kan de også laves ved at sige:
select <alt det fra ovenstående> from betaling, produkter where betaling.vareId = produkter.id

Det burde gøre det. Det kan godt være der skal tilføjes / fjernes felter, alt efter relevans.
Avatar billede bcool Nybegynder
08. november 2005 - 16:48 #17
Kan ikke få det Join til at virke, har dog fået noget andet til at virke.
Har skrevet " select * from Betaling, Produkter"; istedet for, og virker det som det skal. NÆSTEN da. Kan sagtens få alt dataen udfra begge tabeller, problemet er bare at hvis der er 10 produkter, så knytter den en kundes navn til alle produkterne, og ikke kun det produkter kunden har købt. Så hvis jeg bestiller produkter nummer 1, så ser det ud som om jeg har bestilt samtlige produkter inde på siden. I databasen står kundens navn kun 1 gang, så det er ikke her problemet er, og heller ikke på køb siden hvor brugeren skriver sit navn ind.
Det er kun administrator siden som ikke virker ordentligt.
Nogen ideer om hvad det kan skyldes?
Avatar billede martor Nybegynder
08. november 2005 - 19:27 #18
Jeg er ked af at sige det, men det er helt logisk, da du ikke har joinet dine tabeller! Det er nøglen i relationelle databaser! Uden join, vil du få et kartesisk produkt, så lige nu ser det måske rimelig tilforladeligt ud, men bare vent til du har flere kunder!!

Så hvis du vil undgå det, ved udtræk fra flere tabeller, så er du nød til at joine dem!
Avatar billede bcool Nybegynder
08. november 2005 - 20:11 #19
Læs nu lige mit svar igen! Der står jo at det IKKE virker ordentligt, derfor jeg gerne vil vide hvordan jeg laver det join helt præcist. Jeg kunne ikke få det til at virke med det eksempel du skrev nemlig
Avatar billede martor Nybegynder
08. november 2005 - 20:36 #20
Hvad får du da af fejlbesked? Jeg går også ud fra at du er klar over at det blot er et eksempel jeg har skrevet, med alle de forbehold der følger med sådanne! Du er selvfølgelig nød til at rette til efter behov...
Avatar billede bcool Nybegynder
14. november 2005 - 16:04 #21
Får den her fejl ved at indsætte:
sql = "select navn, adresse, postnummer, betalingsmetode, overskrift from betaling inner join produkter on betaling.vareId = produkter.id";

Der kan ikke joinforbindes med feltet af typen Memo, OLE eller Hyperlink Object (betaling.vareId=produkter.id).
Beskrivelse: Der opstod en ikke-afviklet undtagelse under udførelse af den aktuelle webanmodning. Se staksporingen for at få yderligere oplysninger om fejlen, og hvor den kom fra i koden.

Detaljer om undtagelse: System.Data.OleDb.OleDbException: Der kan ikke joinforbindes med feltet af typen Memo, OLE eller Hyperlink Object (betaling.vareId=produkter.id).

Kildefejl:


Linje 25:
Linje 26:     OleDbDataReader dbReader;
Linje 27:     dbReader = dbCmd.ExecuteReader();
Linje 28:    
Linje 29:     MyDataList.DataSource = dbReader;

Har også prøvet at sætte den til: select * from betaling....osv med samme resultat.
Hvis jeg indsætter:
sql = "select id, navn, adresse, postnummer, betalingsmetode, overskrift from betaling inner join produkter on betaling.vareId = produkter.id";

Får jeg følgende fejl:
Serverfejl i programmet '/'.
--------------------------------------------------------------------------------

Det angivne felt "id" kan referere til mere end én tabel, der er vist i FROM-delsætningen i sætningen SQL.
Beskrivelse: Der opstod en ikke-afviklet undtagelse under udførelse af den aktuelle webanmodning. Se staksporingen for at få yderligere oplysninger om fejlen, og hvor den kom fra i koden.

Detaljer om undtagelse: System.Data.OleDb.OleDbException: Det angivne felt "id" kan referere til mere end én tabel, der er vist i FROM-delsætningen i sætningen SQL.

Kildefejl:


Linje 25:
Linje 26:     OleDbDataReader dbReader;
Linje 27:     dbReader = dbCmd.ExecuteReader();
Linje 28:    
Linje 29:     MyDataList.DataSource = dbReader;
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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