Avatar billede riishoj Nybegynder
11. maj 2002 - 19:58 Der er 40 kommentarer og
1 løsning

Scripts fejler på PWS

Jeg har en samling scripts som henter data fra en db. Det fungerer fint på min udbyders webserver, men når jeg kører de samme scrips på min bærbare pc over PWS, så laver den fejl. Fejlen forekommer på de scripts, som har en Response.Redirect.
Fejlmeldingen ser sådan ud

Response-objekt fejl 'ASP 0156 : 80004005'

Headerfejl

/bilerpaavestfyn/login2.asp, linje 33

HTTP-headerne skrives allerede til klientbrowseren. Ændringer af HTTP-headers skal foretages, inden sideindholdet skrives.

Fejlen forekommer bl.a. på dette script.

<%
' bruges til at tjekke om brugeren finde i db ved login
' Sender resultaterne fra tilføj links til databasen
' Database connection
' ADODB connection objektet
Set Conn = Server.CreateObject("ADODB.Connection")
' Husk at angive den rigtige sti til din database
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("/bilerpaavestfyn/riishojwebsoft.mdb")
' Åben databaseforbindelsen
Conn.Open DSN


strUsername = Trim(Replace(Request.Form("username"),"'",""))
strPassword = Trim(Replace(Request.Form("password"),"'",""))
strSQL ="SELECT * FROM login WHERE UCase(username) = '" & UCase(strUsername) & "' AND UCase(Password) = '" & UCase(strPassword) & "'"
set rs = Conn.execute(strSQL)
if not rs.EOF then
response.write rs("username")
end if
'først tjekke om brugeren findes ved at tjekke om recordsetet er tomt.
if not rs.EOF then
  if LCase(rs("username")) = LCase(strUsername) then
    'LOGIN OK
    session("brugernavn") = LCase(strUsername)
  session("brugerID") = rs("Id")
  Response.Redirect("index2.asp")
  else
    'INGEN BRUGER FUNDET
    'Eller en blev fundet men databasen bruger navn passer ikke med det
    'indtastede brugernavn
  end if
else
'brugeren ikke fundet lave det som skal ske hvis brugeren ikke er fundet her
response.write "Forkert password eller brugernavn, prøv igen."
end if
Conn.Close
Set Conn = Nothing

%>

Linje 33 er


  Response.Redirect("index2.asp")
 
Hvorfor virker det ikke på PWS'en?
Avatar billede eagleeye Praktikant
11. maj 2002 - 20:04 #1
Jeg ville nok nærmere spørge hvorfor virker det hos din udbyder...

Du har denne før du redirecter til siden:
if not rs.EOF then
  response.write rs("username")  '<--- En response.write skriver HTML kode til browseren.
end if

Normalt kan man kun redirete hvis der ikke er skrevet HTML kode til browseren.

Men prøv at sætte denne lini i toppe af din fil:
<%
response.buffer = true

Måske det hjælper.
Avatar billede eagleeye Praktikant
11. maj 2002 - 20:09 #2
Hvis det ikke helt gør det kan du prøve at Clear response inden redirect:

  Response.Clear
  Response.Redirect("index2.asp")


Ellers må du slette/flytte den kode som udskriver username. Er der nødvendigt at udskrive Usernavn hvis man bliver redirected med det samme?
Avatar billede riishoj Nybegynder
11. maj 2002 - 20:10 #3
OK, det prøver jeg.
Avatar billede riishoj Nybegynder
11. maj 2002 - 20:23 #4
Det hjalp sørme at indsætte

response.buffer = true

Jeg prøver lige at gøre det på alle de filer som fejler!
Du er sgu nærmest genial, eagleeye!
Avatar billede eagleeye Praktikant
11. maj 2002 - 20:28 #5
:)  det muligt at i nyer version af PWS eller nok nærmere MS-IIS, som din udbyder sikkert benytter, at man kan redirecte selvom der er skrevet til browseren med Response.write.
Avatar billede riishoj Nybegynder
11. maj 2002 - 20:34 #6
Tak, eagleeye. Nu virker det. Når jeg nu alligevel har dig online, kan du så ikke fortælle mig, hvordan jeg laver et link til en url på en af kolonnerne i min db-tabel. F.eks. kunne jeg tænke mig, at man i kolonnen "forhandler" kunne have et link til dennes website.
Avatar billede eagleeye Praktikant
11. maj 2002 - 20:39 #7
Ja du kan kalde den kolonnen link:
Du kan lave det hvor link brugrs til bare linket og teksten til linket:
<a href="<%=rs("link")%>"><%=rs("link")%></a>

Hvis du har en kolonne med forhandlerNavn kunne det være:
<a href="<%=rs("link")%>"><%=rs("forhandlerNavn")%></a>
Avatar billede riishoj Nybegynder
11. maj 2002 - 20:50 #8
Jeg er jo ikke sø knøvs til det her så jeg er nødt til at spørge

Vil det sige, at jeg opretter en kolonne i min db-tabel og kalder den f.eks. for link. I denne skriver jeg så de forskellige url'er som hører til de forskellige forhandlere i samme tabel. Jeg har en SQL som henter tabellen. Den ser sådan ud

strSQL = "SELECT ID, Bilmaerke, Model, Aargang, Km , Pris , Forhandler  FROM  biler WHERE"
strSQL = strSQL & " (Bilmaerke LIKE '%" & strBilmaerke & "%')"
strSQL = strSQL & " AND (Model LIKE '%" & strModel & "%')"
strSQL = strSQL & " AND (Aargang LIKE '%" & strAargang & "%')"
strSQL = strSQL & " AND (Km BETWEEN " & strKm & ")"
strSQL = strSQL & " AND (Pris BETWEEN " & strPris & ")"
strSQL = strSQL & " AND (Forhandler LIKE '%" & strForhandler & "%') ORDER BY Bilmaerke, Model"

og senere.......
.....
....
....
Response.Write "<td>" & rs("Forhandler") & "</td></tr>"

Er det så i ovennævnte jeg skal skrive det du foreslog??
Avatar billede eagleeye Praktikant
11. maj 2002 - 20:54 #9
Skal det være et til til hver bil eller et link til forhandeleren?
Avatar billede riishoj Nybegynder
11. maj 2002 - 20:56 #10
Et link til forhandleren
Avatar billede eagleeye Praktikant
11. maj 2002 - 21:03 #11
Arh så når man søger på en bil skriver den forhandler navnet ud og der vil du gerna havde et linkt til forhandleren?

Den SQL vælger biler ud. kolonne bør/skal så tilføjes i for tabellen.

Så må du lave en ekxtra SQL sætning som hendter linket:

Så skal der tilføjes en SQL som hendter linket.

strSQL = "SELEC link FROM for WHERE navn '=" & rs("Forhandler") & "'"
set linkRs = conn.execute(strSQL)
if linkRs.EOF then
  Response.Write "<td>" & rs("Forhandler") & "</td></tr>"
else
  Response.Write "<td><a href=""" & linkRs("link") & """>" & rs("Forhandler") & "</a></td></tr>"
end if


De tager også højde for hvis der ikke er angivet et link.
Avatar billede eagleeye Praktikant
11. maj 2002 - 21:04 #12
tilføjes i stedet for:
Response.Write "<td>" & rs("Forhandler") & "</td></tr>"
Avatar billede riishoj Nybegynder
11. maj 2002 - 21:07 #13
Øh, nu bliver det lidt kompliceret for mig. Kan du angive hvor jeg sææter det ind i scriptet

<% Response.Buffer = True %>
<html><head>
<title>Søgeresultat</title>
</head><body>
<center>
<%
' Henter værdien fra search4.htm
strBilmaerke = Trim(Request.Form("Bilmaerke"))
strModel = Trim(Request.Form("Model"))
strAargang = Trim(Request.Form("Aargang"))
strKm = Trim(Request.Form("Km"))
strPris = Trim(Request.Form("Pris"))
strForhandler = Trim(Request.Form("Forhandler"))



' Opbygger en dynamisk SQL streng
strSQL = "SELECT ID, Bilmaerke, Model, Aargang, Km , Pris , Forhandler  FROM  biler WHERE"
strSQL = strSQL & " (Bilmaerke LIKE '%" & strBilmaerke & "%')"
strSQL = strSQL & " AND (Model LIKE '%" & strModel & "%')"
strSQL = strSQL & " AND (Aargang LIKE '%" & strAargang & "%')"
strSQL = strSQL & " AND (Km BETWEEN " & strKm & ")"
strSQL = strSQL & " AND (Pris BETWEEN " & strPris & ")"
strSQL = strSQL & " AND (Forhandler LIKE '%" & strForhandler & "%') ORDER BY Bilmaerke, Model"

' Skaber DSN forbindelse til DBen
Set myConn = Server.CreateObject("ADODB.Connection")
myConn.Open "DSN=riishojwebsoftdkdsn"


' Skaber et recordset udfra SQL strengen
Set rs = myConn.Execute(strSQL)
If Not (rs.BOF Or rs.EOF) Then
    ' Hvis der er fundet poster på søgningen
    Response.Write "<h4 align=center><font face=Verdana>Her er resultatet af din søgning</font></h4><hr><br>"
    Response.Write "<table border=0>"
   
    Response.Write "<tr bgcolor=blue><th ><font color=white face=verdana size=2>Bilmærke</font></th><th>Model</th><th>Årgang</th><th>Km</th><th>Pris</th><th>Forhandler</th></tr>"
    Do While Not rs.EOF
      Response.Write "<tr bgcolor=red><td><font color=white>" & rs("Bilmaerke") & "</font></td>"
        Response.Write "<td>" & rs("Model") & "</td>"
        Response.Write "<td>" & rs("Aargang") & "</td>"
        Response.Write "<td>" & rs("Km") & "</td>"
        Response.Write "<td>" & rs("Pris") & "</td>"
        Response.Write "<td>" & rs("Forhandler") & "</td></tr>"



       
       
       


        rs.MoveNext
    Loop
    Response.Write "</table>"
Else
    ' Hvis der ikke er fundet poster på søgningen
    Response.Write "<p>Der er ikke fundet noget på denne søgning</p>"
End If

' Rydder op efter os
myConn.Close
Set myConn = Nothing
%>


</center>


</body>

</html>
Avatar billede eagleeye Praktikant
11. maj 2002 - 21:11 #14
Den her linie i loop'et:

      Response.Write "<td>" & rs("Forhandler") & "</td></tr>"


Skiftes ud med:
  'Find link til forhanleren...
  strSQL = "SELEC link FROM for WHERE navn '=" & rs("Forhandler") & "'"
  set linkRs = myConn.execute(strSQL)
  if linkRs.EOF then
    Response.Write "<td>" & rs("Forhandler") & "</td></tr>"
  else
    Response.Write "<td><a href=""" & linkRs("link") & """>" & rs("Forhandler") & "</a></td></tr>"
  end if

----

Er det for.navn som indeholder det samme som biler.forhandler ??
Avatar billede riishoj Nybegynder
11. maj 2002 - 21:18 #15
Forstår ikke dit sidste spørgsmål
Avatar billede eagleeye Praktikant
11. maj 2002 - 21:21 #16
Den finder linket ud fra denne SQL:
strSQL = "SELEC link FROM for WHERE navn '=" & rs("Forhandler") & "'"

Og så skal for.navn være lig biler.forhandler for at den finder linket.
Avatar billede riishoj Nybegynder
11. maj 2002 - 21:32 #17
Sorry. Forstår det stadig ikke.
Jeg har nu gjort følgende. Tilføjet en kolonne i tabellen "for" og kaldet den link. Ud for en af forhandlerne har jeg skrevet en url. Dernæst uploaded db'en til serveren. Desuden har jeg indsat det du skriver ovenover  i min søgefil kaldet search5.asp.
Når jeg kører forespørgslen fra search5.htm for jeg udskrevet hele tabellen "biler"  ganske som før, dvs. der er intet link på forhandleren.
Avatar billede eagleeye Praktikant
11. maj 2002 - 21:33 #18
Ja.. det er rigtigt. Har du skrevet et link?
Avatar billede riishoj Nybegynder
11. maj 2002 - 21:40 #19
Ja jeg har. Men skulle kolonnen link måske være lavet i tabellen biler i stedet?
Avatar billede eagleeye Praktikant
11. maj 2002 - 21:41 #20
Det jeg prøver at spørge om hvordan linkes biler til en forhandler... Der er kolonnen forhandler i tabellen biler som bliver ud skrevet..

Eks
Biler:
ID, bilmaerke, Aargang, forhandler
1, Toyota, 1999, Hansen Auto
2, Toyota, 1989, Hansen Auto

Tabellen For:
navn, link
Hansen Auto, www.hansenauto.dk


Så er for at finde linket skal for.navn være lig biler.forhandler..? Er det sådan eller ....
Avatar billede riishoj Nybegynder
11. maj 2002 - 21:42 #21
Nej det skal den ikke vel?
Avatar billede eagleeye Praktikant
11. maj 2002 - 21:43 #22
Du kan også ligge linket i biler så får du et link til forhandleren til hver Bil, det kan også være en fordel hvis man vil linke direkte til bilen hos forhandleren.
Avatar billede riishoj Nybegynder
11. maj 2002 - 21:50 #23
Tabellen "biler" indeholder følgende feltnavne:

ForhandlerId, Forhandler, ID,Bilmaerke, Model, Aargang, Km, Pris

Tabellen "for" indeholder følgende feltnavne:

link, forhandlerId, navn, username, password

Så, ja for.navn er lig med biler.Forhandler
Avatar billede eagleeye Praktikant
11. maj 2002 - 21:53 #24
hmm så skal den gerne finde et et link?

Du kan også prøve at lave SQL om til:
strSQL = "SELEC link FROM for WHERE forhandlerId =" & rs("forhandlerId")
Avatar billede eagleeye Praktikant
11. maj 2002 - 21:54 #25
Samt udvide den store SQL sætning til at tage forhandlerID med i SELECT'en:

strSQL = "SELECT ID, forhandlerID, Bilmaerke, Model, Aargang, Km , Pris , Forhandler  FROM  biler WHERE"
strSQL = strSQL & " (Bilmaerke LIKE '%" & strBilmaerke & "%')"
Avatar billede riishoj Nybegynder
11. maj 2002 - 22:19 #26
Den er helt gal. Jeg tror desværre, at jeg har fået mit gamle problem tilbage, nemlig at jeg ikke kan opdatere databasen på serveren. Når jeg går ind med ftp og kigger i db'en på serveren, så kan jeg ikke se den kolonne "link" som jeg har tilføjet. Så tror da pokker, at det ikke virker. Har haft det problem før. Skal derfor have en alvor snak med min udbyder.
Jeg vil afprøve dine forslag på min bærbare med PSW og se om det virker der.
Stopper for i dag, men skal nok komme tilbage i morgen og fortælle om det virkede. Håber så at du kigger forbi!
Avatar billede eagleeye Praktikant
11. maj 2002 - 22:22 #27
ok....Ja du må tage en snak med din udbyder :)
Avatar billede riishoj Nybegynder
12. maj 2002 - 11:07 #28
Min db er ok og jeg har næsten også fået det til at virke. Du manglede et T i SELECT i den ene SQL. Nå, det var en detalje. Problemet er nu at ganske vist er der link på forhandler når tabellen udskrives, men det ser mærkeligt ud og det virker ikke. Eksempelvis kan et link se sådan ud når jeg peger på det:

http://minwebserver/search5.asp#http://www.toyota.dk#

Den url jeg har skrevet i db'en hedder i dette tilfælde

http://www.toyota.dk
Avatar billede eagleeye Praktikant
12. maj 2002 - 11:30 #29
ja det ser noget underligt ud.... Bruger du FRAMES på din side?
Så kan du evt prøve at sætte target="_blank" ind, så skulle den åbne i et nyt vindue:

Response.Write "<td><a href=""" & linkRs("link") & """ target=""_blank"">" & rs("Forhandler") & "</a></td></tr>"
Avatar billede riishoj Nybegynder
12. maj 2002 - 11:38 #30
Jeg har løst en del af problemet. Huskede lige pludselig at tidligere svar ang. link og Access db. Problemet er at når man skriver en url i et felt, så sætter Access automatisk feltet til typen hyperlink og laver så de her #rundt om#. Hvorfor ved jeg ikke! Man skal ændre feltet til typen tekst, så forsvinder de og så virker linket!
Men de steder feltet er tomt, altså hvor jeg ikke har angivet en url, der fremkommer url på min webserver, og det er jo ikke så smart. Hvordan undgår jeg det?
Avatar billede eagleeye Praktikant
12. maj 2002 - 11:49 #31
Ok...
Hmm den if sætning jeg har lavet vr vist ikke så smart...  Prøv at ændre denne if sætning:
  if linkRs.EOF then


Til:
  if (linkRs.EOF) AND Len("" & linkRs("link") & "") = 0) then
Avatar billede eagleeye Praktikant
12. maj 2002 - 11:52 #32
arh det skal være være der mangler en (

Til:
  if (linkRs.EOF) AND (Len("" & linkRs("link") & "") = 0) then
Avatar billede riishoj Nybegynder
12. maj 2002 - 11:57 #33
Det giver desværre ingen ændring
Avatar billede eagleeye Praktikant
12. maj 2002 - 12:01 #34
er link helt tom hvis der ikke er noget link eller? der er ikke nogle ## rester tilbage?
Avatar billede eagleeye Praktikant
12. maj 2002 - 12:04 #35
# bruges normalt til at angive der kommer bogmærke efter, og foran et link til en html/asp fil. Hvis der ikke er noglet link tager den højst sansynligt den fil din er i eller roden på web serveren.

Ellers kan du prøve denne:
if (linkRs.EOF) AND (linkRs("link") = "") then
Avatar billede riishoj Nybegynder
12. maj 2002 - 12:04 #36
Nej feltet er helt tomt. Jeg har slettet kolonnen og oprettet den igen og så kun skrevet et link, nemlig http://www.toyota.dk
Avatar billede eagleeye Praktikant
12. maj 2002 - 12:09 #37
nu går det da også helt galt for mig det skal være OR ikke AND:

  if (linkRs.EOF) AND (Len("" & linkRs("link") & "") = 0) then
Avatar billede eagleeye Praktikant
12. maj 2002 - 12:09 #38
og så prøv er jeg lige igen hvor den er rettet :)

if (linkRs.EOF) OR (Len("" & linkRs("link") & "") = 0) then
Avatar billede riishoj Nybegynder
12. maj 2002 - 12:09 #39
Dit sidste forslag giver heller ingen ændring. Jeg er sluppet af med #. De tomme felter viser ikke noget med #, men http://www.minwebserver.search5.asp
Avatar billede riishoj Nybegynder
12. maj 2002 - 12:13 #40
Jeg var ikke hurtig nok. Dit allersidste forslag virkede, så nu er der styr på det.
Tusind tak! Vil du ikke have nogle point?
Avatar billede eagleeye Praktikant
12. maj 2002 - 12:16 #41
Det lyder godt :)

Ja jeg kan da lige lave et svar.
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