Avatar billede steen_hansen Forsker
15. oktober 2004 - 23:59 Der er 23 kommentarer og
1 løsning

Tjek om indtastet ID allerede findes

Jeg er ved at lave en dynamisk menu, hvor brugeren skal indtaste en prioritet på menupunktet. Det øverste punkt skal have den mindste værdi (f.ek. 1). Det næstøverste punkt får så værdien 2, og så fremdeles.

Hvordan tjekkes det, at et allerede benyttet ID ikke indtastes igen? Håber I forstår, ellers spørg.
Avatar billede steen_hansen Forsker
16. oktober 2004 - 00:12 #1
Alle menupunkterne bliver hevet ud v.hj.a. en løkke, og det er RS("priorityID"), der ikke må forekomme 2 gange:



Brugeren indtaster oplysningerne i mainpriority:

<input type="text" name="mainpriority" size="<%=Size3%>" class="input1">



Der skal så tjekkes, at den værdi, som brugeren indtaster, ikke allerede findes i databasen:

<input type="text" name="mainpriority" size="<%=Size3%>" value ="<%=RS("priorityID")%>" class="input1">
Avatar billede rbl Praktikant
16. oktober 2004 - 00:24 #2
På den side hvor du gemmer prioriteten, skal du have følgende kode:

prioritet = request("priorityID")
set antal = conn.execute("select count(id) as antal from menumain where priorityID =" & prioritet)
if antal("antal") > 0 then
  'fejlbesked
else
  'gem prioriteten
end if
Avatar billede steen_hansen Forsker
16. oktober 2004 - 00:27 #3
YO! :)

Det scriptet laver, er vel at tælle antallet af poster?
Avatar billede steen_hansen Forsker
16. oktober 2004 - 00:30 #4
Det skulle jo helst tjekke, at hvis brugeren indtaster værdien 10, at den så ikke allerede er blevet tildelt til et andet menupunkt.
Avatar billede rbl Praktikant
16. oktober 2004 - 00:30 #5
ja, det tæller antallet af poster, der har den specifikke priorityID.

Hvis antallet er større end 0, så findes prioriteten i forvejen.
Avatar billede steen_hansen Forsker
16. oktober 2004 - 00:31 #6
Avatar billede steen_hansen Forsker
16. oktober 2004 - 00:31 #7
Aahhh, det er da klart! :)

Prøver lige
Avatar billede steen_hansen Forsker
16. oktober 2004 - 00:43 #8
Jeg får en fejl:

Microsoft JET Database Engine error '80040e14'

Syntax error (missing operator) in query expression 'priorityID ='.

/borch/admin/menus/updatemain.asp, line 17


Og her er koden:

<!-- #include virtual="/borch/includes/conn.asp" -->
<%
id = Request("ID")
vName = Request("nameofmainmenu")
vPriority = Request("mainpriority")
ToDo = Request("ToDo")

If ToDo = "updatemain" Then
    Conn.Execute("UPDATE menumain SET mainmenu='" & vName & "', priorityID=" & vPriority & " WHERE id=" & id)
    Response.Redirect("editmain.asp?status=1&editmain=" & vName & "")
ElseIf ToDo = "delete" Then
    Conn.Execute "DELETE FROM menumain WHERE ID = " & id
    Conn.Execute "DELETE FROM menusub WHERE parent = " & id
    Response.Redirect("editmain.asp?status=2&deletedmainmenu=" & vName & "")
Else
    Response.Write priorityID
    ChechPriorityID = Request("priorityID")
    SET antal = Conn.Execute("SELECT count(id) AS antal FROM menumain WHERE priorityID =" & ChechPriorityID)
    If antal("antal") > 0 Then
    Response.Write "Denne ID er allerede taget" 'fejlbesked
    Else
        Conn.Execute("INSERT INTO menumain (mainmenu, priorityID) VALUES('" & vName & "', " & vPriority & ")")
    End If

    Response.Redirect("editmain.asp?status=3&newmainmenu=" & vName & "")
End If
Conn.Close
%>
Avatar billede steen_hansen Forsker
16. oktober 2004 - 00:44 #9
Sorry:

<!-- #include virtual="/borch/includes/conn.asp" -->
<%
id = Request("ID")
vName = Request("nameofmainmenu")
vPriority = Request("mainpriority")
ToDo = Request("ToDo")

If ToDo = "updatemain" Then
    Conn.Execute("UPDATE menumain SET mainmenu='" & vName & "', priorityID=" & vPriority & " WHERE id=" & id)
    Response.Redirect("editmain.asp?status=1&editmain=" & vName & "")
ElseIf ToDo = "delete" Then
    Conn.Execute "DELETE FROM menumain WHERE ID = " & id
    Conn.Execute "DELETE FROM menusub WHERE parent = " & id
    Response.Redirect("editmain.asp?status=2&deletedmainmenu=" & vName & "")
Else
    CheckPriorityID = Request("priorityID")
    SET antal = Conn.Execute("SELECT count(id) AS antal FROM menumain WHERE priorityID =" & CheckPriorityID)
    If antal("antal") > 0 Then
    Response.Write "Denne ID er allerede taget" 'fejlbesked
    Else
        Conn.Execute("INSERT INTO menumain (mainmenu, priorityID) VALUES('" & vName & "', " & vPriority & ")")
    End If

    Response.Redirect("editmain.asp?status=3&newmainmenu=" & vName & "")
End If
Conn.Close
%>
Avatar billede rbl Praktikant
16. oktober 2004 - 00:52 #10
Prøv:

<!-- #include virtual="/borch/includes/conn.asp" -->
<%
id = Request("ID")
vName = Request("nameofmainmenu")
vPriority = Request("mainpriority")
ToDo = Request("ToDo")

If ToDo = "updatemain" Then
    SET antal = Conn.Execute("SELECT count(id) AS antal FROM menumain WHERE priorityID =" & vPriority)
    If antal("antal") > 0 Then
        Response.Write "Denne ID er allerede taget" 'fejlbesked
    Else
        Conn.Execute("UPDATE menumain SET mainmenu='" & vName & "', priorityID=" & vPriority & " WHERE id=" & id)
        Response.Redirect("editmain.asp?status=1&editmain=" & vName & "")
    end if
ElseIf ToDo = "delete" Then
    Conn.Execute "DELETE FROM menumain WHERE ID = " & id
    Conn.Execute "DELETE FROM menusub WHERE parent = " & id
    Response.Redirect("editmain.asp?status=2&deletedmainmenu=" & vName & "")
Else
    SET antal = Conn.Execute("SELECT count(id) AS antal FROM menumain WHERE priorityID =" & vPriority)
    If antal("antal") > 0 Then
        Response.Write "Denne ID er allerede taget" 'fejlbesked
    Else
        Conn.Execute("INSERT INTO menumain (mainmenu, priorityID) VALUES('" & vName & "', " & vPriority & ")")
    End If

    Response.Redirect("editmain.asp?status=3&newmainmenu=" & vName & "")
End If
Conn.Close
%>
Avatar billede rbl Praktikant
16. oktober 2004 - 00:54 #11
En lille ting:

Din Response.Write "Denne ID er allerede taget" vil aldrig blive vist, da den redirecter til en anden side med det samme. Istedet kan du måske bruge:
Response.Redirect("editmain.asp?status=4")

hvor status=4 giver fejlmeddelelsen på editmain.asp
Avatar billede steen_hansen Forsker
16. oktober 2004 - 00:56 #12
S'føli! Smider den lige ind.
Avatar billede rbl Praktikant
16. oktober 2004 - 00:57 #13
ok, det bliver vist ved en update, men det er stadig bedre at vise fejlbeskeden på editmain.asp
Avatar billede steen_hansen Forsker
16. oktober 2004 - 00:59 #14
Det kan vel også blive ved oprettelse, hvis jeg laver det på denne måde:

<!-- #include virtual="/borch/includes/conn.asp" -->
<%
id = Request("ID")
vName = Request("nameofmainmenu")
vPriority = Request("mainpriority")
ToDo = Request("ToDo")

If ToDo = "updatemain" Then
    SET antal = Conn.Execute("SELECT count(id) AS antal FROM menumain WHERE priorityID =" & vPriority)
    If antal("antal") > 0 Then
        Response.Write "Denne ID er allerede taget" 'fejlbesked
    Else
        Conn.Execute("UPDATE menumain SET mainmenu='" & vName & "', priorityID=" & vPriority & " WHERE id=" & id)
        Response.Redirect("editmain.asp?status=1&editmain=" & vName & "")
    End If
ElseIf ToDo = "delete" Then
    Conn.Execute "DELETE FROM menumain WHERE ID = " & id
    Conn.Execute "DELETE FROM menusub WHERE parent = " & id
    Response.Redirect("editmain.asp?status=2&deletedmainmenu=" & vName & "")
Else
    SET antal = Conn.Execute("SELECT count(id) AS antal FROM menumain WHERE priorityID =" & vPriority)
    If antal("antal") > 0 Then
        Response.Redirect("editmain.asp?status=4")
    Else
        Conn.Execute("INSERT INTO menumain (mainmenu, priorityID) VALUES('" & vName & "', " & vPriority & ")")
    End If

    Response.Redirect("editmain.asp?status=3&newmainmenu=" & vName & "")
End If
Conn.Close
%>


- og på editmain.asp udskriver fejlen, hvis status=4?
Avatar billede steen_hansen Forsker
16. oktober 2004 - 01:00 #15
Det bør jo også tjekkes ved update, når jeg tænker efter :)
Avatar billede rbl Praktikant
16. oktober 2004 - 01:02 #16
hov, jeg har sgu lavet en fejl

linien:
SET antal = Conn.Execute("SELECT count(id) AS antal FROM menumain WHERE priorityID =" & vPriority)

skal skiftes ud med:
SET antal = Conn.Execute("SELECT count(id) AS antal FROM menumain WHERE priorityID =" & vPriority & " and id <> " & id)

SKal skiftes begge steder. Hvis overskriften har prioriteten i forvejen, skal den selvfølgelig have lov til at gemme alligevel.
Avatar billede steen_hansen Forsker
16. oktober 2004 - 01:05 #17
Microsoft JET Database Engine error '80040e14'

Syntax error (missing operator) in query expression 'priorityID =10 and id <>'.

/borch/admin/menus/updatemain.asp, line 21



Linie21:
SET antal = Conn.Execute("SELECT count(id) AS antal FROM menumain WHERE priorityID =" & vPriority & " AND id <> " & id)
Avatar billede steen_hansen Forsker
16. oktober 2004 - 01:06 #18
Den mangler den sidste id?

AND id <> " & id)
Avatar billede rbl Praktikant
16. oktober 2004 - 01:08 #19
Hmm, efter nærmere omtanke, var det kun ved "update" linien skulle skiftes.

Ved "Else" skal du skifte tilbage igen. Jeg er vist ved at være lidt træt i hovedet :-)
Avatar billede steen_hansen Forsker
16. oktober 2004 - 01:09 #20
Så er vi to :oD

Prøver igen :)
Avatar billede steen_hansen Forsker
16. oktober 2004 - 01:10 #21
Så er den der sq! Smid et svar :)
Avatar billede rbl Praktikant
16. oktober 2004 - 01:11 #22
svar
Avatar billede steen_hansen Forsker
16. oktober 2004 - 01:12 #23
Takker igen-igen :)

God weekend, og sov godt :)
Avatar billede rbl Praktikant
16. oktober 2004 - 01:13 #24
i lige måde :-)
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