04. august 2003 - 11:10Der 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.
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
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
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
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.
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.
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
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
Synes godt om
Ny brugerNybegynder
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.