Avatar billede c-lund Nybegynder
31. oktober 2004 - 13:59 Der er 12 kommentarer og
1 løsning

Search script

Har lige 2 problemer med et search script
1.) hvis en bruger skriver 2 søge ord i et form felt seperetet med enten komma eller mellemrum, skal den kigge databasen efter med begge ord.
2.) kan ikke få den til at skrive en rigtig ordentlig fejlmedd. ud.

mvh. Christian
---------------


<% @Language="JavaScript" %>

<%
  var

  searchword = Request("searchform");

sqlStatement1 =
      "SELECT beskrivelseid, words FROM words where words = '" + searchword + "'";


    ConOpenArg = "";
    Connection= Server.CreateObject("ADODB.connection");
    ConOpenArg = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" + Server.MapPath("timeline.mdb");
    Connection.open(ConOpenArg);


res1 = Connection.Execute(sqlStatement1);

Response.write("du søgte på " + searchword + "<br><BR>");

if (!(searchword == "" + res1("words") + ""))
  {
  Response.Write("Der er ingen artikler der passer til søgningen");
  }

while(!res1.EOF)
      {

Response.write("<A href=default.asp?id=" + res1("beskrivelseid") + ">");
Response.write("" + searchword + "</a><BR>");
res1.MoveNext();
      }



Connection.close();

%>
Avatar billede ldanielsen Nybegynder
31. oktober 2004 - 14:10 #1
Det du gerne vil have er vel at searchword = "hej, du" eller "hej du"
skal blive til

SELECT beskrivelseid, words FROM words where words = 'hej' OR words = 'du'

eller skal det være

SELECT beskrivelseid, words FROM words where words LIKE '*hej*' OR words LIKE '*du*'

?

I hvert fald skal du have lavet et array af ordene.

fortsættes ...
Avatar billede ldanielsen Nybegynder
31. oktober 2004 - 14:25 #2
var searchword = Request("searchform");
searchword = searchword.replace(/ /g, "¤");
searchword = searchword.replace(/,/g, "¤");
searchword = searchword.replace(/\¤\¤/g, "¤");
searchword = searchword.replace(/\¤\¤/g, "¤");
searchword = searchword.replace(/\¤\¤/g, "¤");
var arrSearchwords = searchword.split("¤")

var sep = "";
var whereClause = "";
for (i=0;i<arrSearchwords.length;i++){
    whereClause += sep + " words = '" + arrSearchwords[i] + "' ";
    sep = " OR ";
    }

sqlStatement1 =
      "SELECT beskrivelseid, words FROM words WHERE " + whereClause;


osv ...


Det jeg gør er at erstatte både mellemrum og komma med ¤, og derefter erstatte ¤¤ med ¤ nogle gange. Så vil strengen være i formen "hej¤du¤der". Så splitter jeg den tl et array ved ¤, laver et loop der returnerer "words = 'hej' OR words = 'du' OR words = 'der'"

Og så skulle den være der
Avatar billede c-lund Nybegynder
31. oktober 2004 - 15:32 #3
Tak, tror jeg forstår teorien i det, men kan ikke lige få det til at virke.
Error Type:
Microsoft JScript runtime (0x800A01B6)
Object doesn't support this property or method
Avatar billede ldanielsen Nybegynder
31. oktober 2004 - 16:13 #4
ok, jeg er ikke vant til at lave serverside javascript. Hvilken linie er det fejlen opstår i?

Vis mig evt hele din kode
Avatar billede c-lund Nybegynder
31. oktober 2004 - 16:44 #5
Error Type:
Microsoft JScript runtime (0x800A01B6)
Object doesn't support this property or method
/projekt/timeline/Website/sitet/search.asp, line 5


<% @Language="JavaScript" %>

<%
  var searchword = Request("searchform");
searchword = searchword.replace(/ /g, "¤");
searchword = searchword.replace(/,/g, "¤");
searchword = searchword.replace(/\¤\¤/g, "¤");
searchword = searchword.replace(/\¤\¤/g, "¤");
searchword = searchword.replace(/\¤\¤/g, "¤");
var arrSearchwords = searchword.split("¤");

var sep = "";
var whereClause = "";
for (i=0;i<arrSearchwords.length;i++){
    whereClause += sep + " words = '" + arrSearchwords[i] + "' ";
    sep = " OR ";
    }


sqlStatement1 =
      "SELECT beskrivelseid, words FROM words WHERE " + whereClause;



    ConOpenArg = "";
    Connection= Server.CreateObject("ADODB.connection");
    ConOpenArg = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" + Server.MapPath("timeline.mdb");
    Connection.open(ConOpenArg);


res1 = Connection.Execute(sqlStatement1);

Response.write("du søgte på " + searchword + "<br><BR>");
if (!(searchword == "" + res1("words") + ""))
  {
  Response.Write("Der er ingen artikler der passer til søgningen");
  }

while(!res1.EOF)
      {

Response.write("<A href=default.asp?id=" + res1("beskrivelseid") + ">");
Response.write("" + searchword + "</a><BR>");
res1.MoveNext();
      }






    Connection.close();

%>
Avatar billede ldanielsen Nybegynder
31. oktober 2004 - 16:58 #6
det er nok én af disse:

searchword = searchword.replace(/ /g, "¤");
searchword = searchword.replace(/,/g, "¤");
searchword = searchword.replace(/\¤\¤/g, "¤");
searchword = searchword.replace(/\¤\¤/g, "¤");
searchword = searchword.replace(/\¤\¤/g, "¤");


Prøv med
searchword = searchword.replace(/\ /g, "¤");
searchword = searchword.replace(/,/g, "¤");
searchword = searchword.replace(/\¤\¤/g, "¤");
searchword = searchword.replace(/\¤\¤/g, "¤");
searchword = searchword.replace(/\¤\¤/g, "¤");


Prøv ellers st udkommentere dem én ad gangen for at se hvilken der giver fejlen
Avatar billede c-lund Nybegynder
31. oktober 2004 - 17:16 #7
men hov, man kan da ikke starte flere "var" i en fil eller hva
?

hvis jeg udkommetere disse for jeg denne fjel:

'arrSearchwords' is undefined

men det er jo klart nok
-----------

//searchword = searchword.replace(/\ /g, "¤");
//searchword = searchword.replace(/,/g, "¤");
//searchword = searchword.replace(/\¤\¤/g, "¤");
//searchword = searchword.replace(/\¤\¤/g, "¤");
//searchword = searchword.replace(/\¤\¤/g, "¤");
//arrSearchwords = searchword.split("¤");
Avatar billede c-lund Nybegynder
31. oktober 2004 - 17:28 #8
Hvad betyder "g"?
Avatar billede ldanielsen Nybegynder
31. oktober 2004 - 17:34 #9
g betyder global, og det gør at alle forekomster af karakteren bliver erstattet. Det er Regular Expressions.

Du skal naturligvis ikke udkommentere dem alle, men kun én ad gangen indtil du finder den der gir fejl. Det med at tage linienummeret er ofte lidt usikkert, ikke?

arrSearchwords = searchword.split("¤");

skal ikke udommmenteres
Avatar billede c-lund Nybegynder
31. oktober 2004 - 17:47 #10
ved godt, udkommeterede dem også en efter en, og fik den samme fejl ved dem alle, også ved arrSearchwords = searchword.split("¤");
Avatar billede ldanielsen Nybegynder
31. oktober 2004 - 17:56 #11
Ok, jeg ved sgu ikke hvad jeg skal sige.
Avatar billede ldanielsen Nybegynder
31. oktober 2004 - 18:22 #12
Tag point'ene selv, og rejs spørgsmålet i JS kat, eller her igen, men nu som et spm om RegExp i serverside JS
Avatar billede c-lund Nybegynder
31. oktober 2004 - 19:51 #13
ok, men tak for hjælpen, jeg har fået nogle ideer til hvordan det måske kan løses
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