SanjiMedlem sedan juli 2009355 inlägg Nu när jag har löst sidan för att hantera menyalternativ, så är det dags att ge sig på själva presentationen av menyn. Originalkoden gjorde inget mer än att skriva ut menyn, men jag har lagt till en del kod här då jag ska göra om menyn till en dynamisk meny med underalternativ.
Här har vi den nuvarande koden:
<table width="120" border="0" align="left" cellpadding="3" cellspacing="2" class="menu">
<tr>
<td align="left" valign="middle" class="MenuItem" style="cursor: hand;" onmouseover="this.style.backgroundColor='#FFFFFF';" onmouseout="this.style.backgroundColor='';" onClick="document.location='main.asp'"><strong><a href="main.asp" target="_self">
Startsidan</a></strong></td>
</tr>
<% 'IF nTYP = 0 And Session("VisaPris") <> False Then %>
<% IF Session("VisaPris") <> False Then %>
<tr>
<td align="left" valign="middle" class="MenuItem" style="cursor: hand;" onmouseover="this.style.backgroundColor='#FFFFFF';" onmouseout="this.style.backgroundColor='';" onClick="document.location='forfragan.asp'"><strong><%= "<a href='forfragan.asp' target='_self'><font color='#999999'>e</font>Offert</a><br>" %></strong></td>
</tr>
<%
End IF
Sel = "Select * from Sidor Where Osynlig = False And Year(Datum) < 2100"
RecSet.Open Sel, Connect
if not recset.eof then
RecSet.Movefirst
Do Until RecSet.Eof
IF RecSet("StartSida") = False And UCASE(RecSet("Namn")) <> "GSTEXT" Then
%>
<tr>
<td align="left" valign="middle" class="MenuItem" style="cursor: hand;" onmouseover="this.style.backgroundColor='#FFFFFF';" onmouseout="this.style.backgroundColor='';" onClick="document.location='page.asp?s=<%= RecSet("ID") %>';"><strong>
<%
Response.Write("<a href='page.asp?s=" & RecSet("ID") & "' target='_self'>" & RecSet("Namn") & "</a><br>")
%>
</strong></td>
</tr>
<%
End IF
RecSet.MoveNext
Loop
end if
RecSet.Close
%>
<tr>
<td align="left" valign="middle" class="MenuItem" style="cursor: hand;" onmouseover="this.style.backgroundColor='#FFFFFF';" onmouseout="this.style.backgroundColor='';" onClick="document.location='stadmin/logout.asp';"><strong><a href="stadmin/logout.asp" target="_self" title="Logga alltid ut så att obehöriga inte kan visa sidan.">Logga
ut</a> </strong></td>
</tr>
<tr>
<td align="left" valign="middle"> <strong><br>
Kategorier</strong></td>
</tr>
<%
response.write("Grenställsoffert: " & Session("GrenstallOffert"))
' Kolla om användare har rättighet att se offert i menyn
IF Session("GrenstallOffert") = TRUE THEN
%>
<tr>
<td align="left" valign="middle" class="MenuItem" onmouseover="this.style.backgroundColor='#FFFFFF';" onmouseout="this.style.backgroundColor='';" style="cursor: hand;" onClick="document.location='grenstall.asp'">· <a href="grenstall.asp" target="_self">Grenställ (offert)</a></td>
</tr>
<%
END IF
IF nTYP = 0 or nTYP = 2 Then 'Nummer1 -- Här börjar delen där jag har gjort ändringar --
Sel = "Select * from Kategorier Where Osynlig = False Order By pos_cat"' hämtar Kategorier
RecSet.Open Sel, Connect
if not RecSet.Eof then 'Nummer2
RecSet.Movefirst
Do Until RecSet.Eof
Sel2 = "Select ID, parentID, namn, beskrivning from Underkategorier Where parentID =" & RecSet("KategoriID")
%>
<tr>
<td align="left" valign="middle" class="MenuItem" onmouseover="this.style.backgroundColor='#FFFFFF';" onmouseout="this.style.backgroundColor='';" onClick="document.location='products.asp?cat=<%= RecSet("KategoriID") %>'" style="cursor: hand;">
<%
Response.Write("· <a href='products.asp?cat=" & RecSet("KategoriID") & "' target='_self'>" & RecSet("KategoriNamn") & "</a>") & vbcrlf
%>
</td>
</tr>
<%
RecSet2.Open Sel2, Connect
if not RecSet2.Eof then 'Nummer3
RecSet2.Movefirst
IF RecSet2("parentID") = RecSet("KategoriID") THEN'Nummer4
Do Until RecSet2.Eof
%>
<tr>
<td align="left" valign="middle" class="MenuItem" onmouseover="this.style.backgroundColor='#FFFFFF';" onmouseout="this.style.backgroundColor='';" onClick="document.location='products.asp?undercat=<%= RecSet2("ID") %>'" style="cursor: hand;">
<%
Response.Write("+ <a href='products.asp?undercat=" & RecSet2("ID") & "' target='_self'>" & RecSet2("namn") & "</a>") & vbcrlf
%>
</td>
</tr>
<%
RecSet2.Movenext
Loop
End IF'Nummer4
End IF'Nummer3
RecSet2.Close
RecSet.MoveNext
Loop
end if'Nummer2
RecSet.Close
End IF 'Nummer1 Här slutar koden där jag gjort ändringar
IF Session("VisaPris") = False Then
%>
<tr>
<td><font size="1"><br>
Hej <%= Session("AnvNamn") %>, du är inloggad som gäst och inga priser kommer att
visas på sidan.</font></td>
</tr>
<% End IF %>
</table>
Tanken var att den ska gå igenom alla menyalternativ ett efter ett, och för varje steg så ska den kolla om det även finns underkategorier för det menyalternativet. Den letar då reda på alla underkategorier med samma parentID som det vanliga menyalternativets ID, och sedan läggs dessa till i menyn tillsammans med sin överkategori.
jag vet redan nu att jag inte har gjort rätt, och jag sitter och försöker skriva om koden så att den fungerar som jag vill.
Jag tänkte att man kan ju dölja underalternativen tills en användare klickar på + vid ett menyalternativ som har underalternativ, och då skickar man med id för vilken kategori man är på och gör underkategorierna synliga/skriver ut dessa. Jag tänkte att endast en undermeny kan vara framme åt gången.
så om någon har lust att slänga ett öga på koden under tiden jag försöker grejja detta så blir jag glad :)
Mvh Sanji
SanjiMedlem sedan juli 2009355 inlägg Får syntax error på min sql-sats:
Microsoft JET Database Engine error '80040e14'
Syntax error in INSERT INTO statement.
/stadmin/cataddunder.asp, line 24
den finns på en annan sida än den jag visar i föregående inlägg...
satsen:
Connect.execute "INSERT INTO Underkategorier VALUES(" & null &", "& Server.HTMLEncode(Request.QueryString("p_id")) &", " & Server.HTMLEncode(Request.Form("tnamn")) & ", " & Server.HTMLEncode(Request.Form("tbesk")) & ", " & false & " )"
vad är det jag skriver fel?
Mvh Sanji
tName är en sträng, skriv ut din SQL fråga så kommer du se att den är fel.
SanjiMedlem sedan juli 2009355 inlägg Jag vet inte riktigt hur jag ska göra med sql-satsen, så jag slängde ihop den här isället:
RecSet.Open "Select * From Underkategorier", Connect, adOpenStatic, adLockOptimistic
RecSet.AddNew
RecSet("namn") = Server.HTMLEncode(Request.Form("tnamn"))
RecSet("beskrivning") = Server.HTMLEncode(Request.Form("tbesk"))
RecSet("parentID") = Request.QueryString("p_id")
RecSet.Update
RecSet.Close
Dock får jag "type mismatch" på:
"RecSet("parentID") = Request.QueryString("p_id")"
Vad måste man göra för att lägga in request.querystringen i RecSet? parentID är int för övrigt... jag försökte göra en CInt() runt den men det gick inte heller :(
skriv en helt vanlig Update-SQL fråga med rätt datatyper.
SanjiMedlem sedan juli 2009355 inlägg Okej, sql-sats it is!
hur får jag apostroferna att fungera i sql-satsen då? är det i php man kör "/ "/?? det måste väl finnas något man kan göra fast det är klassisk asp också...
SanjiMedlem sedan juli 2009355 inlägg lade värdena i variablar istället och stoppade in i sql-satsen, men det är fortfarande syntax error...
Connect.execute "INSERT INTO Underkategorier VALUES(" & null &", "& p_id &", " & t_namn & ", " & t_besk & ", " & false & " )"
det är "p_id" det är fel på, sätter jag int() på den så fungerar det ej, och utan int() så blir det syntax error
Connect.execute "INSERT INTO Underkategorier VALUES(" & null &", "&
Server.HTMLEncode(Request.QueryString("p_id")) &", " &
Server.HTMLEncode(Request.Form("tnamn")) & ", " &
Server.HTMLEncode(Request.Form("tbesk")) & ", " & false & " )"
Kolla rad för rad:
NULL vill du ha i strängen, om det är en SQL null du vill mata in,
tname låter som en sträng och då skall det vara ' ' runt värdet, inte ett tal som du skriver just nu.
SanjiMedlem sedan juli 2009355 inlägg enda problemet är att när jag använder ' ' så kommenterar den bort resten av allt på raden... p_id är en sträng som ska in i en int-kolumn i databasen. tnamn är en sträng, likaså tbesk. jag testade att göra så här:
Server.HTMLEncode(Request.Form('tnamn')
men då kommenterades allt bakom första ' bort
null är för att det automatiskt ska köra autoincrement på id, ingen aning om jag ska köra med sql-null eller inte, vad blir det för skillnad?
Request.Querystring är en sträng, men om du du bygger ihop en SQL sträng så är "1" ett tal:
sql = "Select * FROM something where anything = " & Request.QueryString("p_id")
och QueryString("p_id") är = "1" så bli sql variablen
"SELECT * FROM something where anything = 1" vilket är korrekt.
däremot om det är av datatypen sträng så skall du ha i en SQL fråga:
"SELECT * FROM something WHERE anything = '" & Request.QueryString("p_namn") & "'" som bli:
"SELECT * FROM something WHERE anything = 'test'"
Så, du få använda ' på rätt ställe, inte som en ASP kommentar.
SanjiMedlem sedan juli 2009355 inlägg jag ska nog sluta med programmering för ikväll, men jag loggar in och läser igenom dina inlägg igen imorgon ^^ jag känner att jag är för trött för att tänka just nu hehe, tack för hjälpen! skriver imorgon
SanjiMedlem sedan juli 2009355 inlägg nu är jag igång igen, pigg och glad ^^ har skrivit om sql-satsen lite nu:
Connect.execute "INSERT INTO Underkategorier (parentID, namn, beskrivning, osynlig) VALUES('"& p_id &"', '" & t_namn & "', '" & t_besk & "', false )"
bättre? jag har fått bort en massa olika felmeddelanden från sql-satsen, men nu fick jag detta:
Microsoft JET Database Engine error '80040e07'
Data type mismatch in criteria expression.
/stadmin/cataddunder.asp, line 26
vadå "in criteria expression"? det finns väl ingen criteria expression?
parentID är det en sträng i databasen, känns som det är ett tal?
Ett tips när du debugar SQL frågor, skriv ut din SQL fråga
Connect.execute "INSERT INTO Underkategorier (parentID, namn, beskrivning, osynlig) VALUES("& p_id &", '" & t_namn & "', '" & t_besk & "', false )"
Om namn ohc beskrivning är sträng värden i din databas.
SanjiMedlem sedan juli 2009355 inlägg hehe jag gjorde som du sade, jag skrev ut sql-frågan och såg att p_id inte får något värde... aha! tänkte jag, och började skriva ut värdet av p_id för varje steg det tog, först via querystring till den sidan där sql-satsen ligger, och där fanns värdet. nästa steg hade jag stoppat in request.querystring("p_id ") i action="cataddunder.asp?spara=1&p_id=<%request.querystring("id")%> för en form, och det var här som värdet försvann... och nu efter att ha gått steg för steg så upptäckte jag att jag aldrig kör response.write på den, så det var inte så konstigt att värdet aldrig skickades med till den slutgiltiga destinationen ^^
Tack för hjälpen!
SanjiMedlem sedan juli 2009355 inlägg Jag börjar nu på en ny tråd för att ta itu med själva utskriften av menyn ^^
Snälla, varför väljer du att lära dig programmera i ASP av alla språk som finns att välja på? Senaste versionen av ASP kom ut för 10 år sedan, och det finns ingen vettig anledning att lära sig det om man ska välja ett språk att börja med.. Välj något vettigt, t.ex. ASP.net (med C# förslagsvis), Java, Python eller till och med PHP..
SanjiMedlem sedan juli 2009355 inlägg om du hade läst det jag skrev i den andra tråden som har med samma sak att göra så hade du sett att jag vanligtvis kör asp.net c#, och det jag gör här är enbart att uppdatera en gammal sida som inte jag har gjort, som skrevs i klassisk asp... och jag har inte tid att bygga om hela alltihopa från början då det skulle ta veckor att bygga om.
Varför lära sig klassisk asp? jag ser bara en anledning, och det är för att kunna underhålla t.ex. företagssidor som byggts i det, då många företag inte vill satsa på att bygga en helt ny sida i asp.net, php m.fl. bara för att de vill ha en liten extrafunktion.
använder även php till och från.
Mvh Sanji
Jag kan omöjligt hålla koll på vad som står i andra trådar, och uppfattningen att det var en nybörjare fick jag av att det kändes som att du begick de misstag som de flesta som börjar programmera begår..
Angående varför lära sig asp så ja, att lära sig obskyra språk för att kunna underhålla dem är legitimt, men inte som förstaspråk
SanjiMedlem sedan juli 2009355 inlägg haha ja det är sant ^^ fast jag är inte direkt superduktig vad gäller programmering, även om jag kan en del c# ^^