Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Conflitto nomi variabili di funzioni e di pagina

    Salve a tutti,
    vi spiego qual'è il mio problema che non si sarà compreso dal titolo deficente..

    In una pagina ho memorizzato delle variabili:
    <%
    variabile1="elemento1, elemento2, elemento3, elemento4"
    variabile2="elemento1, elemento2, elemento3, elemento4"
    %>
    Queste variabili hanno un nome ben preciso, che è coincidente nel campo del databse in cui sono memorizzati.

    Poi ho fatto una funzione il cui scopo sarebbe mostrare quanti nel database hanno inserito in uno specifico campo quell'elemento..
    <%
    function FuncInteresse(campo) %>
    <font face="<%= strDefaultFontFace %>" size="<%= strDefaultFontSize %>"><%
    if trim(campo) <> "" then
    interesse_=Split((campo),",")
    If Ubound(interesse_)> 3 Then
    j= 3
    Else
    j = Ubound(interesse_)
    End If
    For i=0 to j
    If Len(Trim(interesse_(i)))>1 Then
    Response.Write("<a href=""/community/interesse.asp?cat="& campo &"&q="& Trim(interesse_(i)) &""">")
    Response.Write(Trim(interesse_(i))&"</a> (")
    sql_interesse="SELECT COUNT(*) FROM " & strTablePrefix & "MEMBERS WHERE "& campo &" LIKE'"&Trim(Replace(Replace(interesse_(i),"'","_") ,"""","_"))&"'"
    rs.open sql_interesse,conn
    tot=Rs.Fields.Item(0).Value
    rs.close
    Response.Write(tot&")
    ")
    End If
    Next
    %> &page=hobbies">&raquo; <%
    Else
    Response.Write(" -
    ")
    End If
    %>
    </font><%
    End Function
    %>

    Il problema è che richiamando la funzione in questo modo:
    <% FuncInteressi(variabile1) %>

    va bene, perchè indica correttamente il nome del campo su cui effettuare la selezione, ma non va bene in fase di parsing, per splittare i vari elementi presenti nella variabile memorizzata all'inizio..

    Come mi conviene muovere?
    E' possibile mantenere l'elasticità della funzione, evitando però la conflittualità del doppio nome uguale?

    Grazie,
    Riccardo

  2. #2
    non è chiaro, non è chiaro...

  3. #3
    Mmh.. allora lo riscrivo:
    Ho nel database una tabella contenente alcune informazioni inserite dagli utenti.
    Tabella MEMEBERS:
    ID | M_NAME | Interessi | M_HOBBIES | libri | film

    In particolare, in Interessi, M_HOBBIES, libri, film sono contenuti gli interessi, hobbies, erc di ciascun utente nel formato, ad esempio per film,:
    La storia infinita, Blade Runner, Mars Attack, La signora in giallo

    Con la funzione sopra, vorrei per i primi tre elementi di questa lista vedere se ci sono, e quanti, dei amtch con la lista degli altri utenti per quanto riguarda gli interessi, i film, e così via.
    L'output dovrebbe essere una cosa tipo:
    La storia infinita (12)
    Blade Runner (31)
    Mars Attack (0)
    La signora in giallo (75)

    Con traparentesi il numero di utenti che l'hanno indicato nei loro film, sempre restando su questo esempio.

    Ora siccome questa operazione è la stessa per tutti e 4 i campi (Interessi, M_HOBBIES, libri, film), mi son detto perchè non facciamo una singola funzione che poi viene richiamata?

    Io ho chiamato la funzione
    <% function FuncInteresse(campo) %>
    e con campo indico il nome del campo su cui mi interessa, via via operare:
    <%FuncInteress("film")%>
    mi darà come output i primi tre elementi e i relativi match:
    La storia infinita (12)
    Blade Runner (31)
    Mars Attack (0)

    C'è però un problema: come richiamare il nome del campo (che mi serve per poter effettuare il conteggio del singolo elemento sul database degli altri utenti) e il nome della variabile che contiene la lista degli elementi film, o libri, o interessi?

    Al momento ho risolto in questo modo, tuttavia ho perso l'elasticità della funzione.. che si basa su un If specifico a questa situazione.. :

    <%
    Function FunInteresse(campo)
    sql="SELECT M_HOBBIES,interessi,film,libri FROM FORUM_MEMBERS WHERE MEMBER_ID ='"& id &"'"
    Rs.Open sql, conn
    If not rs.eof Then
    M_HOBBIES = rs.fields("M_HOBBIES")
    interessi = rs.fields("interessi")
    film = rs.fields("film")
    libri = rs.fields("libri")
    End If
    Rs.close
    if trim(campo) <> "" then
    If campo="interessi" Then
    interesse_=Split((interessi),",")
    ElseIf campo="M_HOBBIES" Then
    interesse_=Split((M_HOBBIES),",")
    ElseIf campo="film" Then
    interesse_=Split((film),",")
    ElseIf campo="libri" Then
    interesse_=Split((libri),",")
    End If
    If Ubound(interesse_)> 2 Then 'Mostro i primi 3 valori..
    j= 2
    Else
    j = Ubound(interesse_)
    End If
    For i=0 to j '[0 1 2 ]
    If Len(Trim(interesse_(i)))>1 Then
    Response.Write("<a href=""/community/interesse.asp?cat="& campo &"&q="& Trim(interesse_(i)) &""">")
    Response.Write(Trim(interesse_(i))&"</a> (")
    sql_interesse="SELECT COUNT(*) FROM " & strTablePrefix & "MEMBERS WHERE "& campo &" LIKE '%"&Trim(Replace(Replace(interesse_(i),"'","_"),"" "","_"))&"%'"
    rs.open sql_interesse,conn
    tot=Rs.Fields.Item(0).Value
    rs.close
    Response.Write(tot&")
    ")
    End If
    Next
    %> &page=hobbies">&raquo; <%
    Else
    Response.Write(" -
    ")
    End If

    End Function %>


    Forse una possibilità potrebbe essere...
    FunInteresse(NomeCampoDatabase, NomeVariabile)
    Il problema è che non posso mettere il nome della variabile come elemento nella funzione perchè
    - se non virgolettato richiamerebbe l'intero elenco..
    - viceversa la funzione agirebbe su "NomeVariabile" e non più su quello che dovrebbe contenere, ovvero l'elenco degli elementi..

    Spero di esser stato un po' più chiaro...
    avete suggerimenti?

    Riccardo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.