Toon posts:

[ASP] Wat is hier fout aan

Pagina: 1
Acties:
  • 101 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Op drinkyoppy.nl staat een Flash game waarbij je je score kunt toevoegen aan een database.

Hierbij wordt gebruikt gemaakt van een ASP script. Het spel heeft tijdens de testfase op een andere server gestaan en het toevoegen werkte prima met het onderstaande script:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<%
Session.LCID = 2067
Set Connection= Server.CreateObject ("ADODB.connection")
Connection.Provider= "Microsoft.Jet.OLEDB.4.0"
Connection.Properties ("Data Source")= Server.MapPath ("db/scorez.mdb")
Connection.Open

Dim RScores
Set RScores=Server.CreateObject("ADODB.recordset")
    RScores.open "SELECT * FROM SCORE;", Connection,3


naam = request.form("naam")
naam = replace(naam, "'","''")
score = request.form("score")
xtraz = request.form("xtraz")
bericht = request.form("bericht")
bericht = replace(bericht, "'","''")
datum = FormatDateTime(now(),vbgeneralDate)
datum = dateadd("h", 6,datum)


connection.execute "insert into Score(Naam,Score,Datum,Bericht,Xtraz) values ('"&naam&"',"&score&",'"&datum&"','"&bericht&"',"&xtraz&");"

RScores.Close
Set RScores=Nothing
connection.close
Set connection = nothing

response.write"ok=ok"
%>

De huidige server ondersteund geen virtuele path aanduiding, dus is de code van het ASP script aangepast. En nu werkt het dus niet meer.

Omdat het Flash is krijg je geen foutmelding, dus dat maakt het extra gecompliceerd om de fout te 8erhalen.

Dit is de aangepaste code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<%
Session.LCID = 2067

Dim my_Conn, RScores

ConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\www\vandodewaard.net\database\scorez.mdb"

set my_Conn = Server.CreateObject("ADODB.Connection")

my_Conn.Open ConnString

Set RScores=Server.CreateObject("ADODB.Connection")

RScores.open "SELECT * FROM SCORE;", my_Conn, 3

naam = request.form("naam")
naam = replace(naam, "'","''")
score = request.form("score")
xtraz = request.form("xtraz")
bericht = request.form("bericht")
bericht = replace(bericht, "'","''")
datum = FormatDateTime(now(),vbgeneralDate)
datum = dateadd("h", 6,datum)

my_Conn.execute "insert into Score(Naam,Score,Datum,Bericht,Xtraz) values ('"&naam&"',"&score&",'"&datum&"','"&bericht&"',"&xtraz&");"

RScores.Close
Set RScores=Nothing

my_Conn.close
Set my_Conn = nothing

response.write"ok=ok"
%>

Ik hoop dat iemand mij kan helpen :).

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:11
Wat werkt er nu niet meer? Het toevoegen? Iets anders? ...

https://fgheysels.github.io/


Verwijderd

hmm
; mogen we weg in een query...
maar verder is het quite impossible om te zien wat er niet werkt...

kan vanalles zijn....

Verwijderd

Topicstarter
Op dinsdag 11 juni 2002 15:13 schreef whoami het volgende:
Wat werkt er nu niet meer? Het toevoegen? Iets anders? ...
Het toevoegen aan de database inderdaad.

  • Devilfish
  • Registratie: Augustus 2001
  • Laatst online: 05-09 16:08
maak eens een simpel formulier en laat die naar dit script verwijzen

  • KoeKk
  • Registratie: September 2000
  • Laatst online: 30-08 21:36
Wat zijn de veld types van Score(Naam,Score,Datum,Bericht,Xtraz)?

Als je ' om de datum hebt en je probeerd dat in een datum veld te stoppen gaat het fout (tip: doe i.p.v. ' # omheen ;))

Verwijderd

Topicstarter
Op dinsdag 11 juni 2002 15:19 schreef KoeKk het volgende:
Wat zijn de veld types van Score(Naam,Score,Datum,Bericht,Xtraz)?
Wat bedoel je met veld types? (Sorry, maar ik ben 100% geclassificeerd ASP n00b :P. Op een beetje basis kennis na dan)
Als je ' om de datum hebt en je probeerd dat in een datum veld te stoppen gaat het fout (tip: doe i.p.v. ' # omheen ;))
Dus je bedoelt zoiets:
code:
1
my_Conn.execute "insert into Score(Naam,Score,Datum,Bericht,Xtraz) values ('"&naam&"',"&score&",#"&datum&"#,'"&bericht&"',"&xtraz&");"

Of begrijp ik je nu helemaal verkeerd?

Verwijderd

Topicstarter
Op dinsdag 11 juni 2002 15:18 schreef Devilfish het volgende:
maak eens een simpel formulier en laat die naar dit script verwijzen
Dat is idd wel een wijs plan, maar dan moet ik wel weten wat het Flash bestandje precies doet. Probleem is dat iemand anders die gemaakt heeft en die is op dit moment niet beschikbaar.

  • KoeKk
  • Registratie: September 2000
  • Laatst online: 30-08 21:36
Op dinsdag 11 juni 2002 15:23 schreef some1else het volgende:

[..]

Wat bedoel je met veld types? (Sorry, maar ik ben 100% geclassificeerd ASP n00b :P. Op een beetje basis kennis na dan)
Met veld types bedoel ik je data types in de database, of het een tekst, memo, nummeriek enz veld is
[..]

Dus je bedoelt zoiets:
code:
1
my_Conn.execute "insert into Score(Naam,Score,Datum,Bericht,Xtraz) values ('"&naam&"',"&score&",#"&datum&"#,'"&bericht&"',"&xtraz&");"

Of begrijp ik je nu helemaal verkeerd?
Jij begrijpt me perfect! :D

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Dat kun je ook wel uit de ASP achterhalen... Het form moet de velden naam, score, xtraz en bericht hebben

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • KoeKk
  • Registratie: September 2000
  • Laatst online: 30-08 21:36
Op dinsdag 11 juni 2002 15:29 schreef Janoz het volgende:
Dat kun je ook wel uit de ASP achterhalen... Het form moet de velden naam, score, xtraz en bericht hebben
idd, wat some1else kan doen is:
code:
1
2
3
4
5
6
7
8
9
10
11
12
naam = replace(request.form("naam"), "'","''")
score = request.form("score")
xtraz = request.form("xtraz")
bericht = replace(request.form("bericht"), "'","''")
datum = FormatDateTime(now(),vbgeneralDate)
datum = dateadd("h", 6,datum)

Response.Write("Naam: " & naam & " Type: " & VarType(naam) & "<br>")
Response.Write("score: " & score & " Type: " & VarType(score) & "<br>")
Response.Write("xtraz: " & xtraz & " Type: " & VarType(xtraz) & "<br>")
Response.Write("bericht: " & bericht & " Type: " & VarType(bericht) & "<br>")
Response.Write("datum: " & datum & " Type: " & VarType(datum) & "<br>")

En dan kijken of wat je eruit krijgt er ook uit hoort te komen... + het type is een getal, de verklarende lijst staat hier

Verwijderd

Topicstarter
Op dinsdag 11 juni 2002 15:27 schreef KoeKk het volgende:
Met veld types bedoel ik je data types in de database, of het een tekst, memo, nummeriek enz veld is
Volgens mij zowel tekst als nummeriek.
Jij begrijpt me perfect! :D
Dat is mooi, maar helaas werkt het niet.
Op dinsdag 11 juni 2002 15:29 schreef Janoz het volgende:
Dat kun je ook wel uit de ASP achterhalen... Het form moet de velden naam, score, xtraz en bericht hebben
Daar heb je gelijk in. Ik zal later op de middag wel ff een form maken.

  • KoeKk
  • Registratie: September 2000
  • Laatst online: 30-08 21:36
Op dinsdag 11 juni 2002 15:39 schreef some1else het volgende:

[..]

Volgens mij zowel tekst als nummeriek.
[..]

Dat is mooi, maar helaas werkt het niet.
[..]

Daar heb je gelijk in. Ik zal later op de middag wel ff een form maken.
Om tekst/memo velden ze je in sql '
Om Numerieke velden zet je NIETS
Om datum velden zet je #,

Maar goed, probeer eerst een form te maken om zo handmatig waardes in te kunnen voeren, dan krijgen we ook eindelijk een fatsoenlijke foutmelding ;) :D

Verwijderd

Topicstarter
Even voor de duidelijkheid. Wanneer de score is toegevoegd aan de database krijg je alleen een melding dat dat daadwerkelijk is gebeurd. Je hebt sowieso de mogelijkheid om alle scores te bekijken op een andere pagina. Deze pagina bevat het volgende script (die weliswaar ook al niet werkt).
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<%
Session.LCID=3081
Session.Abandon
Response.Expires = -1440
Response.CacheControl = "private"
Response.buffer = true
Response.CacheControl = "no-cache"
Response.AddHeader "Pragma", "no-cache"
Response.Expires = -1

Dim my_Conn, RScores

ConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\www\vandodewaard.net\database\scorez.mdb"

set my_Conn = Server.CreateObject("ADODB.Connection")

my_Conn.Open ConnString

Set RScores=Server.CreateObject("ADODB.recordset")
    RSHighscores.Open "SELECT * FROM SCORE ORDER BY XTRAZ;", my_Conn, 3
hoeveelste = 1
Aantal = RsHighscores.recordcount
response.write"<b>TOP 50 van "&aantal&" deelnemers.</b><table border=0><tr><td><p>Nr. | </td><td><p>Naam | </td><td><p>Score | </td><td><p>Bericht</td></td>"

Do While RSHighscores.EOF=False and hoeveelste <=50
score = RSHighscores.fields("Score")
bericht = RSHighscores.fields("Bericht")
response.write"<tr><td>"&hoeveelste&"</td><td>" & Server.htmlencode(RSHighscores.fields("Naam")) & "</td><td>" & score
response.write"</td><td>"& bericht &"</td></tr>"
hoeveelste = hoeveelste + 1
RSHighscores.movenext
Loop

RSHighscores.close
Set RSHighscores=nothing

my_Conn.close
Set my_Conn=nothing
%>

  • KoeKk
  • Registratie: September 2000
  • Laatst online: 30-08 21:36
Op dinsdag 11 juni 2002 15:46 schreef some1else het volgende:
Even voor de duidelijkheid. Wanneer de score is toegevoegd aan de database krijg je alleen een melding dat dat daadwerkelijk is gebeurd. Je hebt sowieso de mogelijkheid om alle scores te bekijken op een andere pagina. Deze pagina bevat het volgende script (die weliswaar ook al niet werkt).
code:
1
<%Response.Write("Knip!")%>
Is dat ook in Flash? Mischien klopt dan je db pad niet... :P
Maar we kunnen wel blijven gokken en dat zal niet echt opschieten, dus ik wacht wel ff op een fout melding... :)

Verwijderd

Topicstarter
Ik ben bang dat dat dan wel vanavond gaat worden, want ik moet nu weg.

  • KoeKk
  • Registratie: September 2000
  • Laatst online: 30-08 21:36
k, dan check ik dit topic vanavond nog wel een keer :)

btw: grappige site trouwens :D, om sommige stukkjes lag ik echt in een deuk :D

Verwijderd

Topicstarter
Ja dankje :) Het is ook een erg succesvolle site. Maar goed, ik kom er niet uit met dat form. Ik heb hier een standaard ASP script van mijn hostingprovider om te schrijven naar de database. Deze is gedeeltelijk al aangepast.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DBQ=d:\www\vandodewaard.net\database\scorez.mdb;DRIVER={Microsoft Access Driver (*.mdb)}"

Set DTBrs = Server.CreateObject("ADODB.RecordSet")
DTBrs.Open "SELECT * FROM SCORE", Conn, 3, 3

' Zoek het juiste record
Do while not DTBrs("PRIMAIRYKEY") = anykey and not DTBrs.EOF
  DTBrs.movenext
Loop

' Als het juiste record is gevonden
DTBrs("VELDNAAM") = "gegevens"
DTBrs("VELDNAAM2") = "gegevens"
DTBrs.Update
%>
<%
DTBrs.Addnew
DTBrs("VELDNAAM") = "gegevens"
DTBrs("VELDNAAM2") = "gegevens"
DTBrs.Update
%>
<%
DTBrs.Close
Conn.Close
Set DTBrs = nothing
Set Conn = nothing
%>

Het volgende stukje moet in de bovenstaande code verwerkt worden en dan zou het wél moeten werken lijkt me.
code:
1
2
3
4
5
6
7
8
naam = replace(request.form("naam"), "'","''")
score = request.form("score")
xtraz = request.form("xtraz")
bericht = replace(request.form("bericht"), "'","''")
datum = FormatDateTime(now(),vbgeneralDate)
datum = dateadd("h", 6,datum)

Conn.execute "insert into Score(Naam,Score,Datum,Bericht) values ('"&naam&"',"&score&",#"&datum&"#,'"&bericht&"')"

Hoe kan ik dit het beste inpassen?

  • KoeKk
  • Registratie: September 2000
  • Laatst online: 30-08 21:36
Yes, okee...

Wat je moet gaan doen om te testen is dus (zoals eerder gezegd) even een formuliertje maken, informatie invullen en submiten. Je makt dan een pagina waarin je checkt wat je terug krijgt door dit te doen:
code:
1
2
3
For Each Item in Request.Form
  Response.Write "Form element " & Item & " bevat: " & Request.Form(Item) & "<br>"
Next

Nu krijg je een overzichtje met wat er allemaal in het formulier zit wat net gesubmit is. Klopt deze informatie, dan zou je kunnen proberen om dit te submitten in je db, werkt het niet dan krijg je een error, post die hier en we lossen het op ;) :D
code:
1
2
3
4
5
6
'Eerst halen we de informatie op
naam = replace(request.form("naam"), "'","''")
score = request.form("score")
xtraz = request.form("xtraz")
bericht = replace(request.form("bericht"), "'","''")
datum = FormatDateTime(now(),vbgeneralDate)

Je hoeft niet perse FormatDateTime() te doen, als je Now() aanroept is hij standaard vbGeneralDate dacht ik
code:
1
2
'Nu bewreken we de datum zaols we het hebben willen.
datum = dateadd("h", 6,datum)

Ik zou ook wat checks erin bouwen op o.a. ongeldige tekens, of de score niet *enorm* hoog is e.d.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
'SQL string
sSQL = "INSERT INTO Score (" &_
     "Naam, " &_
     "Score, " &_
     "Datum, " &_
     "Bericht, " &_
     "Xtraz)" &_
     "VALUES (" &_
     "'" & naam & ", " &_
     score & ", " &_
     "#" & datum & "#, " &_
     "'" & bericht & "', " &_
     "'" & xtraz & "')"
db = Server.CreateObject("ADODB.Connection")
db.Open(DBQ=D:\www\vandodewaard.net\database\scorez.mdb;DRIVER={Microsoft Access Driver (*.mdb)}")

db.Execute(sSQL)

Als laatste dumpen we het in je db :)

Verwijderd

Topicstarter
Ik stel je hulp uiteraard zeer op prijs, maar ik ben bang dat ik nu helemaal de weg kwijt ben :?

Dat onderstaande scriptje van je. Is dat een vervanger voor het waardeloze scriptje van mij? Zo ja, deze werkt dus ook al niet. SQL wordt ook niet ondersteund in mijn geval.

Ik hoop dat je me nog iets verder op weg kunt helpen.

  • KoeKk
  • Registratie: September 2000
  • Laatst online: 30-08 21:36
het eerste code dingetje is een testje of welke waardes uit je formulier komen.

Het volgende stuk is zoals ik zelf ze in een database zou stoppen, maar ik moet hierbij vermelden dat ik nooit met flash werk. Ik heb dus geen idee hoe de waardes die uit je spelletje komen 'doorgegeven' worden naar je asp pagina (of het via GET of POST gaat).

Het onderste stuk code zou moeten werken mits alle formulier namen (request.form("formulier_naam")) exact hetzelfde zijn. Als jij _zeker_ weet dat ze hetzelfde zijn zou het moeten werken.

Het feitelijke probleem waar ik tegenaan loop is dat je geen foutmelding krijgt...

Aangezien het op een andere server wel heeft gewerkt lijkt mij dat er iets mis is met je database connectie, maar dan zou je een foutmelding op je scherm moeten krijgen, behalve als je niet 'uit' het spel gaat (je niet naar de asp pagina doorgestuurd wordt).

Heb je het al geprobeerd om een test formulier te maken en zou waardes in je database te krijgen?

  • KoeKk
  • Registratie: September 2000
  • Laatst online: 30-08 21:36
BTW bij het testen van http://www.vandodewaard.net/yoppy/style/highscores.asp

kreeg ik de volgende foutmelding:
code:
1
2
3
4
5
Microsoft VBScript runtime error '800a01a8' 

Object required: '' 

/yoppy/style/highscores.asp, line 29

Vaak kijkt dit op verkeerde rechten op je database, dat bijvoorbeeld IUSR_machinenaam geen schrijfrechten heeft in de directory waar je db staat, dat zou ik nog ff goed checken...

Verwijderd

Topicstarter
Om een testformulier te maken lijkt het me toch handig om te zien hoe het in de Flash code geregeld is, maar daar heb ik momenteel geen beschikking over.

Het heeft inderdaad wel gewerkt, dus het enige probleem is idd de database connectie. Ik heb deze omgezet van virtual naar static en nu werkt het niet meer.

Wat betreft de schrijfrechten: de database staat in een speciale directory die de rechten heeft om schrijven toe te staan.

  • KoeKk
  • Registratie: September 2000
  • Laatst online: 30-08 21:36
Op dinsdag 11 juni 2002 20:39 schreef some1else het volgende:
Het heeft inderdaad wel gewerkt, dus het enige probleem is idd de database connectie. Ik heb deze omgezet van virtual naar static en nu werkt het niet meer.
Okee, dus de rechten zijn het niet, als je hem nu weer eens terug zet naar virtual, ik neem aan dat je daarmee Server.MapPath("pad naar db") bedoeld.

Als het virtual wel werkt maar dat wil je niet kan je natuurlijk ook je virulele dir wegschrijven naar het scherm:
code:
1
Response.Write Server.MapPath("pad naar db")

Dan heb je het correcte pad op je scherm staan en dat hoef je enkel nog te copy & pasten :)

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Op dinsdag 11 juni 2002 20:22 schreef KoeKk het volgende:
code:
1
2
3
4
5
Microsoft VBScript runtime error '800a01a8' 

Object required: '' 

/yoppy/style/highscores.asp, line 29

Vaak kijkt dit op verkeerde rechten op je database, dat bijvoorbeeld IUSR_machinenaam geen schrijfrechten heeft in de directory waar je db staat, dat zou ik nog ff goed checken...
Nou dit duidt er meer op dat er een object in je asp code niet bestaat (bijv. connectie- of recordset-object).
En als ik even in je code kijk zie ik dat je wat foutjes maakt in je variabele namen (RScores/RSHighscores). Kijk daar eens naar.

TIP: gebruik Option Explicit om zulke kleine foutjes tegen te gaan.

Today's subliminal thought is:


Verwijderd

Topicstarter
Op dinsdag 11 juni 2002 21:13 schreef KoeKk het volgende:
Okee, dus de rechten zijn het niet, als je hem nu weer eens terug zet naar virtual, ik neem aan dat je daarmee Server.MapPath("pad naar db") bedoeld.

Als het virtual wel werkt maar dat wil je niet kan je natuurlijk ook je virulele dir wegschrijven naar het scherm:
code:
1
Response.Write Server.MapPath("pad naar db")

Dan heb je het correcte pad op je scherm staan en dat hoef je enkel nog te copy & pasten :)
Virtual werkt dus niet op de huidige server. Dat was juist het probleem. Maar als ik het goed begrijp kan ik dus
code:
1
Connection.Properties ("Data Source")= Server.MapPath ("db/scorez.mdb")

vervangen door
code:
1
Response.Write Server.MapPath("d:\www\vandodewaard.net\database\scorez.mdb")

:?

Verwijderd

Hallo allemaal....

ik ben maurice, ik heb de ASP & Flash code geschreven...

laat ik eerst ff melden dat er met de originele code
helemaal maar dan ook helemaal niets mis is... totdat onze
geliefde some1else 't in handen kreeg... LOL

kijk jullie hebben de hele source al... fijn |:(
't enige probleem waar we mee zitten is eigenlijk het feit
dat de database in het script wordt aangesproken via een
virtual path...
de vraag is hoe krijgen we 't naar een static path ... ?

ik heb er al ffies over getobt maar kom er niet uit heheh :'(

ps. ik heb de database getest op een andere server en dat
werkte 100% :)

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 09:41

gorgi_19

Kruimeltjes zijn weer op :9

Ik weet niet hoe jullie je (virtuele) directories ingedeeld hebben, maar ik vind het sowieso opvallend dat de database bij het virtuele pad in de folder db staat en in het statische pad in de folder database.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

kan ik begrijpen idd, maar het scrippie waar db in staat
komt nog van de andere server af, waar ik alles uit getest
heb. daar was ik verplicht de db directory te gebruiken
voor databases.
en op de server die we voor 't publiek gebruiken moet t
weer anders, vandaar :)

op de drinkyoppy server hebben we trouwens geen virtuele
dir's ....

  • KoeKk
  • Registratie: September 2000
  • Laatst online: 30-08 21:36
Op dinsdag 11 juni 2002 22:55 schreef some1else het volgende:

[..]

Virtual werkt dus niet op de huidige server. Dat was juist het probleem. Maar als ik het goed begrijp kan ik dus
code:
1
Connection.Properties ("Data Source")= Server.MapPath ("db/scorez.mdb")

vervangen door
code:
1
Response.Write Server.MapPath("d:\www\vandodewaard.net\database\scorez.mdb")

:?
Nee, met die Response.Write krijg je het pad naar je database op het scherm, die copier je dan naar het stukje waar je db connectie object aangemaakt wordt :).

zo bedoel ik het:
Maak een niet asp bestand (test_db.asp)
stop hetvolgende erin:
code:
1
2
3
4
<%
'Schrijf het volledige database pad naar de browser
Response.Write Server.MapPath("./pad_naar_de_db/databse.mdb")
%>

Nu krijg je gewoon op het scherm:
X:\pad_naar\de_db\database.mdb

en die gebruik je in
ConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=X:\pad_naar\de_db\database.mdb"

Nu weet je zeker dat je pad klopt :)

Wat mij ook opvalt is dat je een Record set gebruikt (RScores) waar verder niets mee gebeurd, je doet een select maar er wordt verder niets mee gedaan (voor zover ik kan zien) die kan je dus net zo goed weglaten.
Pagina: 1