Newsgroup: it.comp.www.asp
Titolo: Prendere del codice ASP da un DB.... ed eseguirlo !

Salve a tutti,
questo è il mio problema. Sto creando un sitino, composto da una sola
pagina in cui cambia il contenuto a seconda di un parametro passato
nell'url (es index.asp?go=homepage); i dati vengono presi da un
database.
Finchè inserisco nella pagina (con un banalissimo <%= rs("contenuto")
%>) del semplice codice HTML tutto va bene, se inserisco codice ASP non
viene eseguito. Ovviamente è normale così, visto che il server sta già
processando la pagina ed esegue il comando response.write fregandosene
se dentro c'è codice ASP, HTML o altro.
Quindi ho pensato di predendere il record dal database, inserirlo in un
file, chiudere il file e poi usare un bel <!-- #include
file="temp.asp" ->.
Il problema è che al momento dell'include mi viene caricato il file
temp.asp generato la penultima volta che ho eseguito la pagina, e devo
fare un "aggiorna" per vedere il contenuto giusto. Ovviamente se apro il
file temp.asp il contenuto è giusto anche prima del refresh, solo che al
momento di "includerlo" probabilmente il server deve ancora finire di
manipolare il file.
Qualche idea per risolvere sto problema ? Anche cambiano completamente
approccio per eseguire il codice nel DB :)
PS: response.buffer = true non ha prodotto alcun effetto.
--
-=/ Nicola  Cassolato \=-
nicola.c...@libero.it
 - ICQ: 26241188 - 
http://texwiller.cjb.net
::: Il caso aiuta soltanto la mente preparata al nuovo e all'inconsueto
::: (L. Pasteur)

file="temp.asp" ->.
<ZAP>
La #INCLUDE viene processata PRIMA di eseguire il codice, quindi lui
include SEMPRE la pagina PRECEDENTE!
Scusa ma non capisco quale sia il tuo problema, il codice che vuoi
eseguire e' sicuramente un codice "generico", Ok, metti tutte le
funzioni/sub dentro un unico include, quindi a seconda del famoso
"parametro" chiami una o l'altra sub. Senza stare a complicarti la
vita con un marchingegno tanto assurdo.
Davide

 questo č il mio problema. Sto creando un sitino, composto da una sola


 vita con un marchingegno tanto assurdo.
Non ho capito niente :-)
Torniamo indietro.
Ho del codice asp in un database (e in una variabile, è lo stesso).
Questo codice è, ad esempio,
<% for a = 1 to 10
response.write a
next %>
ed è dentro la variabile testo
Io devo poter fare response.write testo nella mia pagina asp, e nel
browser devo poter vedere 
12345678910
, cioè l'esecuzione del mio codice
Tornando alla tua risposta, io non ho alcuna sub o function, (che tra
l'altro devo ancora imparare ad usare bene), quindi... boh :-)


 
www.msdn.microsoft.com
Nel mio MSDN su cd (un po' vecchietto a dir la veritą...) EVAL serve ad
eseguire codice JSCRIPT. Ho provato ad inserirlo nella mia pagina, con
eval(contenuto) e response.write eval(contenuto) (contenuto č ottenuto
con contenuto = rs("contenuto") ), ma mi dice errore di sintassi.
SU ASP 3.0, quindi IIS5.0, c'č server.execute o una cosa del genere che
risolve il mio problema, se non fosse che il mio server usa NT4.0 con
IIS 4.0, maledizione :-)


Torniamo indietro.
Ok, tu hai una pagina "pagina.asp" che riceve uno o piu' parametri,
a seconda del valore di questi "parametri" tu vorresti "buttare
dentro" ed eseguire del codice. (Giusto?)
Goed zo, mettiamo che hai 10 "pezzi" di codice, al momento li hai
dentro un database, identificati in qualche modo, benissimo, li
metti in un file "codice.inc" nel modo seguente:
Sub <nome_sub> ( <parametri> )
	' codice che hai al momento nel database
End Sub
Sub <altro_nome> ( <parametri> )
	' codice che hai al momento nel database
End Sub
etc. etc.
A questo punto nella tua pagina principale hai:
<!-- #INCLUDE FILE="codice.inc" -->
Poi:
<%
	If <parametro_passato> = "PrimoParametro" Then
		<nome_sub> <parametri>
	End If
	If <parametro_pasato> = "SecondoParametro" Then
		<nome_sub> <parametri>
		<altro_nome> <parametri>
	End If
%>
Ovviamente sostituisci <parametro_passato> con il parametro
che ti arrivi e che tu leggi, ed i vari nomi delle sub/parametri
richiesti con quello che ti interessa. In questo modo hai il
codice che viene eseguito in funzione del/dei parametri che ti
arrivano.
Spero di essere stato piu' chiaro.
Davide

Scusatemi se mi intrometto ma non riesco a capire il perchč di cotanto
complicarsi la vita.
Provate a dare un'occhiatina a questo sito ( ... č ancora in fase di test
quindi non rompetemelo !!! eh eh eh):
http://www.sangrato.com/newsite
Nicola, come potrai vedere, il 90% del sito si basa unicamente sulla pagina
default.asp a cui passo il parametro relativo alla pagina da visualizzare
(parametro "pag") e il relativo menů da attivare (parametro "attiva") e,
tanto per complicare, la lingua da utilizzare (parametro "L").
Attraverso i parametri "pag" ed "L" (utilizzando il classico SELECT CASE ...
END SELECT) carico il file .inc relativo.
Ciao
Michele Mariotti

 wrote:
Non ho mai provato una soluzione di questo tipo, ma credo che se tu
scrivessi il codice in un file.asp esterno e poi eseguissi una
response.redirect su questo file, ti dovrebbe funzionare.
Ciao!

 SU ASP 3.0, quindi IIS5.0, c'è server.execute o una cosa del genere che


 response.redirect su questo file, ti dovrebbe funzionare.
Si, avevo lavorato in questo senso.... La pagina principale riceveva il
parametro, lo passava ad un'altra che creava il file e lo passava alla
prima dicendo che aveva creato il file, quindi la prima faceva
l'include. Ora ho risolto in un altro modo.


 dentro" ed eseguire del codice. (Giusto?)
Ok, ora ho capito tutto.
Se penso che in ASP3.0 c'č il comando che fa quello che chiedo ma il mio
server ha IIS4.0.... GRRR !!!!!!
Valuterň la tua soluzione, che č meno complicata di quel che sembra :)
Al momento ho scoperto che poche pagine hanno codice ASP, e per
risolvere ho fatto un select case che, se trova una stringa particolare
nel db, inserisce un file include, altrimenti mette il contenuto del
database, ma č "poco elegante".
Piuttosto, secondo voi č utile creare i siti cosě, con una sola pagina
collegata ad un DB (ed ad un file include) ?
PS: se intando volete vedere il sito in cui ho messo 'ste robe...
www.comune.riese-pio-x.tv.it
 (ovviamente cliccate su nuovo sito)


 Evaluates an expression and returns the result.
Niente da fare, non funziona. E poi il verbo "to evaluate" non significa
"eseguire", ma "valutare", "giudicare"... Purtroppo non è quello che
serve a me :(


 collegata ad un DB (ed ad un file include) ?
E' utile se la cosa non compromette la manutenibilità richiesta dal codice.
Per dei sorgenti
preferirei dei file ad un DB in quanto avrei degli strumenti più potenti
per modificarli di quelli
che mi offre SQL.
Anche se devo dire che uno switch (statement Select Case) fatto con una
query che ritorna
il codice da eseguire ha un bel hack value!
--
Gian Uberto "Saint" Lauri|Programming: the funniest thing you can do with
sa...@mail.eng.it
        |your clothes on (clothes are not mandatory)
                         |(Hacker Jargon File 4.0.0, Programming, Meanig 3
Attenzione: Rispondo allo spam con un messaggio al provider di competenza

 il codice da eseguire ha un bel hack value!
:-))))


Scusa Nicola ma a me funziona.
Prova ad inserire nella tua pagina questo semplice esempio:
<%
operazioni_ASP = "response.write(""pippo"")"
variabile_temporanea = eval(operazioni_ASP)
%>
E vedrai che nell'HTML risultante appare "pippo" cioč
č stata eseguita la response.write inserita come testo in una stringa.


Ok, vi ringrazio tutti dei consigli. Ora, ho un altro problemino legato
allo stesso argomento. Se volessi inserire un motore di ricerca nel
sito, avevo pensato di interrogare semplicemente il database, ma alcune
pagine sono su un file a parte ! Come posso fare ? (non voglio il codice
pronto, non sarebbe giusto, mi basta qualche idea o suggerimento)


 %>
Se non fossi in ferie farei da solo la prova ma...
Sei sicuro che se a operazioni_ASP assegni
operazioniASP = "Function pippo(a)" & chr(13) & chr(10) & "pippo = a + 1"
& _
                            chr(13) & chr(10) & "End Function" & chr(13)
& chr(10) & _
                             "pippo(2)"
l'istruzione eval(operazioni_asp) ti venga elaborata correttamente ? Io
ho dei
fortissimi dubbi...


 inclusione usate con ASP [/OT]
Meno ot di quel che pensi. ASP/PHP/JSP (per brevità : server scripting)
sono tecnologie equivalenti anche se usano sintassi di origine diversa
(Basic, C, Java) e non sono altro che una semplificazione di cose fattibili
col CGI.
In alcuni casi i CGI sono richiamati per creare parti di documenti HTML
'tradizionali', come ad esempio i contatori. Ma gli stessi risultati li
puoi
ottenere con server scripting.
[considerazione very OT] Strano che sotto UNIX si usi l'estensione HTM.
Quando nacque HTML (e in rete c'erano solo UNIX, VAX e qualche dinosauro)
si usava l'estensione a 4 lettere.... Avranno usato frontpage... [/OT]



Come ti hanno già suggerito potresti scrivere quella pagina prelevata dal
database in un file temporaneo e quindi fargli un bel redirect.
Ma la critica che ti voglio fare è questa: ne vale la pena?
Che motivo reale hai di mantenere della pagine ASP in un database? Perché
non le tieni in una cartella apposita? Se effettui delle modifiche ad alcune
pagine ti puoi fare l'upload solo di quelle pagine, e non su tutto un
database!!!
E se l'utente salta alla pagina:
index.asp?go=homepage
in Index.asp scriverai:
<%
response.buffer=true
pagina=request("go")
response.redirect(pagina)
%>
Che vantaggi REALI hai a mantenere tutti quelle pagine in un database?
Mah...
Ciao,
Andrea Z.

 č stata eseguita la response.write inserita come testo in una stringa.
Ok, cosě funziona. Perň dalle prove che ho fatto credo funzioni se c'č
una sola istruzione ASP, se ce ne sono di piů non fa niente :-(
L'esempio di Gian Uberto Lauri infatti non genera alcun risultato, la
pagina viene mostrata dal browser senza la scritta "3" risultate dalla
sua funzione
--
-=/ Nicola  Cassolato \=-
nic...@cassolato.net
   -   ICQ: 26241188   -   
http://texwiller.cjb.net


 si usava l'estensione a 4 lettere.... Avranno usato frontpage... [/OT]
:-))) (comunque il tag generator è quello di FP98)


> ? Una stringa molto lunga ?
CN> Con una memo, basta e avanza :-)
Ma non è molto efficente.
+----------------------------------------------------------------+
| Gian Uberto Lauri * "So, are you working on fixing that bug    |
| 
sa...@eng.it
      *  *now* or leaving it until later ?" - YES  |
+----------------------------------------------------------------+
| Attenzione: rispondo ad ogni invio di pubblicità non richiesta | 
| o spam di qualsiasi altro genere con un messaggio al provider  |
| di competenza. Ai sensi della legge sulla privacy NON avete il |
| permesso di utilizzare i miei dati per questi scopi.           |
+----------------------------------------------------------------+

 Ok, cosě funziona. Perň dalle prove che ho fatto credo funzioni se c'č


 writes:
AG> più istruzioni NON definisce una l'EXPRESSION da calcolare che il VB engine
AG> si aspetta come parametro.
Appunto.  Una expression  è  "un  qualcosa che  ritorna  un valore"  e
usualmente va  a destra in  una operazione di assegnazione  (puoi però
chiamare una funzione ignorando bellamente il valore ritornato).



GUL >>> Non so quanto ti convenga. Come memorizzi il codice HTML ? Con
un memo
GUL >>> ? Una stringa molto lunga ?
NC >> Con una memo, basta e avanza :-)
GUL > Ma non è molto efficente.
[Nota a margine: ho inserito le iniziali dei nostri nomi, e mi sono reso
conto ancora di più di quanto "cessoso" sia Outlook. Poi ho immaginato
che di sicuro tu non le avevi scritte a mano, ho visto X-Newsreader:
Gnus v5.7/Emacs 20.4 e ho provato una grandissima invidia ! ^__^]
Per efficienza intendi tempi di esecuzione, occupazione del server e
cose del genere ? IF YES, puoi spiegarmi perchè ? Se invence è un
discorso riguardo alla manutenibilità dei contenuti, sto pensando di
modificare un po' il sito, gestendo anche le pagine HTML only con lo
stesso approccio di quelle con codice ASP, cioè di un file esterno
richiamato con una "sfigatissima" (per non permettere l'uso di
variabili) #include, fermo restando la "struttura portante" basata su
database
Grazie comunque per i preziosi suggerimenti !


> 
CN> GUL >>> Non so quanto ti convenga. Come memorizzi il codice HTML ? Con
CN> un memo
CN> GUL >>> ? Una stringa molto lunga ?
CN> NC >> Con una memo, basta e avanza :-)
CN> GUL > Ma non è molto efficente.
CN> [Nota a margine: ho inserito le iniziali dei nostri nomi, e mi sono reso
CN> conto ancora di più di quanto "cessoso" sia Outlook. Poi ho immaginato
CN> che di sicuro tu non le avevi scritte a mano, ho visto X-Newsreader:
CN> Gnus v5.7/Emacs 20.4 e ho provato una grandissima invidia ! ^__^]
[contro nota: Guarda che Emacs c'è anche - per mia fortuna - per NT e 9x
 Siccome è il mio tool per le pagine ASP evitiamo l'OT con un sofisma :) ]
CN> Per efficienza intendi tempi di esecuzione, occupazione del server e
CN> cose del genere ? IF YES, puoi spiegarmi perchè ? 
Ambedue. I campi  memo (per quello che mi hanno  detto i miei colleghi
che ne sanno  di Database, io vengo da altri  ambienti e balbetto SQL)
sono molto meno efficienti nella gestione da parte del DB.
Ed inoltre  avere i  sorgenti nei file  li rende molto  più facilmente
modificabili che dentro un database:
Carica, modifica, salva 
contro
scrivi query di lettura, copia risultato in un editor, modifica, scrivi
query di scrittura con il contenuto dell'editor.
Ache usando un editor che si integri con il tool per la gestione dei DB
(i.e. Emacs :) :) :) :) :) ) la cosa non mi pare la più comoda
CN> Grazie comunque per i preziosi suggerimenti !
Figurati, mi ha divertito un sacco lo switch fatto con una query!


Prendo un mio post per riagganciarmi al thread.
Nicola Cassolato chiedeva  se poteva prendere del testo  (un codice in
un qualche linguaggio interpretato) e farlo esegure dal motore ASP.
Ci siamo tutti rotti la testa su come fare eseguire VBScript.
La soluzione  dovrebbe essere  un'altra, se ancora  supportata, ovvero
usare il Perl.
Non  conosco il  Perl (al  mio 3  in coro,  per  favore "Vergognati!!"
1,2,3!)  ma ricordo  la descrizione di un exploit fatta  a danno di PC
Week in cui  l'intrusore raccontava di uno script in  perl ad un certo
punto valutava  il contenuto  di una variabile,  e lui era  riuscito a
violare la macchina  facendo arrivare il suo codice  malefico in detta
variabile.
Se serve, cercherò maggiore documentazione con calma...
