Avatar billede karen30 Nybegynder
01. marts 2003 - 12:27 Der er 39 kommentarer og
1 løsning

textarea med linieskift

Så prøver jeg i denne kategori..
jeg er ved at lave en admin side hvor man bla skal kunne indtaste noget tekst i et textarea. Det der oprettes bliver vist på en hjemmeside.Indholdet bliver lagt i en mysql database. Men for at det skal se pænt ud på hjemmesiden må længden af hver linie ikke være mere end 50 tegn - hvorfor den så skal skifte linie. Er der mon en venlig sjæl der kan hjælpe med det??
Avatar billede medions Nybegynder
01. marts 2003 - 12:30 #1
<% Response.Write(Replace(objRs("Feltnavn"),vbCrLf,"<br>")) %>

//>Rune
Avatar billede medions Nybegynder
01. marts 2003 - 12:30 #2
^Det skal du skrive der hvor du vil ha' det udskrevet!

-et linjeskift i en databasetabel bliver til et vbCrLf, så replacer du det bare med et <br> tag i HTML!

//>Rune
Avatar billede karen30 Nybegynder
01. marts 2003 - 12:31 #3
dvs når data bliver lagt i databasen - er jeg yderligere i tvivl om hvordan det bliver lagt i databasen - altså jeg mener - hvad sker der mon når det hives ud af db igen??
Avatar billede eagleeye Praktikant
01. marts 2003 - 12:32 #4
Vil du havde en kode som selv lave return for hver 50 karakter ?
Avatar billede medions Nybegynder
01. marts 2003 - 12:33 #5
Fx..
Hvis du skriver flg. tekst i dit textarea:

Hej Karen, du er 33 år gammel
og bor på Sjælland.

Så vil det se således ud i Databasen:

Hej Karen, du er 33 år gammel vbCrLf og bor på Sjælland

Så Replacer vi så vbCrLf med <br> og så kommer det til at se rigtig ud ;o)

//>Rune
Avatar billede medions Nybegynder
01. marts 2003 - 12:35 #6
Du kan rette max antal karakter i denne linie MaxLength = 50


inputStr = rsGuestbook("Comments")
reDim  arr(0)
str = replace(inputStr,"<br>",vbCrLf)
MaxLength = 50
while (LEN(str)>0)
  splitIndex = InStrRev(str, vbCrLf, MaxLength)
  if splitIndex = 0 then
    splitIndex = InStrRev(str, " ", MaxLength)
    if splitIndex = 0 then splitIndex = LEN(str)
  end if 
  ReDim Preserve arr(UBOUND(arr) + 1)
  arr(UBOUND(arr)) = LEFT(str, splitIndex)
  str = MID(str, splitIndex + 1)
wend
outStr = ""
for i = LBound(arr) to UBound(arr)
  outStr = outStr & arr(i) & vbCrLf
next
outStr = replace (outStr, vbCrLf, "<br>")

'Og her udskrives teksten så:
Response.Write outStr

Ovenstående laver automatisk linjeskift efter 50 tegn...

//>Rune
Avatar billede eagleeye Praktikant
01. marts 2003 - 12:36 #7
inputStr = "Din Streng Fra Databasen"

reDim  arr(0)
str = replace(inputStr,"<br>",vbCrLf)
MaxLength = 50
while (LEN(str)>0)
  splitIndex = InStrRev(str, vbCrLf, MaxLength)
  if splitIndex = 0 then
    splitIndex = InStrRev(str, " ", MaxLength)
    if splitIndex = 0 then splitIndex = LEN(str)
  end if 
  ReDim Preserve arr(UBOUND(arr) + 1)
  arr(UBOUND(arr)) = LEFT(str, splitIndex)
  str = MID(str, splitIndex + 1)
wend
outStr = ""
for i = LBound(arr) to UBound(arr)
  outStr = outStr & arr(i) & vbCrLf
next
outStr = replace (outStr, vbCrLf, "<br>")

Response.write outStr
Avatar billede karen30 Nybegynder
01. marts 2003 - 12:36 #8
det skal jeg altså lige forstå rigtigt - vil det sige at når jeg indtaster noget i et felt der bliver lagt i databasen - så vil der i databasen automatisk blive lavet et vbCrLf hver gang der tastes return??
Avatar billede medions Nybegynder
01. marts 2003 - 12:37 #9
Yepzer. -sådan logisk tænkt :-)

//>Rune
Avatar billede eagleeye Praktikant
01. marts 2003 - 12:38 #10
Nej det har ikke noget med databasen at gøre.

Reurn-tasten = vbCrLf
Avatar billede karen30 Nybegynder
01. marts 2003 - 12:43 #11
betyder det at hvis jeg kigger i det felt i databasen så vil der eksempelvis stå:Hej jeg hedder Karen vbCrLf Jeg bor på sjælland vbCrLf Og hvor er jeg glad for at der er nogen der hjælper mig???
Avatar billede medions Nybegynder
01. marts 2003 - 12:44 #12
Yep

//>Rune
Avatar billede eagleeye Praktikant
01. marts 2003 - 12:45 #13
Nej du vil ikke kunne se det som vbCrLf. vbCrLf er en VBScript konstant og det er i virkeligheden to karakter efter hinanden: Chr(13) & Chr(10)

Det fuldstændigt det samme som hvis du trykke på tasten b kommer der et b i teksten. Hvis du trykke på Return-tasten kommer det et linieskift som ikke kan se anden end teksten skifter linie, dog ligger der i strengen en vbCrLf karakter som symboliser return tasten.

Cr = Carriage return
Lf = Line feed
Avatar billede karen30 Nybegynder
01. marts 2003 - 12:48 #14
oki - så er jeg med - men til både medions og eagleeye - kan I ikk hjælpe mig med hvor de kodestumper I har skrevet skal sættes ind i min kode? Altså jeres eksempler mener jeg - hvad skal stå på den side hvor der indtastes noget i textarea og hvad skal stå på den side hvor visningen sker.........visningen sker i en celle i en tabel
Avatar billede eagleeye Praktikant
01. marts 2003 - 12:50 #15
Hvis du kigger i din database vil den skifte linie hvor du har trykket på return tasten.
Hvis du indtaser dette: "Hej jeg hedder Karen[RETURN-tast]Jeg bor på sjælland[RETURN-tast]Og hvor er jeg glad for at der er nogen der hjælper mig"

Hvis du kigger i databasen vil det højst sansynligt se ud som dette:
Hej jeg hedder Karen
Jeg bor på sjælland
Og hvor er jeg glad for at der er nogen der hjælper mig

Så vbCrLf er bare en konstant man bruger for at kunne finde hvor der er blvet trykket på retun tasten.
Avatar billede karen30 Nybegynder
01. marts 2003 - 12:50 #16
og den maxlength - er det længden af hele den samlede tekst - eller er det længen af hver linie?
Avatar billede eagleeye Praktikant
01. marts 2003 - 12:51 #17
maxlength er max antal karakter pr linie, så det er 50.
Avatar billede eagleeye Praktikant
01. marts 2003 - 12:51 #18
Der hvor du udskriver fra kolonnen idag kan du indsætte koden.
Avatar billede karen30 Nybegynder
01. marts 2003 - 12:53 #19
hm - det forstår jeg altså ikke rigtigt - undskyld hvis jeg er lidt dum- men alt det kode du har skrevet skal vel ikke stå i kolonnen....skal det ikke være en funktion der så kaldes når formen submittes??
Avatar billede eagleeye Praktikant
01. marts 2003 - 12:57 #20
Nej det skal ind på den side som udskriver fra databasen.

Hvad hedder den kolonne du skal udskrive fra?, hvis den ny hedder "kommentar" og du har et recordset rs så har du sikker en linie idag hvor du udskriver:

Response.Write rs("kommentar")

Du skal så havde alt koden ind før man udskriver oå det bliver sådan her:

inputStr = rs("kommentar")

reDim  arr(0)
str = replace(inputStr,"<br>",vbCrLf)
MaxLength = 50
while (LEN(str)>0)
  splitIndex = InStrRev(str, vbCrLf, MaxLength)
  if splitIndex = 0 then
    splitIndex = InStrRev(str, " ", MaxLength)
    if splitIndex = 0 then splitIndex = LEN(str)
  end if 
  ReDim Preserve arr(UBOUND(arr) + 1)
  arr(UBOUND(arr)) = LEFT(str, splitIndex)
  str = MID(str, splitIndex + 1)
wend
outStr = ""
for i = LBound(arr) to UBound(arr)
  outStr = outStr & arr(i) & vbCrLf
next
outStr = replace (outStr, vbCrLf, "<br>")

Response.write outStr
Avatar billede eagleeye Praktikant
01. marts 2003 - 12:59 #21
Det kan også laves om til en function så koden kan liggen lidt væk og bruge til andre felter.

function maxantal(str)
inputStr = str
reDim  arr(0)
str = replace(inputStr,"<br>",vbCrLf)
MaxLength = 50
while (LEN(str)>0)
  splitIndex = InStrRev(str, vbCrLf, MaxLength)
  if splitIndex = 0 then
    splitIndex = InStrRev(str, " ", MaxLength)
    if splitIndex = 0 then splitIndex = LEN(str)
  end if 
  ReDim Preserve arr(UBOUND(arr) + 1)
  arr(UBOUND(arr)) = LEFT(str, splitIndex)
  str = MID(str, splitIndex + 1)
wend
outStr = ""
for i = LBound(arr) to UBound(arr)
  outStr = outStr & arr(i) & vbCrLf
next
outStr = replace (outStr, vbCrLf, "<br>")
maxantal = outStr
end function

Så kopier du functionen ind og ligger den i bunden af din fil:
<%
function maxantal(str)
...
%>

og så retter du

Response.Write rs("kommentar")

Til:
Response.Write maxantal(rs("kommentar"))
Avatar billede karen30 Nybegynder
01. marts 2003 - 13:00 #22
Det her er et udtræk af hvad der står på den admin side hvor man opretter
<form NAME="opretstandard" ACTION="opretreference.asp?funktion=do_opretnystandard" METHOD="post" onsubmit="java script:return Validate();">
<TR>
<td>KommentarDK</td>
<td><Textarea NAME="kommentardk" style="width:305px;"></textarea></td>
</TR>
</table></form>
Og det her er hvad der står på den side hvor det vises/udskrives
<table>
<tr>   
<td align="center" colspan="3"><b><u>Kommentar</u></b></td>
</tr>
<tr>       
<td align="left" colspan="3" height="20"><%=res.fields("kommentardk")%></td>
</tr>
</table>
så hvad gør jeg så?
Avatar billede karen30 Nybegynder
01. marts 2003 - 13:04 #23
eagleeye - dont leave me........
Avatar billede eagleeye Praktikant
01. marts 2003 - 13:06 #24
I am still here.

Jeg vil tage og lave det som en funktion som vist. Og lig funktionen ned i bunden og filen.

Ret denne linie:
<%=res.fields("kommentardk")%>

Til:
<%=maxantal(res.fields("kommentardk"))%>
Avatar billede karen30 Nybegynder
01. marts 2003 - 13:11 #25
kalder den så automatisk funktionen maxantal?
Avatar billede eagleeye Praktikant
01. marts 2003 - 13:13 #26
Ja det gør den.
Avatar billede karen30 Nybegynder
01. marts 2003 - 13:19 #27
ih altså - tusind millioner tak - har jeg egentlig mulighed for at give dig mere end de 15p - nu hvor du har været så sød at hjælpe så meget?
Avatar billede eagleeye Praktikant
01. marts 2003 - 13:35 #28
Ja jeg svare lige :)

Du kan trykke på point tallet 15 oppe lige før dit brugernavn eller du kan trykke på "Afsæt flere point" i menuen i functioner i venstra side.
Avatar billede karen30 Nybegynder
01. marts 2003 - 13:38 #29
men inden jeg gør det - hvad nu hvis det ikke virker - så må jeg stille spørgsmål igen - altså ikke at jeg tvivler på din ekspertise - men hvis jeg selv kludrer i det - så kan jeg jo ikke være sikker på at du ser mit spørgsmål vel?
Avatar billede eagleeye Praktikant
01. marts 2003 - 13:40 #30
Jeg tror på du, kan få det til at virke. Du kan trykke på knappen "Avenceret" så har du muliughed for at tildele X antal point til hver som har svaret.
Eller så finder vi nok ud af det. :)
Avatar billede karen30 Nybegynder
01. marts 2003 - 13:44 #31
og nu har jeg lige sat koden ind...
jeg har øverst i dokumentet dim følgende variabler:inputStr, str, MaxLength, splitIndex, outStr, maxantal

jeg har skrevet funktionen du gav mig således:
<%
function maxantal(str)
inputStr = str
reDim  arr(0)
str = replace(inputStr,"<br>",vbCrLf)
MaxLength = 50
while (LEN(str)>0)
  splitIndex = InStrRev(str, vbCrLf, MaxLength)
  if splitIndex = 0 then
    splitIndex = InStrRev(str, " ", MaxLength)
    if splitIndex = 0 then splitIndex = LEN(str)
  end if 
  ReDim Preserve arr(UBOUND(arr) + 1)
  arr(UBOUND(arr)) = LEFT(str, splitIndex)
  str = MID(str, splitIndex + 1)
wend
outStr = ""
for i = LBound(arr) to UBound(arr)
  outStr = outStr & arr(i) & vbCrLf
next
outStr = replace (outStr, vbCrLf, "<br>")
maxantal = outStr
end function

%>

og inden i formen har jeg skrevet følgende:
<tr>       
<td align="left" colspan="3" height="20">
<%=maxantal(res.fields("kommentardk"))%>
</td>
</tr>
Og jeg får følgende fejlmeddelelse:
Fejltype:
Der opstod en Microsoft VBScript-kompileringsfejl (0x800A0411)
Navnet blev defineret igen
/filcon/referencerny.asp, line 3080, column 9
function maxantal(str)
--------^
Så hvad har jeg mon gjort galt?
Avatar billede karen30 Nybegynder
01. marts 2003 - 13:45 #32
undskyld  - der skal ikke stå: "inde i formen har jeg skrevet følgende" det er selvfølgelig en tabel
Avatar billede karen30 Nybegynder
01. marts 2003 - 13:46 #33
eagleeye - er du her endnu?
Avatar billede eagleeye Praktikant
01. marts 2003 - 13:48 #34
Det kunne tyde på at du har fået lagt functionen ind to gange i koden.

"Navnet blev defineret igen"
Avatar billede karen30 Nybegynder
01. marts 2003 - 13:52 #35
jeg har fundet ud af det - jeg skulle jo ikke dim maxantal.......og det havde jeg gjort.....og jeg havde glemt at dim variabelen i - nu virker det vist ....
men nu kan jeg igen ikke give dig point - så du er nødt til at svare så jeg kan give dig point
Avatar billede karen30 Nybegynder
01. marts 2003 - 13:53 #36
og tusind tak endnu en gang - rigtig pænt af dig at bruge så meget tid på at hjælpe mig....... Ha en dejlig weekend - min har du reddet
Avatar billede eagleeye Praktikant
01. marts 2003 - 13:54 #37
Ok :)

Jeg kan ikke længere svare for du har lukket ved at acceptere medions svar.
Avatar billede karen30 Nybegynder
01. marts 2003 - 13:55 #38
kan jeg så ikk lige oprette et nyt som du kan svare på
Avatar billede eagleeye Praktikant
01. marts 2003 - 14:06 #39
Jo så opret et nyt og skrive som overskrift
Point til eagleeye

og lig en reference til dette spørgsmål.
Avatar billede medions Nybegynder
01. marts 2003 - 14:55 #40
Thx 4 Poinz

//>Rune
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
Kurser inden for grundlæggende programmering

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