Archivio

Articolo taggato ‘coldfusion’

access denied (coldfusion.sql.DataSourcePermission xxx)

March 27th, 2009 No comments

Per i pochi adepti di coldfusion ancora presenti in Italia (se c’è qualcuno batta un colpo/commento) voglio raccontare un’avventura della giornata di ieri.

Da anni sono con alto gradimento in hosting su Crystaltech, ma questa volta mi hanno fatto penare molte ore. Nel sito che gestisco per un amico ci sono operazioni ripetitive (di massa) che funzionano inserite all’interno di thread autonomi (CFTHREAD).

Leggi tutto…

Liste e Array in Vbscript

June 11th, 2008 2 comments

Ecco altre funzioncine molto smart per gestire liste (stringhe con separatore) e array in VBscript, come se foste in coldfusion.

ValueList

Vi permette di passare alla funzione un recordSet e il nome della colonna desiderata, e di ottenere una stringa di tutti i valori separati da separator.

Function ValueList(query,column)
    ValueList = ""
    separator = ","
    On Error Resume Next
        do while not query.EOF
            'loop di tutti i valori
            if (ValueList="") then
                ValueList = query(column)
            else
                ValueList = ValueList & separator & query(column)
            end if
        query.moveNext
        loop
        'If Err.Number <> 0 then
        'end if
    Err.Clear
End Function

 

ValueArray

Sfrutta la funzione sopra e restituisce invece un array con tutti i valori

Function ValueArray(query,column)
    separator = ","
    ValueArray = Split(ValueList(query,column),separator)
End Function

 

SubArray

Crea un array, partendo dal punto di partenza (gli array iniziano da zero) per un count numero di elementi

Function ArraySub(myArray,start,count)
    newArrayLen = 0
    For i=start to (start+count-1)
        ReDim Preserve newArray(newArrayLen)
        newArray(newArrayLen) = myArray(i)
        newArrayLen = newArrayLen + 1
    Next
    ArraySub = newArray
End Function

 

Ciao ciao

Categorie: InfoTech Tag: , , , , ,

ASP: qualche utile funzione

May 8th, 2008 No comments

Purtroppo sto sistemando alcuni siti ancora in ASP / Vbscript. Penso che per un programmatore Coldfusion non ci sia passaggio peggiore. Per semplificarmi la vita mi sono creato alcune funzioni simpatiche che mi velocizzano il lavoro. Tanto per non sentirmi troppo solo mi sono creato anche il file Application.asp, che includo in ogni pagina.

Chi è programmatore Coldfusion, o lo era, penso possa capirmi.

Giochiamo con le date

Qualche funzione per avvicinarci al concetto di date di coldfusion, rispettando la sintassi di scrittura delle date odbc, come fa la funzione cf CreateOdbcDateTime.

Function createOdbcDateTime(d,t)
stringa = "CONVERT(DATETIME, '" & year(d) & "-" & month(d) & "-" & day(d) & " " & hour(t) & ":" & minute(t) & ":" & second(t) & "', 102)"
createOdbcDateTime = stringa
End Function
Function createDate(d,m,y)
dateTmp = d & "/" & m & "/" & y
if isDate(dateTmp) then
createDate=dateTmp
else
createDate=null
end if
End Function
Function createTime(h,m,s)
if isEmpty(m) then m = 0
if isEmpty(s) then s = 0
timeTmp = h & "." & m & "." & s
if (h>=0 and h<24 and m>=0 and m<60 and s>=0 and s<60) then
createTime=timeTmp
else
createTime=null
end if
End Function

Database

Quando passiamo una stringa in un database bisogna che stiamo attenti al carattere ‘ che in SQL è il marcatore di inizio e fine di un testo. Per essere sicuri delle nostre stringhe possiamo usare:

Function r(s)
'rimpiazzio i simboli ' con '' per le query

On Error Resume Next
r = Replace(s,"'","''")
if err.number <> 0 then
r = ""
end if
Err.Clear
End Function

Form, Query String e …

Ora sfruttiamo la precedente funzione per essere facilitati nell’estrarre i parametri che ci arrivano via form (put) e url / query string (get).

Function f(s)
'estraggo un elemento dal form
f = Request.Form(s)
End Function
Function fr(s)
fr = r(f(s))
End Function
Function q(s)
'estraggo un elemento dal query string
q = Request.QueryString(s)
End Function
Function qr(s)
qr = r(q(s))
End Function
Function u(s)
'estraggo elemementi da un upload form (aspupload.com)
'catturo eventuale errore
On Error Resume Next
u = Upload.Form(s)
If Err.Number <> 0 then
u = ""
end if
Err.Clear
End Function
Function ur(s)
ur = r(u(s))
End Function

Alla quale aggiungiamo una funzioncina per convertire il tutto in formato stringa. VBScript ha una gestione del tipo dato molto particolare. Quasi sempre tutto è automaticamente castabile su altro tipo. Però quando i dati arrivano dal DB fa il "fastidioso". Con questa funzione passiamo tutto in stringa:

Function ToString(s)
'converto in stringa
if (isNull(s)) then
ToString = ""
else
ToString = CStr(s)
end if
End Function

Chiudiamo in bellezza con la croce si ASP il debug. Chi è abituato a coldfusion sa che il debugger è eccezionale. Su Vbscript si cambia un po’ abitudini. Con questa funzione ricorrete al vecchio metodo di debug con facilità!

Function debug(s)
'butta fuori l'output e blocca la pagina

response.Write(s)
response.end
End Function

Signori e signori… buona serata. Se ci sono dubbi, proverò a rispondere, non per mancata voglia, ma per presunte incapacità :)

 

vbscript: riversare colonne in variabili

April 2nd, 2008 No comments

Un esempio al volo su come riversare i valori delle colonne di un recordset, di una sola riga, in variabili normali.

<!-- #include file="include/connection.asp" -->
<%
set rs=server.CreateObject("adodb.recordset")
qryRsAll = "SELECT * FROM news WHERE id_news=2"
rs.Open qryRsAll, conn
if not (rs.EOF) then
    do while not rs.EOF
        'loop della query
        'for each
        for each col in rs.fields
            response.Write(col.name & "<br />")
            'descrizione = rs("descrizione")
            execute(col.name & "=" & "rs(""" & col.name & """)")
        next
    rs.moveNext
    loop
    rs.Close
end if
response.Write(descrizione)
%>

Ma soprattutto… perchè sono ancora qui che programmo in ASP??? W coldfusion!

Coldfusion to Excel Bug su colonne decimali

April 2nd, 2008 4 comments

Coldfusion to Excel bug

Ho creato una pagina di report (da db Sql Server 2005), con classica tabella HTML, e una pagina gemella, che permette di esportare tale record in Excel. Per farlo ho usato coldfusion to excel, banalissimo.

Il problema era che su due colonne, con valori nello stesso identico range ("0," più tre cifre decimali) una veniva renderizzata perfetta in excel, l’altra veniva renderizzata con valori completamente sballati e un numero elevato di cifre decimali.

Dopo aver controllato ogni singolo bit delle pagine, e aver visto che tutto era assolutamente identico, addirittura l’sql della query base era in una stringa in Session… sono stato preso dalla disperazione. Poi contatto k76, il quale mi conferma il bug… aiuto!

 

Soluzione del bug

Bisogna codificare il numero via NumberFormat (io ho usato LsNumberFormat):

#lsNumberFormat(colonna,"9.000")#

E il mondo ha reiniziato a sorridere!

Categorie: Critiche Tag: , , ,

Il captcha di Gmail crasha! Usate Hiddy!

February 28th, 2008 10 comments

I use Hiddy!Prima poi la stavamo aspettando la notizia che lo schifoso CAPTCHA era stato battuto. Da sempre sono stato contro tale forma di tutela dei form. E’ contro ogni principio di usabilità e ogni volta, almeno io, devo reinserirlo 3-4 volte perchè non riesco a leggerlo correttamente. Anche Mr. G è caduto nella trappola.

PI: Gli spammer assalgono Gmail Gli spammer sarebbero riusciti a violare il fino ad oggi invalicabile captcha che protegge Gmail dalle iscrizioni automatiche fraudolente, dando il via ad una massiccia campagna di creazione di account fasulli da sfruttare come veicolo di posta spazzatura.

E pensare che da molti mesi l’idea alternativa IO l’ho pubblicata! E’ di una semplicità bestiale ma pare che alla gente le cose semplici diano fastidio. L’ho testata per mesi e mesi sul mio vecchio blog. La sto inserendo in ogni linguaggio (coldfusion, php, asp) nei form di contatto, e non 1 dico 1 messaggio fraudolento mi è mai arrivato.

Pare però che solo quel gran genio del mio amico si sia accorto della semplicità e della banalità di questo algoritmo. Se fossi stato un business man avrei potuto brevettarlo… Comunque se usate Wordpress basta semplicemente installare HIDDY!

Per tutti gli altri rimando al post preciso con gli esempi e la base del flusso logico di controllo!

Feedreader casalingo in Coldfusion

February 20th, 2008 6 comments

Veloce, velocissimo… un light post per buttare su in 4 e 4 = 8 un feed reader casalingo con il nostro beneamato coldfusion (ci sono ancora developer in Italia, o è rimasto solo Andrea Veggiani e io, ormai a tempo perso?). Io l’ho creato sulla base della struttura di RSS fornita da FeedBurner, questo il suo header:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/atom10full.xsl" type="text/xsl" media="screen"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:gr="http://www.google.com/schemas/reader/atom/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">

Vabbè dai iniziamo: dichiariamo una variabile con il nostro feed e ci creiamo un array di strutture per poterlo scorrere con facilità. Chiaramente estrate quello che vi serve e adattatelo alle vostre esigenze. Ecco il codice:

 

<cfset feedUrl = "http://feeds.feedburner.com/bloggeritaliani">
<cfhttp url="#feedUrl#" method="get" resolveurl="no"></cfhttp>
<cfset myFeedXml = xmlParse(trim(cfhttp.FileContent))>
<cfloop from="1" index="i" to="#arrayLen(myFeedXml.feed.entry)#">
<cfset elemento = myFeedXml.feed.entry[i]>
<cfif isDefined("elemento.CONTENT")>
<cfset myFeedI = myFeedI + 1>
<cfset myFeed[myFeedI] = structNew()>
<cfset elementohtml = elemento.CONTENT>
<cfset elementohtml = replaceNoCase(elementohtml, "&lt;","<","all")>
<cfset elementohtml = replaceNoCase(elementohtml, "&gt;",">","all")>
//converto in plain text... se volete anche voi!
<cfset elementohtml = ReReplace(elementohtml, "<[^>]*>", "", "ALL")>
<cfset elementohtml = left(elementohtml,150) & "...">
<cfset myFeed[myFeedI].testo = elementoHTML>
<cfset myFeed[myFeedI].titolo = elemento.title.XmlText>
<cfset myFeed[myFeedI].data = elemento.published>
<cfset myFeed[myFeedI].link = elemento.id.XmlAttributes["gr:original-id"]>
<cfset myFeed[myFeedI].autore = elemento.AUTHOR>
</cfif>
</cfloop>

 

E adesso non chiedetemi di spiegarla perchè è facilissimo. Se volete fare degli esperimenti comunque non vi resta che partire da myFeedXml e guardare le varie strutture con lo splendido CFDUMP!

Un esempio funzionante, lo chiedete sempre, su bloggeritaliani.com

Categorie: Critiche Tag: , , ,

Menu intelligente con javascript e style

January 24th, 2008 4 comments

Ecco un esempio gustoso su come creare un menu sensibile alla pagina in cui siamo. Quali tecniche ho usato?
Innanzi tutto html e css (che non metto) per la creazione di un normale menu basato su css e liste (ul/li).
Quindi un po’ di coldfusion per individurare lato server la pagina in cui il navigatore è.
Alla fine qualche righetta di javascript per navigare il DOM (document object model) usando getElementById e getElementsByTagName e l’assegnazione onFly di uno stile con .style. Leggi tutto…

Categorie: Critiche Tag: , , ,

Un CAPTCHA senza javascript matematica o immagini

November 29th, 2007 39 comments

Come fare un captcha facile senza javascript, un po’ di css e un po’ di server side (coldfusion): un gioco da ragazzi. Procediamo! Ipotizziamo che il nostro modulo (form) sia fatto nel seguente modo: <form name="frm_xxx" action="reg.cfm" method="post"> Nome <input type="text" name="nome"><br /> Sito <input type="text" name="sito"><br /> Mail <input type="text" name="mail"><br /> Commento<br> <textarea name="commento"></textarea> </form> Mi sembra abbastanza standard, ok? Mettiamoci nei panni dello spider che invia i moduli di spam: entra dentro, legge gli input, invia il modulo simulando http.referer e tutti i campi input con le sue parole si spam (cattivo…). Perfetto: facciamo il suo gioco, inseriamogli un bel campo input… che però lo vede solo lui e non gli utenti.

<!— SISTEMA CON CAPTHA NON TRADIZIONALE —> <div style="visibility:hidden"> Non inserire testo nel campo sotto. Altrimenti non riuscire più a commentare.<br /> <input type="text" name="campoNascosto" value="" style="width:1px;height:1px;font-size:1px;" /> </div> Come nasconderlo, semplice un po’ di CSS, in questo caso scritto nel codice HTML, ma possiamo usare benissimo delle classi, oppure dichiarare nel DIV contenitore di nascondere tutti gli input etc. Attenzione! Non usare display:none altrimenti il campo input nascosto non viene inviato alla pagina destinataria (reg.cfm). Ultimo pezzettino di fatica, facciamo un controllo nella pagina di registrazione del modulo, in modo che l’esito sia positivo solamente se il campoNascosto esiste ed ha valore "" (vuoto).

<cfif not(isDefined("form.campoNascosto") and form.campoNascosto is "")>

Attenzione. Modulo non registrabile! <cfabort>

</cfif> La versione in php invece "fà" così (by DvD): if ( (array_key_exists("campoNascosto",$_POST))) { if ($_POST["campoNascosto"]<>"") { die ("Attenzione. Modulo non registrabile!"); } La versione in asp: <% function existsFormParam(name) existsFormParam = (Request.Form(name).Count = 1) end function if (existsFormParam("captcha") and Request.Form("captcha") = "") then Response.write("ok") else Response.write("no") end if %> Et violà il gioco è fatto. Finora il sistema (qualche settimana) sembra tenere senza problemi, è chiaro che se qualcuno fa un "auto-commentatore" ad hoc buca facilmente il sito, al più di fare random il nome del campoNascosto, e memorizzarlo in una variabile di sessione o una variabile client. Il sistema javascript-less permette l’utilizzo dei moduli anche da parte dei signori con js disabilitato. *** Attenzione, il futuro di questa soluzione ha un nome e un plugin per Wordpress: HIDDY! ***

Categorie: InfoTech Tag: ,

Easy captcha without javascript images and math

September 12th, 2007 4 comments

An easy captcha without javascript, without images, without math. Only a few of CSS and a few of server side (coldfusion) programming: a walkover!
Let’s go!

 

We can begin with a simple standard FORM.

<form name="frm_xxx" action="reg.cfm" method="post">

Nome <input type="text" name="name"><br />

Sito <input type="text" name="site"><br />

Mail <input type="text" name="email"><br />

Commento<br>

<textarea name="comment"></textarea>

</form>

 

What a spam spider do?

It reads page, reads input fields, sends form act http.referrer and inserts some value (spam) into every fields. Perfect!

Let the spider plays its game!

We insert an hidden input with CSS. Human users don’t see it, spider sees it.

 

<!— SYSTEM WITH "NON TRADITIONAL" CAPTHA —>
<div style="visibility:hidden">
Please don’t insert text in the input below. If you do it you can’t comment. <br />
<input type="text" name="hiddenCaptcha" value="" style="width:1px;height:1px;font-size:1px;" />
</div>

 

To hidden it we use a few of CSS code, inline on HTML or we can use a simply class and apply it on DIV or on INPUT…
Pay attention: don’t use

display:none

With "display:none" input isn’t sent to destination page!!! (reg.cfm).

 

Another few seconds. We create a check (server-side) on destination page (reg.cmf): form is OK only when hiddenCaptcha exists and is empty ("").

 

 

<cfif not(isDefined("form.hiddenCaptcha") and form.hiddenCaptcha is "")>

Attention! Form wrong!

<cfabort>

</cfif>

Php version (by DvD):

if ( (array_key_exists("campoNascosto",$_POST)))
{
if ($_POST["campoNascosto"]<>"")
{
die ("Attenzione. Modulo non registrabile!");
}

Asp (old asp) version:

<%
function existsFormParam(name)
existsFormParam = (Request.Form(name).Count = 1)
end function

if (existsFormParam("captcha") and Request.Form("captcha") = "") then
Response.write("ok")
else
Response.write("no")
end if

%>

Et voilà, le jeux sont fait: I tested it from 2 months without a spam comment. Only some comment from really spam users :(
This kind of captcha works on system without javascript too!!!

Thanks to Thisistoboring for his comment on Digg :)

 

Versione italiana.