Avatar billede jansangill Nybegynder
15. december 2005 - 01:55 Der er 10 kommentarer og
1 løsning

huske id efter form

jeg er stødt på endnu et problem, som forhåbenligt er den sidste:

Mit problem er at det kode jeg har lavet og bøvlet med i lang tid, ikke tar den rigtige id med til tabel 3 forumID. Jeg har prøvet at sende noget fra min form hen til min indsætning i databasen via en hidden field. Men når jeg jeg tester det, giver den en fejl, der kommer simpelthen ikke en id med.

forumID'et skal være = med tabel 2 id. dvs, at når man skriver en reply på en bestemt emne, skal denne id følge med, så man kan loope all replys ud til den rigtige emne.

Jeg har også prøvet mange andre løsninger, men der looper den bare alle replys ud, uden at tage forbehold til hvilken emne der er skrevet på.

Har i en løsning på dette problem?

herunder er alt det information i skal bruge for at hjælpe mig (forhåbenligt:S)

min database, 3 tabeller:

tabel 1 ( bruger)
felt 1 = id (primær)
felt 2= bruger(tekst)
felt 3 =kode(tekst)

tabel 2(forum)

felt 1 = id (primær)
felt 2 = bruger (tal)
felt 3 = emne (tekst)
felt 4 = message(tekst)

tabel 3 (comment)
felt 1 = id(primær)
felt 2 = UserID (tal)
felt 3 = forumID(tal)

her er min form:

<table>
<form action="commentDB.asp" method="post">
<tr>
<td>comment</td>
<td><textarea name="reply" cols="60" rows="10"></textarea></td>
</tr>
<tr>
<td><input type="hidden" name="forumID" value="<% = Session("forumID") %>"></td>
<td><input name="doIt" type="submit" value="send" /></td>
</tr>
</form>
</table>


her er min insert into database:

replyID = Request.Form("forumID")
brugerID = cint(session("brugerID"))

SQL = "INSERT INTO comment (UserID,forumID,reply) VALUES ("&brugerID&","&replyID&",'" & Request("reply") & "')"


her looper jeg det ud:

set db = conn.execute("SELECT bruger.bruger, comment.reply FROM forum INNER JOIN (bruger INNER JOIN comment ON bruger.id = comment.UserID) ON forum.id = comment.forumID")

do while not db.eof
%>
<table width="100%">
    <tr>
        <td width="25%"><%=db("bruger")%></td>
        <td width="75%"><%=db("reply")%></td>
    </tr>
</table>

<%
db.moveNext
loop
%>
Avatar billede thesurfer Nybegynder
15. december 2005 - 02:52 #1
Hvorfor bruger du type="hidden" og Request.Form("forumID"), når du har Session("forumID") ..?

Du kan bare bruge:
replyID = Session("forumID")

Du skal muligvis konverterer værdi til et tal:

replyID = CInt(Session("forumID"))

HUSK:
En kommentar som "Men når jeg jeg tester det, giver den en fejl," kan vi ikke bruge til noget.. hvis du har tænkte at fortælle os at du får en fejl, kan du lige så godt fortælle os nøjagtigt hvilken fejl det er.
Dvs, Copy & Paste!

/theSurfer
Avatar billede jansangill Nybegynder
15. december 2005 - 07:58 #2
hehe ok the surfer:D

nu har jeg ændret det der du sagde, som jeg også selv har prøvet først, men den kommer altid med værdien 0 eller ingenting.Meningen er jo netop at den helst skal komme med id 69 hvis beskeden jeg replyer på er id 69.

Hvor er det jeg går galt, som sikker er mange steder.

<table>
<form action="commentDB.asp" method="post">
<tr>
<td>comment</td>
<td><textarea name="reply" cols="60" rows="10"></textarea></td>
</tr>
<tr>
<td><input type="hidden" name="forumID" value="<% = Session("forumID") %>"></td>
<td><input name="doIt" type="submit" value="send" /></td>
</tr>
</form>
</table>
Avatar billede jansangill Nybegynder
15. december 2005 - 07:59 #3
btw den giver selfølgelig ikke den fejl mere, da  jeg ændrede de ting.
Avatar billede jansangill Nybegynder
15. december 2005 - 08:01 #4
og glemte det her:

replyID = cint(session("forumID"))
brugerID = cint(session("brugerID"))

SQL = "INSERT INTO comment (UserID,forumID,reply) VALUES ("&brugerID&","&replyID&",'" & Request("reply") & "')"
Avatar billede jansangill Nybegynder
15. december 2005 - 09:03 #5
ja nu har jeg selv fundet ud af min dumhed, det eneste det krævede var selfølgelig bare at jeg satte min besked request(id)=seesion ("forumID") og så loope det ud sådan her:

set db = conn.execute("SELECT bruger.bruger, comment.reply FROM forum INNER JOIN (bruger INNER JOIN comment ON bruger.id = comment.UserID) ON forum.id = comment.forumID WHERE forum.id = "&ok&"")


theSurfer tak for den hjælp du gav mig, hvis du vil have dine point skal du bare sige til.
Avatar billede thesurfer Nybegynder
15. december 2005 - 09:09 #6
Hvordan ser din HTML kode ud, før man klikker på Reply-linket?
Det er garanteret der, at fejlen ligger..

Jeg forestiller mig, at det skal ske sådan her:

1)
Der er et indlæg, som man ønsker at svare på.
Man klikker på Reply-linket, som hedder: reply.asp?rid=<%=rs("post_id")%>

2)
På reply.asp aflæses værdien af rid fra querystring:
<td><input type="hidden" name="forumID" value="<%=request.querystring("rid")%>"></td>

3)
Formen submittes, når brugeren klikker på Send-knappen (som er submit), og oplysningerne sendes til commentDB.asp

4)
I commentDB.asp kontrolleres at indeholdet af feltet "forumID" ikke er tom, og samtidigt skal der kontrolleres, om formen er submittet, eller om brugeren selv har indtastet "commentDB.asp" i adresse-feltet.
F.eks.:

<%
Option Explicit ' Alle variabler SKAL(!) defineres/dimmes!
On error resume next ' forsæt selvom der er fejl -- skal kommenteres ved debugging!

if request.servervariables("request_method") = "POST" then
    ' brugeren har submittet formen

    ' ... kode her ...

    dim replyID
    replyID = CInt(request.form("forumID")) ' prøv på at konverterer forumID til et tal

    ' Det er vigtigt at undersøge, om forumID indeholder det den skal indeholde!
    ' Jeg går ud fra, at dine ID-værdier er af typen tal.
    ' Vi vil derfor prøve på at konverterer værdien til et tal..
    ' Hvis alt er OK, burde den returnerer fejlkoden 0.
    ' Hvis fejlkoden ikke er 0, er der fejl i forumID.

    if err.number = 0 then
        ' fejlkoden 0 betyder "alt er ok"
        ' fortsæt med koden:

        ' ... kode ...

    else
        ' fejlkoden er IKKE 0, dvs der er blevet manipuleret med forumID!

        ' vis evt en besked

    end if

end if

Det er også en god ide, at undersøge om man må tilføje indlæg til tråden, eller om den er låst, hvis den kan være det.

/theSurfer
Avatar billede jansangill Nybegynder
15. december 2005 - 09:17 #7
jeg kan lige forklare hvordan jeg gør det, så må du sige hvis dete r helt galt:

1) jeg har en <td width="75%"><a href="emneTopic1.asp?id=<%=db("id")%>"><%=db("emne")%></a></td> jeg looper ud som emne. Så når man trykke rpå det link kommer man til beskeden.

Når man er på den nye side gør jeg dette:

session("forumID") = cint(request("id"))
ok = session("forumID")

og laver sql sætningen:

set db = conn.execute("SELECT bruger.bruger, comment.reply FROM forum INNER JOIN (bruger INNER JOIN comment ON bruger.id = comment.UserID) ON forum.id = comment.forumID WHERE forum.id = "&ok&"")

min input til databsen er sådan her:

replyID = cint(session("forumID"))
brugerID = cint(session("brugerID"))

SQL = "INSERT INTO comment (UserID,forumID,reply) VALUES ("&brugerID&","&replyID&",'" & Request("reply") & "')"

min form  er sådan:

<table>
<form action="commentDB.asp" method="post">
<tr>
<td>comment</td>
<td><textarea name="reply" cols="60" rows="10"></textarea></td>
</tr>
<tr>
<td><input type="hidden" name="forumID" value="<% = Session("forumID") %>"></td>
<td><input name="doIt" type="submit" value="send" /></td>
</tr>
</form>

på denne måde får jeg tallene til at passe nu og reply's passer til beskeder.

Men det som du siger, er at jeg skal tilføje hvorvidt forumID = "" og om brugeren har trykket på send?
Avatar billede thesurfer Nybegynder
15. december 2005 - 09:18 #8
Et par råd:

- Lav altid mellemrum ved "&"
- De sidste "" er overflødige

Dvs:

= " & ok )

- Du kan bare selv smide et svar, og snup pointsne.

/theSurfer
Avatar billede jansangill Nybegynder
15. december 2005 - 09:19 #9
er det nødvendig at lave denne check på hvorvidt brugeren har trykket send?
Avatar billede thesurfer Nybegynder
15. december 2005 - 09:24 #10
Ja, det er meget vigtigt.

Du skal altid kontrollere, om alt er OK.

Det kan være forskellen på at oplysningerne bliver behandlet korrekt, eller dit script går ned..

Stol aldrig på brugeren! :-)

/theSurfer
Avatar billede jansangill Nybegynder
15. december 2005 - 09:25 #11
hehe ok, jeg prøver at lave den check så, mange tak for hjælpen:D
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