Notizie dal sito

  • 2008
    20
    Ottobre

    Finalmente abbiamo a disposizione questo bellissimo tool per la progettazione grafica dei nostri database.

    Dal nome si intuisce che questo software è ottimizzato per Mysql, ma credo che con le dovute modifiche nulla vieti di utilizzarlo anche per altri db server in giro per la Rete, dato che alla fin fine esportiamo un sql da importare nel nostro sql server preferito.

    La nuova release è l'evoluzione di un altro software, "Db Designer", che dalla versione 5 è appunto confluito sotto mysql.

    Purtroppo al momento la versione compilata è disponibile solo per coloro che usano distribuzioni ubuntu o comunque della famiglia debian. Per tutti gli altri è disponibile un link da cui scaricare i sorgenti ricompilabili:

     

    ftp://ftp.mysql.com/pub/mysql/download/gui-tools/mysql-workbench-5.1.3-alpha.tar.gz

    Nel caso vogliate verificare l'integrità del tgz eccovi il suo md5:

    ftp://ftp.mysql.com/pub/mysql/download/gui-tools/mysql-workbench-5.1.3-alpha.tar.gz.md5

    Se invece possedete un pc con una distro debian-like come ubuntu eccovi i passaggi da eseguire per l'installazione:

    Procurarsi libctemplate0

    Per ottenere la libreria in questione dovete andare al seguente link:

    Directory google code

    e scaricate l'ultima versione .deb di libctemplate0.

    Una volta scaricata installatela con il seguente comando:

    sudo dpkg -i libctemplate0_0.91-1_i386.deb

    Aggiungere dei repository per apt-get

    Aprite in scrittura il file /etc/apt/sources.list e inserite in fondo le seguenti righe:

    deb ftp://ftp.mysql.com/pub/mysql/download/gui-tools/ubuntu/ binary/
    deb-src ftp://ftp.mysql.com/pub/mysql/download/gui-tools/ubuntu/ source/

    (nota bene che prima di binary e source finali dovete inserire un carattere spazio)

    Nel caso siate più familiari con Synaptics, lanciate quest'ultimo e selezionate dalla voce di menu Impostazioni (o Settings) il sottomenu Sorgenti (o Repository), andate sul secondo tab della pagina e aggiungete le righe che ho citato in precedenza.

    Installiamo il software richiesto

    Tornando alla procedura da riga di comando, dopo aver salvato il file /etc/apt/sources.list lanciate il comando:

    sudo apt-get update

    per aggiornare le informazioni di tutti i vostri repository.

    A questo punto non vi rimane che scrivere:

    sudo apt-get install mysql-workbench

    e alla fine del processo vi ritroverete sul sistema il software tanto agognato con cui potrete cimentarvi anche dal vostro caro pinguino.

    Se usate Synaptics basta far una ricerca, marcare il pacchetto interessato e lanciare ok.

     
  • 2012
    30
    Marzo

    Con questo articolo iniziamo ad esplorare il mondo del javascript, non troppo preso in considerazione negli anni passati ma ultimamente tornato in voga grazie ad Ajax ed al Web 2.0.

    In questo articolo spiegheremo come si può spostare elementi da una select ad un'altra senza dover ricaricare la pagina.

    Un esempio di utilizzo può essere un elenco di libri da comperare. L'utente sposta nel secondo elenco solo i libri che gli interessano e poi invia la richiesta di acquisto.

     

    Lo scenario che ci troveremo di fronte è il seguente:

    preview dell'esempio nel browser

    L'HTML della pagina di prova è presentato di seguito:

    <BODY>
    <select id="primo" name="primo" multiple style="width:150px;height:150px">
    <option value="libro_uno">primo libro</option>
    <option value="libro_due">secondo libro</option>
    <option value="libro_tre">terzo libro</option>
    <option value="libro_quattro">quarto libro</option>
    <option value="libro_cinque">quinto libro</option>
    </select>

    <button name="sposta_dx" onclick="trasferisci(this)" >&gt;&gt;</button>
    <button name="sposta_sx" onclick="trasferisci(this)" >&lt;&lt;</button>

    <select id="secondo" name="secondo" multiple style="width:150px;height:150px"></select>

    <button name="invia" onclick="alert('elenco inviato');" />invia</button>
    </BODY> 

    Il codice Javascript utilizzato per effettuare gli spostamenti è il seguente:

    <script type="text/javascript">

    function trasferisci(obj) {

    var sorgente = ''; 
    var destinatario = '';



    if (obj.name=="sposta_dx") {

    var sorgente = 'primo'; 
    var destinatario = 'secondo';

    } else if (obj.name=="sposta_sx") {

    var sorgente = 'secondo'; 
    var destinatario = 'primo';

    }

    var oSelect = document.getElementById(sorgente);

    for(var i=oSelect.options.length-1; i >= 0; i ) {

    if (oSelect.options[i].selected) {

    var oOption = new Option(oSelect.options[i].text, oSelect.options[i].value); document.getElementById(destinatario).options.
    add(oOption); 
    oSelect.remove(i);

    }

    }

    }

    </script>

    Come potete vedere dal codice nel momento in cui clicchiamo su uno dei tasti, chiamati rispettivamente sposta_dx e sposta_sx, viene chiamata la funzione javascript trasferisci a cui è passato uno dei due oggetti di cui parlavamo prima.

    In un primo momento si analizza il nome dell'oggetto passato, per capire quale delle due select sarà la sorgente e quale la destinataria dei valori da spostare, mentre in un secondo tempo viene eseguito il ciclo for che copia l'elemento, o gli elementi selezionati e li cancella dalla lista originaria.

    Se volete vedere in azione l'esempio cliccate su questo url:

    http://www.pignatelli.com/demo/js/sposta-elementi-select/index.html

     

  • 2012
    30
    Marzo

    Nella sezione download è disponibile la classe Dir versione 2.0, utilizzabile per effettuare operazioni su una directory.

    Le nuove funzionalità aggiunte sono le seguenti:

    • Calcolo dello spazio totale occupato dalla directory.
    • Calcolo del numero di files contenuti.
    • Calcolo del numero di subdirectory contenute.

    Per scaricarlo andare nella sottosezione PHP nella sezione download.

    Saluti a tutti

  • 2012
    30
    Marzo

    Nella sezione download è disponibile la classe Dir, utilizzabile per effettuare operazioni su una directory.

     

    al momento è disponibile solo la creazione di una directory senza dover necessariamente essere già presente nel file system tutto il percorso superiore dell'albero.

    Per scaricarlo andare nella sottosezione PHP nella sezione download.

    Saluti a tutti

  • 2012
    30
    Marzo

    Requisiti :

     

    • nessuno

    Conoscenze PHP consigliate:

    • La proprietà static applicata alle variabili;
    • Sintassi versione 5;
    • L'istruzione require_once;
    • Programmazione ad oggetti.

    Capita spesso che durante l'esecuzione di uno script si utilizzi ripetutamente la stessa classe.

    Per ogni richiamo dell'istanza dell'oggetto viene allocata memoria. Un esempio è la classe che gestisce la connessione al database, utilizzata più volte durante l'elaborazione.

    Come fare allora per risparmiare la memoria allocata ?

    Fortunatamente esiste un filone della programmazione che si occupa di quest'argomento: dare una soluzione ai problemi che quotidianamente si presentano ai programmatori, in modo da risparmiare tempo e non dover ogni volta reinventare “la ruota”.

    L'oggetto che utilizzeremo per la soluzione al problema dell'allocazione esponenziale di memoria è il Singleton Pattern.

     

    Come esempio creiamo una classe HelloWorld che sarà richiamata tramite il suo Singleton in ogni punto del programma.

    I file che andremo ad utilizzare sono i seguenti:

    • HelloWolrd.php
    • SingletonHelloWorld.php
    • testSingletonHelloWorld.php

     

    HelloWorld.php

    La classe HelloWorld è utilizzata solamente come classe di prova, e può essere sostituita con  una qualsiasi classe.

    class HelloWorld {

    private $message;

    public function __construct($message='') {

    $this->setMessage($message);

    }

    public function setMessage($message) {

    $this->message = $message;

    }

    public function getMessage() {

    return $this->message;

    }

    }

    Il compito di questa classe è immagazzinare un messaggio e visualizzarlo a richiesta.

     

    SingletonHelloWorld.php

    Questa classe servirà per recuperare un'istanza già creata di HelloWorld, o in caso contrario crearne una.

    require_once('HelloWorld.php');

     

    class SingletonHelloWorld {

    static private $object;

    private function __construct() {}

    static public function getInstance() {

    if (!is_object(self::$object)) {

    self::$object = new HelloWorld();

    }

    return self::$object;

    }

    }

    Il costruttore di questa classe è dichiarato private, in modo che non sia possibile istanziarla.

    Il punto focale è la funzione statica getInstance, dove isi controlla se la proprietà $object della classe contiene già un oggetto. Nel caso la risposta sia negativa istanziamo il tipo di classe che vogliamo restituire, HelloWorld. Infine restituiamo l'oggetto richiesto.

    Come si può vedere la proprietà $object ha livello di accesso private, in modo che non sia direttamente richiamabile dall'esterno, ed è di tipo static, per poterne permettere la condivisione fra le varie chiamate.

     

    testSingletonHelloWorld.php

    Questo è un file di testo utilizzato per testare il funzionamento delle classi presentate in precedenza.

    require_once('SingletonHelloWorld.php');

    define('NEWLINE', '<br />');

    $obj1 = SingletonHelloWorld::getInstance();
    echo "Id dell'oggetto \$obj1: ".$obj1.
    NEWLINE;

    $obj1->setMessage("Salve Mondo");

    a();

    b();

    echo $obj1->getMessage();

    function a() {

    $obj2 = SingletonHelloWorld::getInstance();
    echo "Id dell'oggetto 
    \$obj2: ".$obj2.NEWLINE;

    echo $obj2->getMessage();

    $obj2->setMessage("Ancora salve Mondo");

    }

    function b() {

    $obj3 = SingletonHelloWorld::getInstance();
    echo "Id dell'oggetto \$obj3: ".$obj3.NEWLINE;

    echo $obj3->getMessage();

    $obj3->setMessage("Terzo salve Mondo");

    }

    Se fate girare questo script all'interno di apache o da linea di comando (in quest'ultimo caso cambiate il valore dell'istruzione define in testSingletonHelloWrold.php da '<br />' a '\n') otterrete il seguente output:

    Id dell'oggetto $obj1: Object id #1
    Id dell'oggetto $obj2: Object id #1
    Salve Mondo
    Id dell'oggetto $obj3: Object id #1
    Ancora salve Mondo
    Terzo salve Mondo

    Come potete notare l'id dell'oggetto è sempre lo stesso, che significa che abbiamo creato una sola istanza dell'oggetto durante tutta l'elaborazione, mentre la scritta contenuta in esso varia ogni volta che lo recuperiamo, quindi lo stato interno ad esso cambia nonostante lo richiamiamo in punti diversi dello script.
     

    se volete provate a lanciare il seguente codice:

    require_once('HelloWorld.php');

    define('NEWLINE', '<br />');

    $obj1 = new HelloWorld();
    echo "Id dell'oggetto \$obj1: ".$obj1.
    NEWLINE;

    $obj1->setMessage("Salve Mondo");

    a();

    b();

    echo $obj1->getMessage();

    function a() {

    $obj2 = new HelloWorld();
    echo "Id dell'oggetto 
    \$obj2: ".$obj2.NEWLINE;

    echo $obj2->getMessage();

    $obj2->setMessage("Ancora salve Mondo");

    }

    function b() {

    $obj3 = new HelloWorld();
    echo "Id dell'oggetto \$obj3: ".$obj3.NEWLINE;

    echo $obj3->getMessage();

    $obj3->setMessage("Terzo salve Mondo");

    }

    Questa volta l'output sarà il seguente:

    Id dell'oggetto $obj1: Object id #1
    Id dell'oggetto $obj2: Object id #2

    Id dell'oggetto $obj3: Object id #2

    Salve Mondo

    Dato che ogni volta viene istanziato un nuovo oggetto non avremo scritto nulla a video, tranne nell'ultimo caso ma solo perchè utilizziamo l'oggetto istanziato per primo.

    Non lasciatevi ingannare dal numero identico di id per l'oggetto 2 e 3, dato che il loro contenuto è sempre vuoto, quindi non sono per niente collegati fra loro.

    Bene direi che il tutorial è giunto alla fine. Nella sezione download troverete il necessario per leggere comodamente offline tutto ciò che vi è stato raccontato e per testare sul vostro server l'esempio funzionante.

     
  • 2012
    30
    Marzo

     

    Requisiti di sistema :

    • Web Server installato;
    • PHP versione 5.0 o superiore;

    Conoscenze PHP consigliate:

    • Sintassi versione 5;
    • L'istruzione include;
    • Programmazione ad oggetti;

    Le conoscenze richieste in questo tutorial potrebbero non servire nella creazione del codice, in quanto si cerca di dare informazioni tali da poter "far camminare" il creatore delle pagine da solo, ma si consiglia lo stesso un'infarinatura generale.

    Questo tutorial è stato testato sotto un Server Linux e Windows, con il PHP versione 5.

    Vi spiegherò come creare una classe che ci permette di separare il layout, ovvero lo strato presentazione, dalla logica dell’applicativo. I file che andremo a creare sono i seguenti:

    • Template.class.php;
    • TemplateException.class.php;
    • File .html presenti nella directory template.

     

    Template.class.php

    All'interno di questo file troviamo la classe Template, le cui parti che ci interessano sono riportate in seguito per completezza:

     

    class Template {

     

    const DELIMIT_SX = '[__';
    const DELIMIT_DX = '__]';

    ..............................

    public function __construct($docRoot='./') { ... }

    public function setDocRoot($docRoot) { ... }

    public function getDocRoot() { ... }

    public function addFiles($files) { ... }

    public function getFile($key='all') { ... }

    public function setVariable($name, $value, $append=false) { ... }

    public function setVariableByVariable($name, $nameBy, $append=false) { ... }

    public function getVariable($name='all') { ... }

    public function getOutput($key, $outputToVideo=false) { ... }

    }

     

    Nelle prime due righe della classe troviamo le costanti che servono per delimitare i tag all'interno dei template. Nel caso vogliate usare altri delimitatori nei vostri file html basta modificare DELIMIT_SX e DELIMIT_DX.

    public function __construct($docRoot='./')
    __construct() rappresenta il costruttore della classe dove viene inizializzato lo stato di default dell’oggetto. il parametro $docRoot contiene il percorso dove sono presenti i file dei template.

    public function setDocRoot($docRoot)
    setDocRoot() setta la proprietà $docRoot con il percorso reale dove risiedono i template html.

    public function getDocRoot()
    getDocRoot() recupera il valore presente nella proprietà $docRoot.

    public function addFiles($files)
    addFiles() permette di registrare nella proprietà $files il contenuto dei file template che andremo ad utilizzare, passati tramite il paremtro di input del metodo stesso. Nel caso il parametro di input non sia un array oppure uno dei suoi elementi non rappresenti un template presente nel file system verrà generata un’eccezione.

    public function getFile($key='all')
    metodo recupera uno o più elementi della proprietà $files della classe. Nel caso lo si utilizzi senza passare alcun parametro sarà recuperato un array contenente i nomi dei template, in caso contrario restituirà il contenuto del file il cui nome è contenuto in $key.

    public function setVariable($name, $value, $append=false)
    setVariable() permette di valorizzare un elemento della proprietà $values; il parametro $name contiene il nome della variabile presente in un template html, mentre value è il valore da sostituire alla variabile. $append ci indica se il nuovo valore per la variabile andrà a sostituire quello già presente oppure sarà a quest’ultimo accodato.

    public function setVariableByVariable($name, $nameBy, $append=false)
    setVariableByVariable() permette di valorizzare un elemento della proprietà $values; il parametro $name contiene il nome della variabile presente in un template html, mentre $nameBy è il nome di una variabile in un template html il cui valore, se presente in $values, andrà inserito nell’elemento di chiave $name di $values. $append ci indica se il nuovo valore per la variabile andrà a sostituire quello già presente oppure sarà a quest’ultimo accodato.

    public function getVariable($name='all')
    getVariable() recupera il valore presente nella proprietà $values. Se $name è uguale a ‘all’ verrà restituita l’intera proprietà $values della classe, altrimenti il valore contenuto nell’elemento la cui posizione è individuata d name.

    public function parseTemplate($variable, $template, $append=false)
    parseTemplate() prende il contenuto di un template, identificato dal parametro $template, e lo inserisce in una variabile di template, identificata dal parametro $variable; nel caso $append valga true in $variable viene aggiunto il contenuto al valore già presente, in caso contrario il contenuto di $template sovrascrive il vecchio contenuto di $variable. Di seguito si sostituiscono tutte le variabili con il contenuto corrispondente come si nota nel ciclo foreach, ed alla fine viene eseguito il settaggio richiesto.

    public function getOutput($key, $outputToVideo=false)
    getOutput() permette di recuperare l’HTML finale restituendolo o visualizzandolo direttamente a video, in relazione al valore presente nel parametro $outputToVideo. Prima di tutto viene settata la proprietà html della classe tramite il contenuto la cui chiave è definita dal parametro $key; poi si sostituiscono le variabili presente nell’html con i valori appropriati ed infine si esegue l’azione richiesta sui variabili non valorizzate ancora presenti. Per ultimo si decide se restituire l’html di interesse o viasulizzarlo a video direttamente.

    TemplateException.class.php

    Questo file contiene la classe omonima, che estende la classe padre Exception.

    In TemplateException sono presenti solamente le costanti utilizzate per i messaggi di errori personalizzati sull'attraverso di una eccezione.

    File html

    Questi file rappresentano i template che utilizzeremo per creare il layout di una pagina.

    Il contenuto di ogni file sarà dell'HTML vero con in aggiunta i tag personalizzati che useremo per inserire il contenuto che desideriamo. Prendiamo ad esempio il template per il contenitore principale:

    Questi tag saranno nel formato seguente:

     

     

    [__TITLE__] 
    [__CSS__]
    [__JAVASCRIPT__]
    [__META_TAG__]

    [__HEADER_INDEX__]
    [__CONTENT_INDEX__]
    [__FOOTER_INDEX__]

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    Come potete vedere il tag TITLE è racchiuso dai due delimitatori la cui rappresentazione è quella che abbiamo deciso nella classe Template, tramite le due costanti DELIMIT_SX e DELIMIT_DX.

    Nei tag possiamo inserire sia testo semplice che il contenuto di altri template in cui abbiamo sostituito i tag con altro testo o contenuto, per quanti livelli di incastro vogliamo, un pò come il giochino della matrioska, o delle bambole che si incastravano una dentro l'altra.

    giusto perchè non mi prendiate per un vaneggiatore adesso andremo a vedere un esempio di utilizzo di questa classe e delle tecniche annesse di renderizzazione.

    Esempio - creiamo una tabella HTML

    Iniziamo creando la struttura delle directory dell'applicativo, sotto la directory di root del server web:

    I file php di cui abbiamo parlato risiedono nella directory app_template mentre i file html nella sottodirectory template.

    il file di test si chiamerà TemplateTest.test.php, presente in app_template, e conterrà il seguente codice:

     

     

    require_once("Template.class.php");
    $tpl = new Template("template/");

    try {

    $tpl->addFiles(
    array("principal"=>"index.html", 
    "div" => "div.html",
    "table" => "table.html",
    "row" => "tr.html",
    "column" => "td.html"));

    $tpl->setVariable("TITLE", "Pagina di test");

    $tpl->setVariable("HEADER_INDEX", 
    "Questo è il testo inserito dentro la 
    variabile HEADER_INDEX del template 
    index.html");

    $tpl->setVariable("FOOTER", 
    "Sotto importiamo il template footer.html : ");

    $tpl->parseTemplate("FOOTER_INDEX", "footer", true);

    $tpl->setVariable("CONTENT_COLUMN", 
    "cella 1");

    $tpl->parseTemplate("CONTENT_ROW", "column");

    $tpl->setVariable("CONTENT_COLUMN", 
    "cella 2");

    $tpl->parseTemplate("CONTENT_ROW", 
    "column", true);

    $tpl->setVariable("CONTENT_COLUMN", 
    "cella 3");

    $tpl->parseTemplate("CONTENT_ROW", 
    "column", true);

    $tpl->setVariable("CONTENT_COLUMN", 
    "cella 4");

    $tpl->parseTemplate("CONTENT_ROW", 
    "column", true);

    $tpl->setVariable("CONTENT_COLUMN", 
    "cella 5");

    $tpl->parseTemplate("CONTENT_ROW", 
    "column", true);

    $tpl->setVariable("CONTENT_COLUMN", 
    "cella 6");

    $tpl->parseTemplate("CONTENT_ROW", 
    "column", true);

    $tpl->parseTemplate("CONTENT_TABLE", "row");

    $tpl->setVariable("CONTENT_COLUMN", 
    "cella 7");

    $tpl->parseTemplate("CONTENT_ROW", "column");

    $tpl->setVariable("CONTENT_COLUMN", 
    "cella 8");

    $tpl->parseTemplate("CONTENT_ROW", 
    "column", true);

    $tpl->setVariable("CONTENT_COLUMN", 
    "cella 9");

    $tpl->parseTemplate("CONTENT_ROW", 
    "column", true);

    $tpl->setVariable("CONTENT_COLUMN", 
    "cella 10");

    $tpl->parseTemplate("CONTENT_ROW", 
    "column", true);

    $tpl->setVariable("CONTENT_COLUMN", 
    "cella 11");

    $tpl->parseTemplate("CONTENT_ROW", 
    "column", true);

    $tpl->setVariable("CONTENT_COLUMN", 
    "cella 12");

    $tpl->parseTemplate("CONTENT_ROW", 
    "column", true);

    $tpl->parseTemplate("CONTENT_TABLE", 
    "row", true);

    $tpl->parseTemplate("CONTENT_DIV", "table");

    $tpl->setVariable("ALIGN_DIV", "center");

    $tpl->parseTemplate("CONTENT_INDEX", "div");

    $tpl->parseTemplate("output", "principal");

    $tpl->getOutput("output", true);

    } catch (Exception $ex) {

    echo "è stata generata la seguente eccezione: ".
    $ex->getMessage();

    }

    ?>

     

    Andiamo ad analizzare il precedente esempio:

    Come inizio importiamo la classe Template e di seguito creiamo un oggetto che è istanza di quest'ultima.

    Tramite la funzione addFiles carichiamo i template da utilizzare nell'oggetto.

    Subito dopo troviamo righe di codice per settare il valore di una variabile di template:

    $tpl->setVariable("CONTENT_COLUMN", "cella 10");

    oppure effettuare il parsing si un template:

    $tpl->parseTemplate("CONTENT_ROW", "column", true);

    in tutti e due questi metodi se si applica al terzo parametro (di default settato a false) il valore true, il nuovo contenuto sarebbe accodato a quello già esistente nella variabile.

    Le ultime righe degne di interesse sono:

    $tpl->parseTemplate("output", "principal");

    $tpl->getOutput("output", true);

    Nella prima parsiamo il template principale, contenente l'HTML da visualizzare, in una variabile scelta da noi, in questo caso di nome output, mentre nella seconda riga facciamo in modo che il contenuto di output sia mandato a video invece che in una variabile php.

    Tutto il codice è inserito all'interno di un'istruzione try and catch in modo da intercettare eventuali eccezioni e gestirle come meglio crediamo.

    Per ultimo ricordo che le variabili di template devono essere tutte diverse, nel senso che se in due template abbiano una variabile con lo stesso nome, per esempio [__IMMETTI_TESTO__] tutte e due conterranno alla fine del procedimento di sostituzione/parsing l'ultimo valore immesso, e non magari due valori distinti.

    Per ovviare a questo inconveniente consiglio di inserire un prefisso identificativo davanti ad ogni variabile. Nel caso precedente se le due variabili sono all'interno di due template di nome div.html e index.html, la soluzione sarà chiamarle [__DIV_IMMETTI_TESTO__] e [__INDEX_IMMETTI_TESTO__] e non ci saranno più problemi.

    Buon divertimento, e se ritenete questo tutorial interessante fate un link sul vostro sito e/o segnalatelo agli amici.

     

     

  • 2012
    30
    Marzo

     

    Requisiti : Non ci sono requisiti richiesti

    Ho deciso di scrivere questo tutorial, diviso in più lezioni, per far comprendere l'SQL, in quanto tramite le sue istruzioni possiamo in pochi passaggi eseguire comandi che altrimenti avrebbero bisogno magari di decine di righe di codice, senza contare il numero di variabili da utilizzare. Inoltre il codice degli script che andremo a scrivere risulterà molto più compatto e leggibile da parte di chiunque.

    Naturalmente non penso qui di riuscire a fare di voi dei guru dell'SQL, in quanto esistono molti trucchi che si imparano con l'esperienza, e certi tipi di comandi sono anche legati al tipo di linguaggio ed al tipo di database che usiamo; comunque vedrete che alla fine di queste lezioni sarete in grado di svolgere le principali istruzioni, basilari per l'interazioni con i database.

    Partiamo subito parlando dei tipi di istruzioni in SQL, che sono tre:

     

    • DDL -> Data Definition Language;
    • DML -> Data Manipulation Language;
    • TCL -> Transaction Control Language.

     

    DDL -> Data Definition Language

    Fanno parte dei DDL le seguenti istruzioni:

    CREATE

    usata per creare una struttura con un nome secondo specifiche date.

    DROP

    utilizzata per eliminare una struttura esistente

    ALTER

    utilizzata per alterare una struttura esistente

    GRANT

    assegna privilegi a soggetti indicati

    REVOKE

    revoca i privilegi indicati

    RENAME

    usata da alcuni ambienti per dare un nuovo nome agli oggetti

    Ricordiamo che con il termine struttura possiamo riferirci ai seguenti elementi: una tabella, una vista, un sinonimo o un indice.

     

    DML -> Data Manipulation Language

    Fanno parte dei DML le seguenti istruzioni:

    DELETE

    utilizzata per eliminare righe da una tabella o da una vista aggiornabile.

    INSERT

    utilizzata per inserire righe in una tabella o in una vista aggiornabile.

    SELECT

    utilizzata per selezionare dati da righe di una o più tabelle e/o viste.

    UPDATE

    utilizzata per aggiornare i dati nelle righe selezionate di una tabella o di una vista aggiornabile.

    TRUNCATE

    questa istruzione è supportata solo da alcuni database, per esempio Oracle. Permette di eliminare ogni dato contenuto in una tabella senza alterarne la struttura.

     

    TCL -> Transaction Control Language

    Fanno parte dei TCL le seguenti istruzioni:

    COMMIT

    utilizzata per confermare le ultime operazioni impartite dopo che ha avuto luogo una transizione.

    ROLLBACK

    utilizzata per ripristinare le condizioni precedenti alle ultime operazioni impostate.

    SAVEPOINT

    inserisce un punto di salvataggio per annullare solo una parte delle modifiche apportate

    La sintassi completa di queste e di altre istruzioni sarà spiegata in dettaglio più avanti nelle future lezioni.

    Requisiti : Non ci sono requisiti richiesti

    Ho deciso di scrivere questo tutorial, diviso in più lezioni, per far comprendere l'SQL, in quanto tramite le sue istruzioni possiamo in pochi passaggi eseguire comandi che altrimenti avrebbero bisogno magari di decine di righe di codice, senza contare il numero di variabili da utilizzare. Inoltre il codice degli script che andremo a scrivere risulterà molto più compatto e leggibile da parte di chiunque.

    Naturalmente non penso qui di riuscire a fare di voi dei guru dell'SQL, in quanto esistono molti trucchi che si imparano con l'esperienza, e certi tipi di comandi sono anche legati al tipo di linguaggio ed al tipo di database che usiamo; comunque vedrete che alla fine di queste lezioni sarete in grado di svolgere le principali istruzioni, basilari per l'interazioni con i database.

    Partiamo subito parlando dei tipi di istruzioni in SQL, che sono tre:

     

    • DDL -> Data Definition Language;
    • DML -> Data Manipulation Language;
    • TCL -> Transaction Control Language.

     

    DDL -> Data Definition Language

    Fanno parte dei DDL le seguenti istruzioni:

    CREATE

    usata per creare una struttura con un nome secondo specifiche date.

    DROP

    utilizzata per eliminare una struttura esistente

    ALTER

    utilizzata per alterare una struttura esistente

    GRANT

    assegna privilegi a soggetti indicati

    REVOKE

    revoca i privilegi indicati

    RENAME

    usata da alcuni ambienti per dare un nuovo nome agli oggetti

    Ricordiamo che con il termine struttura possiamo riferirci ai seguenti elementi: una tabella, una vista, un sinonimo o un indice.

     

    DML -> Data Manipulation Language

    Fanno parte dei DML le seguenti istruzioni:

    DELETE

    utilizzata per eliminare righe da una tabella o da una vista aggiornabile.

    INSERT

    utilizzata per inserire righe in una tabella o in una vista aggiornabile.

    SELECT

    utilizzata per selezionare dati da righe di una o più tabelle e/o viste.

    UPDATE

    utilizzata per aggiornare i dati nelle righe selezionate di una tabella o di una vista aggiornabile.

    TRUNCATE

    questa istruzione è supportata solo da alcuni database, per esempio Oracle. Permette di eliminare ogni dato contenuto in una tabella senza alterarne la struttura.

     

    TCL -> Transaction Control Language

    Fanno parte dei TCL le seguenti istruzioni:

    COMMIT

    utilizzata per confermare le ultime operazioni impartite dopo che ha avuto luogo una transizione.

    ROLLBACK

    utilizzata per ripristinare le condizioni precedenti alle ultime operazioni impostate.

    SAVEPOINT

    inserisce un punto di salvataggio per annullare solo una parte delle modifiche apportate

    La sintassi completa di queste e di altre istruzioni sarà spiegata in dettaglio più avanti nelle future lezioni.

    Requisiti : Non ci sono requisiti richiesti

    Ho deciso di scrivere questo tutorial, diviso in più lezioni, per far comprendere l'SQL, in quanto tramite le sue istruzioni possiamo in pochi passaggi eseguire comandi che altrimenti avrebbero bisogno magari di decine di righe di codice, senza contare il numero di variabili da utilizzare. Inoltre il codice degli script che andremo a scrivere risulterà molto più compatto e leggibile da parte di chiunque.

    Naturalmente non penso qui di riuscire a fare di voi dei guru dell'SQL, in quanto esistono molti trucchi che si imparano con l'esperienza, e certi tipi di comandi sono anche legati al tipo di linguaggio ed al tipo di database che usiamo; comunque vedrete che alla fine di queste lezioni sarete in grado di svolgere le principali istruzioni, basilari per l'interazioni con i database.

    Partiamo subito parlando dei tipi di istruzioni in SQL, che sono tre:

     

    • DDL -> Data Definition Language;
    • DML -> Data Manipulation Language;
    • TCL -> Transaction Control Language.

     

    DDL -> Data Definition Language

    Fanno parte dei DDL le seguenti istruzioni:

    CREATE

    usata per creare una struttura con un nome secondo specifiche date.

    DROP

    utilizzata per eliminare una struttura esistente

    ALTER

    utilizzata per alterare una struttura esistente

    GRANT

    assegna privilegi a soggetti indicati

    REVOKE

    revoca i privilegi indicati

    RENAME

    usata da alcuni ambienti per dare un nuovo nome agli oggetti

    Ricordiamo che con il termine struttura possiamo riferirci ai seguenti elementi: una tabella, una vista, un sinonimo o un indice.

     

    DML -> Data Manipulation Language

    Fanno parte dei DML le seguenti istruzioni:

    DELETE

    utilizzata per eliminare righe da una tabella o da una vista aggiornabile.

    INSERT

    utilizzata per inserire righe in una tabella o in una vista aggiornabile.

    SELECT

    utilizzata per selezionare dati da righe di una o più tabelle e/o viste.

    UPDATE

    utilizzata per aggiornare i dati nelle righe selezionate di una tabella o di una vista aggiornabile.

    TRUNCATE

    questa istruzione è supportata solo da alcuni database, per esempio Oracle. Permette di eliminare ogni dato contenuto in una tabella senza alterarne la struttura.

     

    TCL -> Transaction Control Language

    Fanno parte dei TCL le seguenti istruzioni:

    COMMIT

    utilizzata per confermare le ultime operazioni impartite dopo che ha avuto luogo una transizione.

    ROLLBACK

    utilizzata per ripristinare le condizioni precedenti alle ultime operazioni impostate.

    SAVEPOINT

    inserisce un punto di salvataggio per annullare solo una parte delle modifiche apportate

    La sintassi completa di queste e di altre istruzioni sarà spiegata in dettaglio più avanti nelle future lezioni.

    Requisiti : Non ci sono requisiti richiesti

    Ho deciso di scrivere questo tutorial, diviso in più lezioni, per far comprendere l'SQL, in quanto tramite le sue istruzioni possiamo in pochi passaggi eseguire comandi che altrimenti avrebbero bisogno magari di decine di righe di codice, senza contare il numero di variabili da utilizzare. Inoltre il codice degli script che andremo a scrivere risulterà molto più compatto e leggibile da parte di chiunque.

    Naturalmente non penso qui di riuscire a fare di voi dei guru dell'SQL, in quanto esistono molti trucchi che si imparano con l'esperienza, e certi tipi di comandi sono anche legati al tipo di linguaggio ed al tipo di database che usiamo; comunque vedrete che alla fine di queste lezioni sarete in grado di svolgere le principali istruzioni, basilari per l'interazioni con i database.

    Partiamo subito parlando dei tipi di istruzioni in SQL, che sono tre:

     

    • DDL -> Data Definition Language;
    • DML -> Data Manipulation Language;
    • TCL -> Transaction Control Language.

     

    DDL -> Data Definition Language

    Fanno parte dei DDL le seguenti istruzioni:

    CREATE

    usata per creare una struttura con un nome secondo specifiche date.

    DROP

    utilizzata per eliminare una struttura esistente

    ALTER

    utilizzata per alterare una struttura esistente

    GRANT

    assegna privilegi a soggetti indicati

    REVOKE

    revoca i privilegi indicati

    RENAME

    usata da alcuni ambienti per dare un nuovo nome agli oggetti

    Ricordiamo che con il termine struttura possiamo riferirci ai seguenti elementi: una tabella, una vista, un sinonimo o un indice.

     

    DML -> Data Manipulation Language

    Fanno parte dei DML le seguenti istruzioni:

    DELETE

    utilizzata per eliminare righe da una tabella o da una vista aggiornabile.

    INSERT

    utilizzata per inserire righe in una tabella o in una vista aggiornabile.

    SELECT

    utilizzata per selezionare dati da righe di una o più tabelle e/o viste.

    UPDATE

    utilizzata per aggiornare i dati nelle righe selezionate di una tabella o di una vista aggiornabile.

    TRUNCATE

    questa istruzione è supportata solo da alcuni database, per esempio Oracle. Permette di eliminare ogni dato contenuto in una tabella senza alterarne la struttura.

     

    TCL -> Transaction Control Language

    Fanno parte dei TCL le seguenti istruzioni:

    COMMIT

    utilizzata per confermare le ultime operazioni impartite dopo che ha avuto luogo una transizione.

    ROLLBACK

    utilizzata per ripristinare le condizioni precedenti alle ultime operazioni impostate.

    SAVEPOINT

    inserisce un punto di salvataggio per annullare solo una parte delle modifiche apportate

    La sintassi completa di queste e di altre istruzioni sarà spiegata in dettaglio più avanti nelle future lezioni.

     

     

  • 2012
    30
    Marzo

     

    Requisiti: non ci sono requisiti richiesti

    In questa lezione parleremo dei tipi di dati presenti nell'SQL e forniremo un elenco delle parole chiave del linguaggio.

     

    Tipi di dato

    Esistono tre principali tipi di dato:

    • Numeri;
    • Caratteri;
    • Tempo;

    Rientrano nella prima categoria quelli rappresentabili tramite numeri interi oppure in virgola mobile.
    Nella seconda categoria possiamo racchiudere i singoli caratteri o le stringhe.
    Nell'ultimo caso racchiudiamo le date, gli orari e gli intervalli.

     

    Parole riservate del linguaggio SQL

    Qui di seguito forniamo un elenco delle parole riservate del linguaggio SQL. Con parole riservate si intendono parole che il linguaggio interpreta come istruzioni e non stringhe comuni.

    ABSOLUTE BEFORE
    ACTION BEGIN
    ACTOR BETWEEN
    ADD BIT
    AFTER BIT_LENGTH
    ALIAS BOOLEAN
    ALL BOTH
    ALLOCATE BREADTH
    ALTER BY
    AND CASCADE
    ANY CASCADED
    ARE CASE
    AS CAST
    ASC CATALOG
    ASSERTION CHAR
    ASYNC CHAR_LENGTH
    AT CHARACTER
    ATTRIBUTES CHARACTER_LENGTH
    AUTHORIZATION CHECK
    AVG CLASS
    CLOSE CURRENT_PATH
    COALESCE CURRENT_TIME
    COLLATE CURRENT_STAMP
    COLLATION CURRENT_USER
    COLUMN CURSOR
    COMMIT CYCLE
    COMPLETION DATA
    CONNECT DATE
    CONNECTION DAY
    CONSTRAINT DEALLOCATE
    CONSTRAINTS DEC
    CONSTRUCTOR DECIMAL
    CONTINUE DECLARE
    CONVERT DEFAULT
    CORRESPONDING DEFERRABLE
    COUNT DEFERRED
    CREATE DELETE
    CROSS DEPTH
    CURRENT DESC
    CURRENT_DATE DESCRIBE
    DESCRIPTOR  

    DESIGNATOR

     

    DESTROY

     
    DESTRUCTOR  

    DIAGNOSTICS

     

    DICTIONARY

     
    DISCONNECT  
       

     

  • 2012
    30
    Marzo

    Requisiti :

    • Server con IIS ( Internet Information Service), o PWS (Personal Web Server), installato;
    • Creazione file .mdb (formato Access) per inserire i messaggi creati dai visitatori;

     

    Vi piacerebbe che i visitatori del vostro sito vi lasciassero dei messaggi di saluto o commenti sul vostro lavoro ? Ora con questo tutorial sarà possibile.

    Per prima cosa dobbiamo creare il file di Access guestbook.mdb che conterrà il database. Creaiamo una tabella di nome guestbook con i seguenti campi :

    • ID : campo di tipo Contatore, univoco;
    • Nome : campo di tipo Testo contenente il nome del visitatore, lungo 255 caratteri;
    • Data : campo di tipo Data;
    • Ora : campo di tipo Orario;
    • Testo : campo di tipo Memo;
    • Email : campo di tipo testo, lungo 50 caratteri.

    In questo tutorial si inserirà anche il codice per la paginazione dei risultati, cioè sarà possibile visualizzare un certo numero di record alla volta, ma si può anche tralasciare se non lo si vuole utilizzare.

    le prime righe di codice ASP da inserire nella pagina di visualizzazione dei record esistenti , che io chiamerò index.asp, sono le seguenti :

     

     

    1. <%
    2. DIM valore, contatore, SqlString, ObjConn, ObjRS
    3. valore=Request("valore")
    4. if valore = "" then
    5. valore = 1
    6. end if
    7. Set ObjConn = Server.CreateObject("ADODB.Connection")
    8. ObjConn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" &
    server.MapPath("/database/guestbook.mdb")
    9. SqlString = "SELECT * FROM guestbook ORDER BY ID DESC"
    10. Set ObjRS = Server.CreateObject("ADODB.Recordset")
    11. ObjRS.open SqlString, ObjConn, 1, 3
    12. ObjRS.PageSize = 4
    13. ObjRS.AbsolutePage = CInt(valore)
    14. if (CInt(valore) > 1) then
    15. %>
    16. << indietro |
    17. <% end if
    18. if (CInt(valore) < ObjRS.PageCount) then %>
    19. avanti >>
    20. <%
    21. end if
    22. For contatore=1 To 4
    23. if not ObjRS.EOF then
    24. %>
    25. [qui inseriamo la visualizzazione dei record, spiegata più avanti]
    26. <%
    27. ObjRS.MoveNext
    28. end if
    29. next
    30. ObjRS.Close
    31. SET ObjRS = NOTHING
    32. ObjConn.Close
    33. SET ObjConn = NOTHING
    34. %>

    Analizziamo il codice precedente :

    Nella riga 1 apriamo lo script ASP;

    Nella riga 2 dichiariamo le variabili che utilizzeremo nello script;

    Nella riga 3 recuperiamo il numero proveniente dalla riga di query del browser;

    Nelle righe 4, 5, 6 controlliamo se la variabile valore, che ci servirà per la paginazione, ha un valore assegnato, altrimenti gli assegniamo di default 1;

    Nella riga 7 Creo l'oggetto utilizzato per la connessione al database;

    Nella riga 8 effettuo la connessione al database, passando come parametro il percorso relativo alla radice del vostro sito;

    Nella riga 9 scrivo nella variabile SqlString la stringa di interrogazione al database;

    Nella riga 10 Creo l'oggetto utilizzato per l'interrogazione al database;

    Nella riga 11 effettuiamo l'interrogazione al database, i numeri devono essere lasciati così come sono, altrimenti la paginazione non funziona;

    Nella riga 12 settiamo quanti record per pagina vogliamo che siano visualizzati, per esempio se i record nella tabella sono 12, e noi scriviamo 4, avremo 3 pagine contenenti 4 record ciascuna;

    Nella riga 13 selezioniamo la pagina da visualizzare;

    Nella righe dalla 14, alla 21 se non presente assegniamo di default alla variabile valore, quest'ultima ci servirà per la paginazione;

    Nelle righe dalla 22 alla 29 eseguiamo il ciclo for che ci permette di visualizzare i record estratti per pagina (nel nostro caso ne visualizzo 4). Se raggiungiamo la fine dei record estratti prima di 4 non visualizziamo nulla, altrimenti generiamo la tabella che conterrà il saluto del visitatore;

    Il resto delle righe di codice servono per chiudere e liberare gli oggetti che avevamo allocato per il database;

    Ora dovete creare una pagina (la chiameremo aggiorna.asp) dove inserire un form con nell'action la pagina che inserirà i valori dei campi nel database.

    Di seguito potete vedere il codice per creare la pagina chiamata aggiorna.asp, contenente un form per inserimento dei saluti del visitatore del vostro sito web :

    1. <%
    2. DIM ObjConn, SqlString, nome, email, testo
    3. nome = Trim( Request("nome") )
    4. email = Trim( Request("email") )
    5. testo = Trim( Request("testo") )
    6. Set ObjConn = Server.CreateObject("ADODB.Connection")
    7. ObjConn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & server.MapPath("/database/guestbook.mdb")
    8. SqlString = "INSERT INTO guestbook (Nome, Email, Testo, Data, Ora) VALUES ('" & nome & "', '" & email & "', '" & testo & "', '" & Date() & "', '" &_
    Time() & "')"
    9. ObjConn.Execute SqlString
    10. ObjConn.Close
    11. SET ObjConn = NOTHING
    12. %>

     

    Analizziamo il codice precedente :

    Nella riga 1 apriamo lo script ASP;

    Nella riga 2 dichiariamo le variabili che utilizzeremo nello script;

    Nella riga 3, 4, 5 recuperiamo i valori provenienti dal form e li inseriamo nelle variabili;

    Nella riga 6 Creo l'oggetto utilizzato per la connessione al database;

    Nella riga 7 effettuo la connessione al database, passando come parametro il percorso relativo alla radice del vostro sito;

    Nella riga 8 scrivo nella variabile SqlString la stringa di interrogazione al database;

    Nella riga 9 Eseguo la query sul database;

    Il resto delle righe di codice servono per chiudere e liberare gli oggetti che avevamo allocato per il database;

    Questo è tutto ciò di cui avete bisogno per creare una contatore.

    Per ultimo alcuni piccoli consigli:

    1- Se avete accesso alla macchina su cui risiede il sito, allora ponete i vostri database in una sottodirectory della directory principale dell'hard disk, per esempio C:\database\guestbook.mdb.

    Così facendo non rischiate che se un utente web conosce il percorso nel sito dove risiede il database possa scaricarlo.

    Altrimenti se io avessi scritto http://www.miosito.com/mdb-database/guestbook.mdb, avrei visto apparire la finestrella di Explorer che mi chiedeva se volevo scaricare sul mio PC il file in oggetto; direi che non è molto bello! Se non avete invece l'accesso alla macchina in questione dove risiede il vostro sito, chiedete al system-administrator di settarvi la directory in modo che non si possano scaricare i file in essa contenuti, ma che si possano leggere e modificare però.

    2- Se volete ripulire il database di esempio allegato con le pagine che potete scaricare, dovete eseguire la seguente istruzione SQL : "DELETE FROM guestbook", così ripulirete tutta la tabella guestbook nel database.

    Nella sezione Download insieme a questo tutorial troverete dei file di esempio per verificare tramite una dimostrazione reale il funzionamento di ciò di cui si è parlato nelle precedenti pagine.

    Saluti a tutti e buon divertimento.

  • 2012
    30
    Marzo

    Requisiti :

    • Server con IIS ( Internet Information Service) installato;
    • Creazione file .mdb (formato Access) per il numero delle visite;

    Conoscenze ASP consigliate:

    • Le variabili Session;
    • Il file Global.asa;
    • L'istruzione #include;

    In questo tutorial vi spiegherò come creare un contatore per il proprio sito.

    Dovete creare un file Access contenente un solo campo, chiamato Visite, di tipo numerico, appartenente alla tabella conteggio; il nome del file sarà contatore.mdb.

    Poi dovete creare il file Global.asa da inserire nella directory radice del nostro sito; questo file viene richiamato dal server ogni volta che un utente accede al sito tramite il browser (e.s. Netscape o Explorer), e viene eseguito il codice in esso contenuto nelle funzioni Application_OnStart() e Session_OnStart().

    Se invece chiudiamo la finestra del browser e quindi abbandoniamo il sito verrà eseguito il codice all'interno delle funzioni Session_OnEnd() e Application_OnStart().

    Non è detto che debbano essere presenti tutte e quattro le funzioni all'interno del file,questo dipende dalla necessità del programmatore di utilizzarle tutte, alcune o nessuna.

     

     

    Di seguito è inserito il codice da inserire nel caso volessimo avere un contatore nelle nostre pagine:

    1. <SCRIPT LANGUAGE=VBScript RUNAT=Server>
    2. Sub Session_OnStart()
    3. Session("entrato")=FALSE
    4. Session.Timeout = 40
    5. End Sub
    6. Sub Session_OnEnd()
    7. Session("entrato")=FALSE
    8. End Sub
    9. </SCRIPT>

    Analizziamo queste righe di codice.

    La riga 1 indica che le righe che seguono appartengono ad uno script che gira sul lato server ed è scritto tramite il linguaggio VBScript.

    Nella riga 2 inizia la funzione Session_OnStart() che racchiude il codice che viene eseguito quando entriamo nel sito.

    Nella riga 3 viene creata la variabile di sessione entrato, una per ogni utente, che indica se abbiamo già aumentato di un'unità il contatore del sito.

    Nella riga 4 settiamo il tempo della sessione del visitatore, cioè dopo 40 minuti se l'utente starà ancora navigando nel nostro sito il contatore sarà aumentato un'altra volta.

    La riga 5 chiude la funzione.

    Dalla riga 6 alla 8 viene eseguita la funzione Session_OnEnd(), richiamata appena usciamo dal sito, chiudendo la finestra del browser.

    La riga 9 chiude lo script.

     

    1. <%
    2 Function IncrementaContatore(percorso_connessione)
    3. DIM ObjConn, ObjRS, SqlString, valore
    4. Set ObjConn = Server.CreateObject("ADODB.Connection")
    5. ObjConn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & server.MapPath(percorso_connessione)
    6. SqlString = "SELECT Visite FROM conteggio"
    7. SET ObjRS = ObjConn.Execute(SqlString)
    8. if Session("entrato") = FALSE then
    9. Session("entrato") = TRUE
    10. valore = ObjRS("Visite") + 1
    11. else
    12. valore = ObjRS("Visite ")
    13. end if
    14. ObjRS.Close
    15. Set ObjRS = NOTHING
    16. SqlString = "UPDATE conteggio SET Visite =" & valore
    17. ObjConn.Execute SqlString
    18. ObjConn.Close
    19. Set ObjConn = NOTHING
    20 IncrementaContatore = valore
    21. End Function
    22. %>

    Analizziamo lo script:

    Nella riga 1 apriamo lo script.

    Nella riga 2 dichiariamo la funzione, a cui passiamo una stringa che contenente il percorso relativo dove risiede il database; vuol dire che se il nostro contatore.mdb risiede nella sottodirectory /db del nostro sito noi dovremo passare alla funzione la stringa "/db/contatore.mdb".

    Nella riga 3 dichiariamo le variabili che utilizzeremo nello script.

    Nella riga 4 creaiamo l'oggetto Connection, che conterrà diciamo la connessione al database.

    Nella riga 5 apriamo la connessione al database.

    Nella riga 6 scriviamo nella variabile a sinistra l'istruzione SQL che vogliamo eseguire.

    Nella riga 7 creiamo l'oggetto che conterrà il risultato della nostra query SQL e poniamo il risultato in esso tramite l'istruzione a destra.

    Nella riga 8 controlliamo il valore della variabile di sessione "entrato", se è FALSE allora eseguiamo le righe 9 e 10, cioè settiamo la variabile di sessione a TRUE e poniamo nella variabile "valore" il valore estratto dal database incrementato di uno, perché questo è un nuovo utente; se invece l'utente è già presente nel sito nella riga 12 poniamo il numero di visitatori estratto dal database nella variabile valore senza incrementarlo.

    Nella riga 13 chiudiamo l'istruzione if.

    Nelle righe 14 e 15 chiudiamo l'oggetto Recordset e liberiamo la memoria da esso occupata.

    Nella riga 16 scriviamo nella variabile a sinistra l'istruzione SQL che vogliamo eseguire.

    Nella riga 17 eseguiamo l'istruzione SQL.

    Nelle righe 18 e 19 chiudiamo l'oggetto Connection e liberiamo la memoria da esso occupata.

    Nella riga 20 facciamo in modo che la funzione restituisca allo script che l'ha chiamata il valore dei visitatori fino a quel momento sul sito.

     

    Questo è tutto ciò di cui avete bisogno per creare una contatore.

    Per ultimo alcuni piccoli consigli:

    1- Se avete accesso alla macchina su cui risiede il sito, allora ponete i vostri database in una sottodirectory della directory principale dell'hard disk, per esempio C:\database\password.mdb.

    Così facendo non rischiate che se un utente web conosce il percorso nel sito dove risiede il database possa scaricarlo.

    Altrimenti se io avessi scritto http://www.miosito.com/mdb-database/password.mdb, avrei visto apparire la finestrella di Explorer che mi chiedeva se volevo scaricare sul mio PC il file in oggetto; direi che non è molto bello! Se non avete invece l'accesso alla macchina in questione dove risiede il vostro sito, chiedete al system-administrator di settarvi la directory in modo che non si possano scaricare i file in essa contenuti, ma che si possano leggere e modificare però.

    2- Create una directory librerie e tramite una include richiamate la funzione IncrementaContatorel('percorso_database') creata in un file che risiede nella directory librerie, così facendo ottimizzerete il riutilizzo del codice.

    Insieme a questo tutorial troverete dei file di esempio per verificare tramite una dimostrazione reale il funzionamento di ciò di cui si è parlato nelle precedenti pagine.

    Saluti a tutti e buon divertimento.

Pagine