Avatar billede heyn Nybegynder
12. januar 2006 - 09:03 Der er 12 kommentarer og
1 løsning

Gemme linieskift i textarea?

Jeg har en formular der hvor man skal indføre noget tekst foretages (bemærk linieskift i denne formular).
Jeg oplever at de linieskift brugeren indfører i textarea ikke bliver overført til databasen, og da teksten til tider ret omfattende ville det være rart hvis dette skete.
Hvordan?
P.t. ser min kode i forkortet form således ud.

<form name="formen" action="sag_action_ex.php" method="post" target="_self">
<textarea id="textfelt" name="text" rows="6" cols="60"></textarea>
Avatar billede keysersoze Ekspert
12. januar 2006 - 09:19 #1
hvilket sprog bruger du? Bruger du ASP skal du replace VbCrLf med <br> når du trækker dataene ud fra databasen igen - fx;

Response.Write Replace(rs("tekst"),VbCrLf,"<br>")

Tilsvarende kan du gøre i fx PHP kan dog ikke lige huske hvordan.
Avatar billede heyn Nybegynder
12. januar 2006 - 09:22 #2
Hov en fejltastning - jeg fik ikke det hele med.

<script language="JavaScript" type="text/javascript">
function test_af_submit(id){
    str = document.getElementById(id).value;
    str = str.replace(/^ +/,"");
    str = str.replace(/ +$/,"");
    if (str == ''){ window.alert('Du mangler at udfylde tekstfeltet'); return false; }
    return true;
}
function sikring(id){
    if (test_af_submit(id) == false) return false;
    tjek = window.confirm('Kan du godkende at teksten:\n"'+document.getElementById(id).value+'"\nsendes til brugeren?');
    if (tjek == false) return false;
    return true;
}
</script>
...
...
<form name="formen" action="sag_action_ex.php" method="post" target="_self">
<textarea id="felt" name="text" rows="6" cols="60"></textarea>
<input type="submit" name="type" value="Tilføj notat" onclick="return sikring('felt')">

Desuden ønsker jeg samtidig at tekst vises i et <td>-felt på siden næste gang siden åbnes. Det er på dette tidspunkt linieskiftet får betydning.
Det går ikke at indføre <br>-felter når teksten gemmes i MySQL da den nogle gange, men ikke altid, også skal sendes i en autogenereret mail.

Mvh Christian Heyn
Avatar billede keysersoze Ekspert
12. januar 2006 - 09:32 #3
jeg har heller ikke sagt at du skal gemme <br> i databasen - du må under ingen omstændigheder ændre på det en bruger har skrevet i et tekstfelt, det er først når du hiver data ud af databasen at du skal tilpasse det til formålet hvilket på web vil sige at du skal replace VbCrLf med <br> og til mail enten det samme eller bare lade VbCrLf være VbCrLf.
Avatar billede heyn Nybegynder
12. januar 2006 - 09:34 #4
Jeg anvender PHP.
Jeg har lige kikket på den tekst der rent faktisk bliver gemt i MySQL.
Linieskift bliver gemt som [DOBBELT VENSTREPIL][SPELVENDT P], hvad enten man anvender return- el. enter-tast.
Mvh Christian
Avatar billede keysersoze Ekspert
12. januar 2006 - 09:43 #5
i PHP gælder det samme - syntaksen er bare anderledes; http://dk2.php.net/nl2br

Hvad præcis der bliver vist i databasen kan du ikke helt regne med - fx kan man reelt se linieskiftet i access hvorimod det i oracle vises som ||||. Det vigtige at holde sig for øje i hvert fald er at man ikke må ændre på det brugeren har skrevet i formfelter før data trækkes ud af basen.
Avatar billede heyn Nybegynder
12. januar 2006 - 10:34 #6
Skal det forstås således at det i virkeligheden er et PHP-spørgsmål?
Altså: Hvordan udskifter jeg '«¶' med henholdsvis '<br>' (<td>-felt) og '\n' (mail) når jeg henter teksten fra db ind i mit php-script?
Hvis ja - så må du undskylde. Jeg vil så stille spørgsmålet til php-programmørerne.
Under alle omstændigheder - Giv et SVAR

Mvh Christian
Avatar billede heyn Nybegynder
12. januar 2006 - 10:42 #7
Jo foresten - et ægte JavaScript-spørgsmål.
Funktionen 'test_af_submit()' sikrer med en alert at textarea rent faktisk er udfyldt før submit udføres. Jeg opdager pludselig at der submittes hvis jeg udelukkende indfører linie-skift med return/enter. Hvordan skal min str.replace() udformes for at sikre at dette ikke sker?
Avatar billede keysersoze Ekspert
12. januar 2006 - 11:22 #8
det er i virkeligheden et php-spørgsmål - ja... men stiller du spm i den kategori vil de svare det samme (nl2br)

hvordan din js-funktion skal laves er jeg lidt i tvivl om - måske kunne du tjecke på længden så der skal være et vist antal tegn?
Avatar billede heyn Nybegynder
12. januar 2006 - 13:03 #9
Kender du 'tegnet' for return og enter og kender du kommandoen for strengens længde.
Så kunne man vel udføre følgende rutine:

function test_af_submit(id){
    str = document.getElementById(id).value;
    do{
    len = [LÆNGDE AF STRENG str];
    str = str.replace(/^ +/,"");
    str = str.replace(/ +$/,"");
    str = str.replace(/^[RETURN]+/,"");
    str = str.replace(/[RETURN]+$/,"");
    str = str.replace(/^[ENTER]+/,"");
    str = str.replace(/[ENTER]+$/,"");
    new_len = [LÆNGDE AF STRENG str];
    }
    while (len != new_len)
    if (str == ''){ window.alert('Du mangler at udfylde tekstfeltet'); return false; }
    return true;
}
?
Avatar billede roenving Novice
12. januar 2006 - 16:33 #10
str = str.replace(/^\n+/,"");

    new_len = str.length;
Avatar billede heyn Nybegynder
13. januar 2006 - 15:07 #11
Tak roeving.
Hvad med et SVAR
Mvh Christian
Avatar billede roenving Novice
13. januar 2006 - 16:26 #12
Velbekomme '-)
Avatar billede roenving Novice
13. januar 2006 - 17:17 #13
-- og tak for point ;~}
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