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

    funzioni utili di controllo variabili

    noto spesso come molti programmatori, anche non proprio novellini, non eseguano alcun controllo dei dati in entrata (solitamente dalle request, querystring o form che siano)

    ho imparato col tempo che controllare ciò che entra nei nostri algoritmi è cosa fondamentale

    non sia mai che qualche furbone trovi la gabola e mandi in palla tutto. detta papale papale

    per questo mi sono sviluppato una serie di funzioni utili (ovviamente da ampliare) che vi presento qui... (sembra una televendita)

    codice:
    '* #######################################
    '* ##FUNC_INT##
    '* @name		cleanLong
    '* @version		1.0.0
    '* @author		imente
    '* @description
    '*   controlla se il valore in entrata è un LONG
    '*   e lo restituisce in tale formato
    '*   nel caso che il valore in entrata non sia LONG
    '*   ne di un tipo compatibile restituisce errore
    '* ---------------------------------------
    '* @params
    '*   argValue	VAR		valore in entrata
    '* ---------------------------------------
    '* @return
    '* LONG		valore in uscita
    '* @#####################################
    
    function cleanLong(argValue)
    	
    	on error resume next
    	
    	if argValue = "" then
    		cleanLong = clng(0)
    	else
    		cleanLong = clng(trim(argValue))
    	end if
    	
    	'overflow
    	if err.number = 6 then response.redirect("errors.asp?code=0") 
    	'tipo non corrispondente
    	if err.number = 13 then response.redirect("errors.asp?code=1") 
    	
    	on error goto 0
    	
    end function
    
    
    
    
    '* #######################################
    '* ##FUNC_INT##
    '* @name		cleanByte
    '* @version		1.0.0
    '* @author		imente
    '* @description
    '*   controlla se il valore in entrata è un BYTE
    '*   e lo restituisce in tale formato
    '*   nel caso che il valore in entrata non sia BYTE
    '*   ne di un tipo compatibile restituisce errore
    '* ---------------------------------------
    '* @params
    '*   argValue	VAR		valore in entrata
    '* ---------------------------------------
    '* @return
    '* BYTE		valore in uscita
    '* @#####################################
    
    function cleanByte(argValue)
    	
    	on error resume next
    	
    	if argValue = "" then
    		cleanByte = cbyte(0)
    	else
    		cleanByte = cbyte(trim(argValue))
    	end if
    	
    	'overflow
    	if err.number = 6 then response.redirect("errors.asp?code=0") 
    	'tipo non corrispondente
    	if err.number = 13 then response.redirect("errors.asp?code=1") 
    	
    	on error goto 0
    	
    end function
    
    '* #######################################
    '* ##FUNC_INT##
    '* @name		cleanLimitedByte
    '* @version		1.0.0
    '* @author		imente
    '* @description
    '*   controlla se il valore in entrata è un BYTE
    '*   e se è minore di un certo valore
    '* ---------------------------------------
    '* @params
    '*   argValue	VAR		valore in entrata
    '* ---------------------------------------
    '* @return
    '* BYTE		valore in uscita
    '* @#####################################
    
    function cleanLimitedByte(argValue, argMax)
    	dim tmpvalue
    	
    	tmpvalue = cleanByte(argValue)
    	
    	if tmpvalue > cleanByte(argMax) then response.redirect("errors.asp?code=3&arg=" & argMax) 
    	
    	cleanLimitedByte = tmpvalue
    	
    end function
    
    
    
    '* #######################################
    '* ##FUNC_INT##
    '* @name		cleanString
    '* @version		1.0.0
    '* @author		imente
    '* @description
    '*   controlla se il valore in entrata è un STRING
    '*   e lo restituisce in tale formato
    '*   nel caso che il valore in entrata non sia STRING
    '*   ne di un tipo compatibile restituisce errore
    '* ---------------------------------------
    '* @params
    '*   argValue	VAR		valore in entrata
    '*   argSize	LNG		valore opzionale che indica la dimensione massima
    '* ---------------------------------------
    '* @return
    '* STRING		valore in uscita
    '* @#####################################
    
    function cleanString(byval argValue,argMinSize,argMaxSize)
    	
    	if isnull(argValue) then argValue = ""
    	argValue = replace(trim(argValue),"'","''")
    
    	'*** SE USATE DATABASE MYSQL TOGLIETE IL COMMENTO
    	'argValue = replace(trim(argValue),"\","\\")
    	
    	if argMinSize <> 0 then if clng(len(argValue)) < clng(argMinSize) then response.redirect("errors.asp?code=5&arg=" & argMinSize)
    	if argMaxSize <> 0 then if clng(len(argValue)) > clng(argMaxSize) then response.redirect("errors.asp?code=2&arg=" & argMaxSize)
    	
    	cleanString = argValue
    	
    end function
    
    '* #######################################
    '* ##FUNC_INT##
    '* @name		cleanField
    '* @version		1.0.0
    '* @author		imente
    '* @description
    '*   controlla che un valore sia compreso
    '*   fra quelli indicati
    '* ---------------------------------------
    '* @params
    '*   argValue	STRING		valore in entrata
    '*   argValues	STRING		valori validi
    '* ---------------------------------------
    '* @return
    '* STRING		valore in uscita
    '* @#####################################
    
    function cleanField(argValue, argValues)
    	
    	dim tmpvalue
    	
    	tmpvalue = normalize(argValue, argValues, "$#$FALSE$#$")
    	if tmpvalue = "$#$FALSE$#$" then response.redirect("errors.asp?code=4") 
    	
    	cleanField = tmpvalue
    	
    end function
    
    
    '* #######################################
    '* ##FUNC_INT##
    '* @name		cleanBoolean
    '* @version		1.0.0
    '* @author		imente
    '* @description
    '*   accetta molti formati, e restituisce 0/1
    '* ---------------------------------------
    '* @params
    '*   argValue	VAR		valore in entrata
    '* ---------------------------------------
    '* @return
    '* BYTE		valore in uscita
    '* @#####################################
    
    function cleanBoolean(byval argValue)
    	
    	on error resume next
    
    	if argValue = "1" then argValue = 1
    	if argValue = "0" then argValue = 0
    	if argValue = "True" then argValue = 1
    	if argValue = "False" then argValue = 0
    	if argValue = True then argValue = 1
    	if argValue = False then argValue = 0
    	
    	cleanBoolean = cbyte(argValue)
    	
    	'overflow
    	if err.number = 6 then response.redirect("errors.asp?code=0") 
    	'tipo non corrispondente
    	if err.number = 13 then response.redirect("errors.asp?code=1") 
    	
    	on error goto 0
    	
    end function
    
    '* #######################################
    '* ##FUNC_INT##
    '* @name		cleanDate
    '* @version		1.0.0
    '* @author		imente
    '* @description
    '*    controlla se è una data, altrimenti restituisce vuoto
    '* ---------------------------------------
    '* @params
    '*   argValue	VAR		valore in entrata
    '* ---------------------------------------
    '* @return
    '* DATE/STRING		valore in uscita
    '* @#####################################
    
    function cleanDate(argValue)
    
    	if isDate(argValue) then
    		cleanDate = cdate(argValue)
    	else
    		response.redirect("errors.asp?code=1") 
    	end if
    	
    end function
    
    
    '* #######################################
    '* ##FUNC_INT##
    '* @name		normalize
    '* @version		1.0.0
    '* @author		imente
    '* @description
    '*   normalizza un valore
    '* ---------------------------------------
    '* @params
    '*   argValue	STRING		valore in entrata
    '*   argValues	STRING		valori validi (delimitati da "|")
    '*   argDefault	STRING		valore di default
    '* ---------------------------------------
    '* @return
    '* STRING		valore in uscita
    '* @#####################################
    
    function normalize(argValue, argValues, argDefault)
    
    	dim valuesArray, isPresent
    	
    	isPresent = false
    	valuesArray = split(argValues,"|")
    	
    	dim ii
    	for ii=0 to ubound(valuesArray)
    	
    		if cstr(argValue) = cstr(valuesArray(ii)) then isPresent = true
    	
    	next
    	
    	if isPresent then
    		normalize = argValue
    	else
    		normalize = argDefault
    	end if
    
    end function
    e ovviamente la pagina degli errori
    ERRORS.ASP
    codice:
    <%
    dim skErrorCode, skArgument
    skErrorCode = request.QueryString("code")
    skArgument = request.QueryString("arg")
    
    select case skErrorCode
    	case "0"
    	skErrorDescription = "overflow"
    	case "1"
    	skErrorDescription = "tipo non corrispondente"
    	case "2"
    	skErrorDescription = "lunghezza eccessiva [ max: " & skArgument & " caratteri ]"
    	case "3"
    	skErrorDescription = "numero troppo grande [ delimitazione posta a " & skArgument & " ]"
    	case "4"
    	skErrorDescription = "il valore indicato non è un valore accettato"
    	case "5"
    	skErrorDescription = "la lunghezza minima del campo è di " & skArgument & " caratteri"
    	case "err"
    	skErrorDescription = skArgument
    	case else
    	skErrorDescription = "errore non definito"
    end select
    
    %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
    <title>errore</title>
    </head>
    <body>
    <div style="font-family:tahoma,helvetica,serif;font-size:0.9em;margin-top:100px;text-align:center;width:100%;">
    <pERRORE
    
    <%=skErrorDescription%></p>
    
    
    torna indietro</p>
    </div>
    </body>
    </html>
    ------------------------------------------------------------------------

    vediamo di analizzarli uno per uno

    cleanLong
    preso un valore come unico argomento restituisce un Long.
    nel caso il valore non sia numerico o sia un overflow manda alla pagina di errore

    cleanByte
    preso un valore come unico argomento restituisce un Byte.
    nel caso il valore non sia numerico o sia un overflow manda alla pagina di errore

    cleanLimitedByte
    preso un valore come primo argomento e il valore massimo come secondo argomento restituisce un Byte.
    nel caso il valore non sia numerico, sia un overflow o superi il valore massimo manda alla pagina di errore

    cleanString
    preso un valore stringa, la sua dimensione minima e massima restituisce una stringa valida per l'inserimento dentro a una query SQL.
    nel caso la stringa sia più corta o più lunga delle delimitazioni indicate manda alla pagina di errore

    normalize
    il primo argomento è una stringa, il secondo argomento sono l'insieme delle stringhe valide delimitate da un |, il terzo argomento è il valore da assumere di default nel caso che il primo argomento non sia presente fra le stringhe valide.
    es: normalize("test","pippo|pluto|topolino","paperino" ) restituisce "paperino"
    es: normalize("topolino","pippo|pluto|topolino","paper ino") restituisce "topolino"
    es: normalize("paperino","pippo|pluto|topolino","paper ino") restituisce "paperino"
    nel caso in cui un parametro passato da pagina a pagina possa assumere solo un certo numero di valori predefiniti, questa funzione evita che l'utente cerchi di forzare il valore al di fuori dell'insieme di valori accettati

    cleanField
    il primo argomento è una stringa, il secondo è l'insieme delle stringhe valide delimitata da un |
    il meccanismo è molto simile a NORMALIZE, la differenza è che se il valore passato non viene riconosciuto come valido si viene mandati alla pagina di errore

    cleanBoolean
    preso un valore come unico argomento restituisce un Byte ( di valore 0 o 1).
    nel caso il valore non sia numerico o sia un overflow manda alla pagina di errore

    cleanDate
    controlla e rende una data conforme. se il valore in entrata non è una data o non può essere convertito a data manda alla pagina di errore

    ------------------------------------------------------------------------

    l'utilizzo di queste funzioni è pensato sui valori in entrata (querystring o form) per un controllo immediato prima dell'utilizzo in un algoritmo, oppure per l'inserimento di valori conformi all'interno di una query SQL.

    ovviamente si possono creare ampliamenti su altri tipi di variabili e problemi.

    per qualsiasi dubbio o domanda sono disponibile

    entro breve pubblicherò una pillolina per la gestione completa delle date (sia per visualizzazione che per inserimento in DB)
    san imente saluta

    * http://simonecingano.it *

  2. #2
    è sempre importante farsi una libreria di funzioni, e penso che per molti questa tua "pillola" sarà una buona base di inizio

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.