Gå til innhold

Anbefalte innlegg

Har laget en side som henter inn all infoen fra en record i en database. Denne teksten kan man så redigere for så og sende tilbake til databasen. Men hvis det er en " i teksten som hentes inn så vises ikke denne, og den teksten som eventuelt kommer bak.

 

(f.eks. 21" Skjerm blir bare 21)

 

Finnes det noen måte og fikse det på ?

 

Forresten hva er det beste norske ordet å bruke for en record (kom ikke på det i farta :roll:

Lenke til kommentar
Videoannonse
Annonse

du kan løse dette ved at scriptet legger til " etter den har skrevet ut skjermstørelsen. dette er kanskje det enkleste.

 

såvidt jeg husker kan du også omgå problemet du nevner ved å slenge på en slach eller backslach før ". (husker ikke helt hvilken avdisse det det men detkan du eventuelt eksperimentere med selv)

Lenke til kommentar

Nope, det blir feil ilpostino!

 

Sett at du henter ut data fra database-feltet "innhold".

Gjør som følger:

 

response.write(server.htmlencode(rsConn("innhold")))

Det løser problemet ditt - 100% sikkert.

 

Edit:

Forresten, det beste ordet for record i databasesammenheng er vel igrunn "post".

Lenke til kommentar

på hvilken måte kan det bli feil? det går helt fint ann å legge til på data du henter fra databaser. gjort det selv både i asp og php.

 

hvis du skal skrive ut " for å symbolisere at du skal vise størelse på monitoren kan du gjøre følgende (forutsatt at variablen 'storelse' er et heltall og at den er hentet databasen). ta bort mellomrommet da jeg har brukt det for å unngå at det vises som "

 

response.write &storelse " & # 3 4;"

 

dette skriver ut skjermstørelsen pluss " som viser at det her er snakk om tommer....

Lenke til kommentar

Ja, ok så fungerer det, men det er langt ifra en god løsning!

Hvor sannsynlig er det at man har et eget felt for størrelsen på skjermen? I så fall ville det i stor grad være en elendig designet database. I en produktdatabase har du vel i all hovedsak bruk for produktnavn, produsent, pris, ID og kanskje et par felt for produktdetaljer o.l. At en monitor er så og så mange tommer bør da fremgå i feltet for produktnavn/produktbeskrivelse.

 

Din løsning fungerer som sagt i ett gitt tilfelle, men det kreves da at løsningen er veldig statisk, og ca. 0% skalèrbar.

 

Dessuten bør man alltid unngå å bruke "-tegnet direkte i HTML-koden, da dette sannsynligvis vil gi deg en feil ved f.eks. validering av koden. "-tegnet skrives som "&" i HTML, og ved å bruke server.htmlencode vil alle symboler bli "oversatt" til HTML-standard.

 

Så det jeg mente med "feil", var ikke at det ikke funker, men at du ville fått stryk på eksamen om du brukte det. :c)

Lenke til kommentar

har hatt endel programmering på skolen i tilleg til at jeg har knottenerdet endel på egenhånd, og jeg har lært en ting av dette; uansett hvordan du vil ha det vil det <b>garantert</b> være flere forskjellige løsninger på et problem. dette selv om resultatet stort sett vil være det samme til sluttbruker. det at vi er litt uenige om hvordab dette skal gjøres er vel et typisk eksempel på dette.

 

det at jeg tok frem skjermen som eksempel var fordi han som startet denne tråden brukte dette som et eksempel. er det meningen at størelsen på monitorer skal være i en egen del av databasen synes jeg han skal få lov til å lage databasen slik (med mindre han jobber i en bedrift som krever skalabilitet, fleksibilitet ++).

Lenke til kommentar

Jo da, selvfølgelig må han få lov til det, kritikken mot å ha et eget felt for størrelse var mest en pekepinn for ham, ikke kritikk av din løsning for øvrig.

 

Og du har helt rett, det er mange løsninger på de fleste problem, men noen av løsningene er ofte bedre enn andre. Er litt uenig i at man liksågodt kan lage en rutine som er vanskelig å oppdatere som å lage en applikasjon som er vel gjennomtenkt og fleksibel på forhånd. Alle sider jeg noengang har laget har hatt behov for store og små endringer etterhvert (bedrifter "tror det ikke trengs", men finner på massevis av kjekke funksjoner etterhvert), og god planlegging/design på forhånd skaper mindre problemer/arbeid ved senere endringer.

 

Dette ble nesten litt off-topic, men, men :)

 

Har ikke sett noe svar fra WebKnight da, hadde jo vært fint om han tar en kikk på postene han selv starter og kommer med kommentarer osv...

Lenke til kommentar

:roll:

 

Ikke meningen å skape uro her...

 

Har ikke et eget felt for størrelse, men bruker størrelsen som det første jeg skriver som Intro for skjermen - Dette for å få en sortering etter størrelse..

 

Koden ser slik ut :

<input type="text" name="Intro" size="80" value="<%= Intro %>">

--- dette fordi : Intro=prodkat ("intro")

 

Og teksten som skal hentes inn fra basen er f.eks. 17" CRT skjerm, men da kommer altså bare 17 opp i tekstfeltet..

 

Prøvde litt med koden din reactor, men får ikke helt til syntaxen..

 

Og dere - slutt og krangle nå da :grumpy:

Lenke til kommentar

Jeg krangler da iallefall ikke, bare diskuterer (som foreldrene mine pleide å si).

 

Uansett, jeg testa ut det her litt selv, og kom frem til at det ikke går å kjøre en server.htmlEncode kommando rett mot et recordset. Det jeg måtte gjøre var å først laste dataen inn i en variabel og så kjøre kommandoen mot denne. M.a.o.:

  <%

intro = rsConn("prodnavn")

intro = server.HTMLEncode(intro)

%>



<input type="text" name="Intro" size="80" value="<%=Intro%>">

Dette fungerte smertefritt. Veit ikke hvorfor det ikke fungerer direkte, men, men... Det kan være fordi feltet jeg testa det mot var et memo-felt, men det kan du jo kanskje kikke litt på selv om du vil.

Så da? Funker det nå?

Lenke til kommentar
Jeg krangler da iallefall ikke, bare diskuterer (som foreldrene mine pleide å si).

Dine også :roll:

 

Uansett, jeg testa ut det her litt selv, og kom frem til at det ikke går å kjøre en server.htmlEncode kommando rett mot et recordset. Det jeg måtte gjøre var å først laste dataen inn i en variabel og så kjøre kommandoen mot denne. M.a.o.:

  <%

intro = rsConn("prodnavn")

intro = server.HTMLEncode(intro)

%>



<input type="text" name="Intro" size="80" value="<%=Intro%>">

Dette fungerte smertefritt. Veit ikke hvorfor det ikke fungerer direkte, men, men... Det kan være fordi feltet jeg testa det mot var et memo-felt, men det kan du jo kanskje kikke litt på selv om du vil.  

Så da? Funker det nå?

 

TUUUUSEN Takk reactor!!! Setter virkelig pris på at du har tatt deg tid til å teste og prøve dette for å hjelpe meg. Nå funker det akkurat slik jeg ønsket det! Takker og bukker dypt :D

Lenke til kommentar

Det er faktisk en liten ting til.

 

Samme side. I databasen har jeg noen felter med "kryss av" (True/False) En velger om et produkt skal vises på websiden og en annen om et produkt skal komme på forsiden.

 

Problem : I admin verktøyet mitt får jeg hentet inn disse verdiene på siden med tekstfelter slik at de kan redigeres, da som True/False, men jeg får ikke til koden på siden som bekrefter endringene, eller den som prossesserer endringene da, for å si det slik.

 

Feilmeldingen er :

Error Type:

Microsoft JET Database Engine (0x80040E14)

Syntax error (missing operator) in query expression.

 

Koden :

sql="UPDATE produkter SET "

 

sql=sql & "prod_on_web= '" & TRIM(Request.Form("Web")) & "',"

sql=sql & "forside= '" & TRIM(Request.Form("Forside")) & "',"

...

...

 

Noen forslag ?

Lenke til kommentar

Nja, det jeg kan se sånn umiddelbart er at WHERE-clausen mangler.

Update command:

UPDATE {table}

SET {POST} = 'textvalue'

WHERE {POST} = {somevalue}

Uten WHERE vil jo alle postene bli oppdatert, og det vil du sikkert ikke...

 

Grunnen til at du får feil er nok antakeligvis at du bruker apostrofer. Jeg regner med at form-dataen du sender fra siden som skal oppdatere data er "true" og "false"? Du kan også bruke "1" og "0". Uansett, "true" og "false" er ikke tekst, det er boolean, og riktig SQL-streng vil da bli:

SET prod_on_web = True

og ikke

SET prod_on_web = 'True'

I ditt tilfelle:

SET prod_on_web = " & trim(request.form("web")) & "(...)"

 

Skjønte du den? :)

Lenke til kommentar

Glemte å si en ting:

Dette vil da kun gjelde om posten i databasen er av typen "True/False". Dersom du har satt det som en teksttype, er det noe annet som er feil, men da må jeg nesten få se mer av SQL-stringen og dataen som blir sendt inn.

 

En annen ting er jo hvordan du behandler denne avkrysningsboksen når den ikke er krysset av. Da vil jo verdien bli "", og da vil du nok få en feilmelding om du prøver å oppdatere en boolean verdi med ingenting. Du må nok ha en form for validering av dataen som kommer inn, slik at du unngår at det blir noen feil i SQL-spørringen. Enklest er det jo å bruke IF-THEN setninger:

dim bOnWeb

if request.form("web") = "" then

  bOnWeb = "false"

else

  bOnWeb = "true"

end if



sqlstr = (.....)SET prod_on_web = " & bOnWeb & "(...)"

 

Kun et eksempel altså, så du kan/bør gjøre det litt bedre enn dette... :) men det er iallefall tankegangen.

Lenke til kommentar
I ditt tilfelle:
SET prod_on_web = " & trim(request.form("web")) & "(...)"

 

Skjønte du den? :)

 

Nja... Har forsøkt litt, men hva mener du med "(...)" Skal noe inn her..?? Virker kanskje helt idiotisk å spørre om, men jeg er ikke helt dreven på dette ennå - Som du sikkert skjønner :roll:

 

Og takk igjen for at du forsøker å hjelpe :woot:

 

-- Her er forresten hele koden som ikke går... --

sql="UPDATE produkter SET "

sql=sql & "prod_on_web= '" & TRIM(Request.Form("Web")) & "',"

sql=sql & "forside= '" & TRIM(Request.Form("Forside")) & "',"

sql=sql & "produsent= '" & TRIM(Request.Form("Produsent")) & "',"

sql=sql & "varenavn= '" & TRIM(Request.Form("Varenavn")) & "',"

sql=sql & "varenummer= '" & TRIM(Request.Form("Varenummer")) & "',"

sql=sql & "intro= '" & TRIM(Request.Form("Intro")) & "',"

sql=sql & "punktliste= '" & TRIM(Request.Form("Spesifikasjon")) & "',"

sql=sql & "beskrivelse= '" & TRIM(Request.Form("Beskrivelse")) & "',"

sql=sql & "varelink= '" & TRIM(Request.Form("Link")) & "',"

sql=sql & "bilde= '" & TRIM(Request.Form("Bilde")) & "',"

sql=sql & "pris= '" & TRIM(Request.Form("Pris")) & "'"

sql=sql & "WHERE prod_id=" & TRIM(Request.Form("ID"))

 

conn.execute(sql)

Lenke til kommentar

(...) = resten av koden du måtte ha.

 

Det som er viktigst er at du sjekker om informasjonen du forsøker å legge inn stemmer overens med datatypen i databasen. Husk at det er kun tekst som skal være omgitt av apostrofer, ikke tall eller boolean. Dvs. dersom feltet "pris" i databasen er et tall-felt, skal du ikke ha apostrofer rundt verdien (ex: sql=sql & "pris= " & TRIM(Request.Form("Pris")) ) Dersom typen er tekstverdi i databasen, skal du ha apostrofer rundt.

 

Oppsummering:

'123123123' = tekst

123123123 = tall

'true' = tekst

true = boolean

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...