#1
  1. No Profile Picture
    Registered User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Jun 2013
    Posts
    1
    Rep Power
    0

    Using checkboxes to refine search results - query string?


    Hi there, I have a search facility on a clients property website. It is using MS SQL and classic ASP for the coding.

    I have it set up so that clicking on 'Office' pulls in all of the office properties they have listed. They now want to be able to narrow this down to locations.

    I added a new field called 'proploc' and amended all of the current properties to give them a 'proplocid' (1 = Manchester, 2 = Liverpool, 3 = London etc., there are 8 in total)

    I added links on the Offices page so that they can go to each location, eg:

    offices.asp?proplocid=1 brings in all properties in Manchester only
    offices.asp?proplocid=2 brings in all properties in Liverpool only
    offices.asp?proplocid=3 brings in all properties in London only

    What they want though is to have checkboxes and a 'Go' button so that the user could select more than one location and then click Go to bring in both Liverpool and London properties (proplocid's 1 and 3)

    How do I go about this in terms of it generating the correct link? I know I am using old code in classis ASP but it does work for me generally.

    Here is the source code I am using before the opening html tag:

    Code:
    <%@LANGUAGE="VBSCRIPT"%> 
    <!--#include file="Connections/CONNECTIONNAME.asp" -->
    <%
    Dim rs__varsection
    rs__varsection = "1"
    if (request("section")   <> "") then rs__varsection = request("section")  
    %>
    <%
    Dim rs__varstatus
    rs__varstatus = "%"
    if (request("status")  <> "") then rs__varstatus = request("status") 
    %>
    <%
    Dim rs__varproploc
    rs__varproploc = "%"
    if (request("proploc")  <> "") then rs__varproploc = request("proploc") 
    %>
    <%
    Dim rs__varpl
    rs__varpl = "0"
    if (Request.QueryString("minprice")  <> "") then rs__varpl = Request.QueryString("minprice") 
    %>
    <%
    Dim rs__varpu
    rs__varpu = "99999999999999"
    if (Request.QueryString("maxprice")  <> "") then rs__varpu = Request.QueryString("maxprice") 
    %>
    <%
    set rs = Server.CreateObject("ADODB.Recordset")
    rs.ActiveConnection = Conn
    rs.Source = _
        "SELECT *  FROM prop, section, status, proploc" _
      & " WHERE status = statusid AND section = sectionid AND proploc = proplocid" _
      & " AND section in (1,5,6,7) " _
      & " AND status like '" & Replace(rs__varstatus, "'", "''") & "' " _
      & " AND proploc like '" & Replace(rs__varproploc, "'", "''") & "' " _
      & " AND price between " & CDBL(rs__varpl) & " AND " & CDBL(rs__varpu) _
      & " ORDER BY price DESC"
    
    rs.CursorType = 0
    rs.CursorLocation = 2
    rs.LockType = 3
    rs.Open()
    rs_numRows = 0
    %>
    <%
    Dim rs2__MMColParam
    rs2__MMColParam = "1"
    if (Request.QueryString("statusid") <> "") then rs2__MMColParam = Request.QueryString("statusid")
    %>
    <%
    set rs2 = Server.CreateObject("ADODB.Recordset")
    rs2.ActiveConnection = Conn
    rs2.Source = "SELECT * FROM status WHERE statusid = " + Replace(rs2__MMColParam, "'", "''") + ""
    rs2.CursorType = 0
    rs2.CursorLocation = 2
    rs2.LockType = 3
    rs2.Open()
    rs2_numRows = 0
    %>
    
    
    <%
    Dim rs4__MMColParam
    rs4__MMColParam = "1"
    if (Request.QueryString("proplocid") <> "") then rs4__MMColParam = Request.QueryString("proplocid")
    %>
    <%
    set rs4 = Server.CreateObject("ADODB.Recordset")
    rs4.ActiveConnection = Conn
    rs4.Source = "SELECT * FROM proploc WHERE proplocid = " + Replace(rs4__MMColParam, "'", "''") + ""
    rs4.CursorType = 0
    rs4.CursorLocation = 2
    rs4.LockType = 3
    rs4.Open()
    rs4_numRows = 0
    %>
    
    
    
    <%
    Dim Repeat1__numRows
    Repeat1__numRows = 10
    Dim Repeat1__index
    Repeat1__index = 0
    rs_numRows = rs_numRows + Repeat1__numRows
    %>
    <%
    '  *** Recordset Stats, Move To Record, and Go To Record: declare stats variables
    
    ' set the record count
    rs_total = rs.RecordCount
    
    ' set the number of rows displayed on this page
    If (rs_numRows < 0) Then
      rs_numRows = rs_total
    Elseif (rs_numRows = 0) Then
      rs_numRows = 1
    End If
    
    ' set the first and last displayed record
    rs_first = 1
    rs_last  = rs_first + rs_numRows - 1
    
    ' if we have the correct record count, check the other stats
    If (rs_total <> -1) Then
      If (rs_first > rs_total) Then rs_first = rs_total
      If (rs_last > rs_total) Then rs_last = rs_total
      If (rs_numRows > rs_total) Then rs_numRows = rs_total
    End If
    %>
    <%
    ' *** Recordset Stats: if we don't know the record count, manually count them
    
    If (rs_total = -1) Then
    
      ' count the total records by iterating through the recordset
      rs_total=0
      While (Not rs.EOF)
        rs_total = rs_total + 1
        rs.MoveNext
      Wend
    
      ' reset the cursor to the beginning
      If (rs.CursorType > 0) Then
        rs.MoveFirst
      Else
        rs.Requery
      End If
    
      ' set the number of rows displayed on this page
      If (rs_numRows < 0 Or rs_numRows > rs_total) Then
        rs_numRows = rs_total
      End If
    
      ' set the first and last displayed record
      rs_first = 1
      rs_last = rs_first + rs_numRows - 1
      If (rs_first > rs_total) Then rs_first = rs_total
      If (rs_last > rs_total) Then rs_last = rs_total
    
    End If
    %>
    <%
    ' *** Move To Record and Go To Record: declare variables
    
    Set MM_rs    = rs
    MM_rsCount   = rs_total
    MM_size      = rs_numRows
    MM_uniqueCol = ""
    MM_paramName = ""
    MM_offset = 0
    MM_atTotal = false
    MM_paramIsDefined = false
    If (MM_paramName <> "") Then
      MM_paramIsDefined = (Request.QueryString(MM_paramName) <> "")
    End If
    %>
    <%
    ' *** Move To Record: handle 'index' or 'offset' parameter
    
    if (Not MM_paramIsDefined And MM_rsCount <> 0) then
    
      ' use index parameter if defined, otherwise use offset parameter
      r = Request.QueryString("index")
      If r = "" Then r = Request.QueryString("offset")
      If r <> "" Then MM_offset = Int(r)
    
      ' if we have a record count, check if we are past the end of the recordset
      If (MM_rsCount <> -1) Then
        If (MM_offset >= MM_rsCount Or MM_offset = -1) Then  ' past end or move last
          If ((MM_rsCount Mod MM_size) > 0) Then         ' last page not a full repeat region
            MM_offset = MM_rsCount - (MM_rsCount Mod MM_size)
          Else
            MM_offset = MM_rsCount - MM_size
          End If
        End If
      End If
    
      ' move the cursor to the selected record
      i = 0
      While ((Not MM_rs.EOF) And (i < MM_offset Or MM_offset = -1))
        MM_rs.MoveNext
        i = i + 1
      Wend
      If (MM_rs.EOF) Then MM_offset = i  ' set MM_offset to the last possible record
    
    End If
    %>
    <%
    ' *** Move To Record: if we dont know the record count, check the display range
    
    If (MM_rsCount = -1) Then
    
      ' walk to the end of the display range for this page
      i = MM_offset
      While (Not MM_rs.EOF And (MM_size < 0 Or i < MM_offset + MM_size))
        MM_rs.MoveNext
        i = i + 1
      Wend
    
      ' if we walked off the end of the recordset, set MM_rsCount and MM_size
      If (MM_rs.EOF) Then
        MM_rsCount = i
        If (MM_size < 0 Or MM_size > MM_rsCount) Then MM_size = MM_rsCount
      End If
    
      ' if we walked off the end, set the offset based on page size
      If (MM_rs.EOF And Not MM_paramIsDefined) Then
        If (MM_offset > MM_rsCount - MM_size Or MM_offset = -1) Then
          If ((MM_rsCount Mod MM_size) > 0) Then
            MM_offset = MM_rsCount - (MM_rsCount Mod MM_size)
          Else
            MM_offset = MM_rsCount - MM_size
          End If
        End If
      End If
    
      ' reset the cursor to the beginning
      If (MM_rs.CursorType > 0) Then
        MM_rs.MoveFirst
      Else
        MM_rs.Requery
      End If
    
      ' move the cursor to the selected record
      i = 0
      While (Not MM_rs.EOF And i < MM_offset)
        MM_rs.MoveNext
        i = i + 1
      Wend
    End If
    %>
    <%
    ' *** Move To Record: update recordset stats
    
    ' set the first and last displayed record
    rs_first = MM_offset + 1
    rs_last  = MM_offset + MM_size
    If (MM_rsCount <> -1) Then
      If (rs_first > MM_rsCount) Then rs_first = MM_rsCount
      If (rs_last > MM_rsCount) Then rs_last = MM_rsCount
    End If
    
    ' set the boolean used by hide region to check if we are on the last record
    MM_atTotal = (MM_rsCount <> -1 And MM_offset + MM_size >= MM_rsCount)
    %>
    <%
    ' *** Go To Record and Move To Record: create strings for maintaining URL and Form parameters
    
    ' create the list of parameters which should not be maintained
    MM_removeList = "&index="
    If (MM_paramName <> "") Then MM_removeList = MM_removeList & "&" & MM_paramName & "="
    MM_keepURL="":MM_keepForm="":MM_keepBoth="":MM_keepNone=""
    
    ' add the URL parameters to the MM_keepURL string
    For Each Item In Request.QueryString
      NextItem = "&" & Item & "="
      If (InStr(1,MM_removeList,NextItem,1) = 0) Then
        MM_keepURL = MM_keepURL & NextItem & Server.URLencode(Request.QueryString(Item))
      End If
    Next
    
    ' add the Form variables to the MM_keepForm string
    For Each Item In Request.Form
      NextItem = "&" & Item & "="
      If (InStr(1,MM_removeList,NextItem,1) = 0) Then
        MM_keepForm = MM_keepForm & NextItem & Server.URLencode(Request.Form(Item))
      End If
    Next
    
    ' create the Form + URL string and remove the intial '&' from each of the strings
    MM_keepBoth = MM_keepURL & MM_keepForm
    if (MM_keepBoth <> "") Then MM_keepBoth = Right(MM_keepBoth, Len(MM_keepBoth) - 1)
    if (MM_keepURL <> "")  Then MM_keepURL  = Right(MM_keepURL, Len(MM_keepURL) - 1)
    if (MM_keepForm <> "") Then MM_keepForm = Right(MM_keepForm, Len(MM_keepForm) - 1)
    
    ' a utility function used for adding additional parameters to these strings
    Function MM_joinChar(firstItem)
      If (firstItem <> "") Then
        MM_joinChar = "&"
      Else
        MM_joinChar = ""
      End If
    End Function
    %>
    <%
    ' *** Move To Record: set the strings for the first, last, next, and previous links
    
    MM_keepMove = MM_keepBoth
    MM_moveParam = "index"
    
    ' if the page has a repeated region, remove 'offset' from the maintained parameters
    If (MM_size > 0) Then
      MM_moveParam = "offset"
      If (MM_keepMove <> "") Then
        params = Split(MM_keepMove, "&")
        MM_keepMove = ""
        For i = 0 To UBound(params)
          nextItem = Left(params(i), InStr(params(i),"=") - 1)
          If (StrComp(nextItem,MM_moveParam,1) <> 0) Then
            MM_keepMove = MM_keepMove & "&" & params(i)
          End If
        Next
        If (MM_keepMove <> "") Then
          MM_keepMove = Right(MM_keepMove, Len(MM_keepMove) - 1)
        End If
      End If
    End If
    
    ' set the strings for the move to links
    If (MM_keepMove <> "") Then MM_keepMove = MM_keepMove & "&"
    urlStr = Request.ServerVariables("URL") & "?" & MM_keepMove & MM_moveParam & "="
    MM_moveFirst = urlStr & "0"
    MM_moveLast  = urlStr & "-1"
    MM_moveNext  = urlStr & Cstr(MM_offset + MM_size)
    prev = MM_offset - MM_size
    If (prev < 0) Then prev = 0
    MM_movePrev  = urlStr & Cstr(prev)
    %>
    Any help would be most welcome on this.
  2. #2
  3. No Profile Picture
    Registered User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Jun 2013
    Posts
    20
    Rep Power
    0
    I presume you are going to have 8 checkboxes for all of the possible property locations.

    You could then test each of those boxes to see if they were
    checked or not.
    Create a variable for each one, initialized to blank.
    If the checkbox is checked, change that variable to the code for that particular property location.
    Then create another variable with each of these codes strung together in it, each separated by a comma.

    Code:
    'variable for all codes together
    rs_allproploc = ""
    
    'code to test 1 of the eight checkboxes
    rs__varproploc1 = ""
    if (request("proploc1")  <> "") then rs__varproploc1 = "M"
    
    'code to concatenate this property location code to
    ' the variable containing all the other codes
    ' note... if it is the first one, do NOT put a comma in first
    if (rs_allproprloc <> "") then
        rs_allproploc = rs_allproploc & "," & rs_varproprloc1
      else
        rs_allproploc = rs_allproploc & rs_varproprloc1
     end if
    After you have done all that, then build a portion of your select statement to tell it to get all property location that are IN this provided string.....

    Code:
    " and proploc in '" & rs_allproprloc & "'"
    This should work

IMN logo majestic logo threadwatch logo seochat tools logo