Avatar billede kunop Nybegynder
04. august 2003 - 11:10 Der er 13 kommentarer og
1 løsning

Automatisk ændring til fed skrift

Jeg har et simpelt nyhedssystem, hvor jeg godt kunne tænke mig, at tekstfeltet blev tjekket inden det blev gemt i databasen, således at hvis tekstfeltet indeholder et navn som findes i en tabel i databasen bliver det automatisk med fed skrift.

F.eks. "Han hedder Peter Hansen og kommer fra Sorgenfri" Skal ændres til noget lignende det her: "Han hedder <strong>Peter Hansen</strong> og kommer fra Sorgenfri"

Det er vigtigt at teksten bliver kontrolleret op mod en database, således at jeg der er mulighed for at tilføje flere navne.

Nogen forslag?
Avatar billede medions Nybegynder
04. august 2003 - 11:58 #1
Du laver en connection til en database og bruger denne SQL:

strSQL = "SELECT BrugerNavn FROM tblBrugere WHERE BrugerNavn = '" & Request.Form("Brugernavn") & "'"
Set objRs = objConn.Execute(strSQL)

If objRs.EOF Then
  Response.Write("Brugeren fandes ikke og skal dermed ikke skrives med fed.")
Else
  Response.Write("<b>" & objRs("Brugernavn") & "</b>")
End If

//>Rune
Avatar billede kunop Nybegynder
04. august 2003 - 13:18 #2
Det virker ikke helt efter hensigten. Hvis jeg nu skriver "Peter er dum" i mit tekstfelt og sender, så udskriver den "Peter er dum", men hvis jeg derimod skriver "Peter", så udskriver den navnet med fed - Dette er naturligvis forudsat at jeg har skrevet Peter i databasen.

Jeg vil gerne have at hvis jeg skriver sætningen Peter er dum, så skriver den "Peter" (med fed) efterfulgt af "er dum"

Nogen forslag til hvordan det kan gøres?

Koden:

strTekst = Request.Form("tekst")

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("skole.mdb")
strSQL = "SELECT teacher FROM teachertbl WHERE teacher ='" & strTekst & "'"
Set Rs = Conn.Execute(strSQL)

If Rs.EOF Then
  Response.Write strTekst
Else
  Response.Write("<b>" & Rs("teacher") & "</b>")
End If
Avatar billede kunop Nybegynder
04. august 2003 - 13:26 #3
Jeg har tænkt lidt på om InStr(Strtekst, rs(teacher)) Then ....

Ikke kunne bruges
Avatar billede eagleeye Praktikant
04. august 2003 - 18:02 #4
Jo du kan bruge InStr:

Men du er nød til at hendte alle navne fra databasen og så tjkekke om det er i strengen sådan her:



strTekst = Request.Form("tekst")

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("skole.mdb")
strSQL = "SELECT teacher FROM teachertbl"
Set Rs = Conn.Execute(strSQL)

do while not rs.EOF Then
  if inStr(1, strTekst, Rs("teacher")) > 0 then
    strTekst = Replace(strTekst,"<b>" & Rs("teacher") & "</b>")
  End If
  rs.MoveNext
loop

Response.write strTekst
Avatar billede kunop Nybegynder
04. august 2003 - 20:44 #5
Jeg havde også en løkke i tankerne... Tester det senere
Avatar billede kunop Nybegynder
04. august 2003 - 22:56 #6
Den kommer med denne fejl:

Microsoft VBScript runtime error '800a01c2'

Wrong number of arguments or invalid property assignment: 'Replace'

/log/skole-nyhed.asp, line 25

line25: strTekst = Replace(strTekst,"<b>" & Rs("teacher") & "</b>")
Avatar billede eagleeye Praktikant
05. august 2003 - 00:31 #7
Ja ho har glemt Rs("teacher")

strTekst = Replace(strTekst, Rs("teacher"), "<b>" & Rs("teacher") & "</b>")
Avatar billede kunop Nybegynder
05. august 2003 - 09:29 #8
Denne fejl

Microsoft VBScript runtime error '800a005e'

Invalid use of Null: 'Replace'

/log/skole-nyhed.asp, line 25
Avatar billede kurtpedersen Nybegynder
06. august 2003 - 01:31 #9
Det tyder på, at strengen RS("teacher") er tom. Prøv at tjekke basen, ellers burde det køre.
Avatar billede kunop Nybegynder
06. august 2003 - 11:01 #10
Den fungerer rigtigt nok hvis jeg ikke skriver et ord som findes i tabellen "teachertbl", men så snart jeg anvender et ord fra tabellen kommer ovenstående fejl. Tabellen er IKKE tom, den indeholder et id samt et navn.

Når jeg kører siden kommer den forbi "if inStr(1, strTekst, Rs("teacher")) > 0 then" og den første rs("teacher") - dette må da også betyde at feltet ikke er tomt.
Avatar billede kurtpedersen Nybegynder
06. august 2003 - 12:33 #11
Jeg formulerede mig lidt dårligt, det jeg mente er, at RS("Teacher") indeholder null, som ikke er det samme som den tomme streng. Du kan teste at vartype(RS("teacher")) = 1.

Når du udtrækker data, så er den første record en begin of data, og den indeholder ikke nogen værdier. Du behøver derfor en movenext i din side, se her:

strTekst = Request.Form("tekst")

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("skole.mdb")
strSQL = "SELECT teacher FROM teachertbl"
Set Rs = Conn.Execute(strSQL)
Rs.MoveNext
do while not rs.EOF Then
  if inStr(1, strTekst, Rs("teacher")) > 0 then
    strTekst = Replace(strTekst,"<b>" & Rs("teacher") & "</b>")
  End If
  rs.MoveNext
loop

Response.write strTekst

Alternativet kan du undlade at lave Replace på den første record, så kører det også rigtigt. Det er nemlig den 1. record der går ned.
Avatar billede eagleeye Praktikant
06. august 2003 - 18:27 #12
Hvilken type er din kolonne ??

PRøv med dette styke kode:



strTekst = Request.Form("tekst")

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("skole.mdb")
strSQL = "SELECT teacher FROM teachertbl"
Set Rs = Conn.Execute(strSQL)

do while not rs.EOF Then
  teacher = "" & Rs("teacher")
  if inStr(1, strTekst, teacher) > 0 then
    strTekst = Replace(strTekst, teacher, "<b>" & teacher & "</b>")
  End If
  rs.MoveNext
loop

Response.write strTekst
Avatar billede kunop Nybegynder
06. august 2003 - 18:47 #13
>>eagleeye dit sidste forslag virker helt efter hensigten.

Jeg har tillige afprøvet forslaget fra kurtpedersen og det lader ikke til at virke, så det bliver eagleeye der får point.

Tak for hjælpen
Avatar billede kunop Nybegynder
06. august 2003 - 22:53 #14
Glemte måske lige at tilføje at det ene "then" ikke skulle være der. Det var bare i tilfældet af, at andre skulle få lyst til at anvende funktionen i dette spm.

Det endelige skal se således ud:

strTekst = Request.Form("tekst")

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("skole.mdb")
strSQL = "SELECT teacher FROM teachertbl"
Set Rs = Conn.Execute(strSQL)

do while not rs.EOF
  teacher = "" & Rs("teacher")
  if inStr(1, strTekst, teacher) > 0 then
    strTekst = Replace(strTekst, teacher, "<b>" & teacher & "</b>")
  End If
  rs.MoveNext
loop

Response.write strTekst
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