Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352

    [*] Trasformare un errore di un database in un messaggio per l'utente

    Salve, la domanda è questa, data un'applicazione che lavora con un database, qual è la pratica migliore per trasformare l'errore ottenuto ad esempio con un'operazione di insert in una tabella in un messaggio descrittivo per l'utente?

    Ad esempio, ho una tabella che mantiene gli utenti registrati con nome unico, ed un utente prova a registrarsi con un nome già esistente, ad esempio 'pincopallinno'. Eseguedo la query avrò un errore, ad esempio mysql restituirà qualcosa del tipo:

    duplicate entry 'pincopallino'


    io però all'utente voglio mostrare un messaggio più "comprensibile" tipo:

    "L'utente pincopallino già esiste"


    Se c'è il vincolo che non solo i nomi siano univoci, ma anche le email, mysql mi restituirà lo stesso codice di errore anche se inserisco un valore email gia presente, perchè entrambi sono violazioni di vincoli di chiave.

    Il problema emerge anche nel caso in cui voglia rendere l'applicazione indipendente dalla lingua.

    L'unico escamotage che mi è venuto in mente è di eseguire 'manualmente' dei controlli sulle tabelle prima di effettuare le operazioni. Ad esempio potrei verificare se esiste un utente con quel nome e in tal caso ritornare subito un mio messaggio d'errore significativo; in questo modo riuscirei a risolvere un certo numero di errori comuni dovuti a vincli di integrità sulle tabelle.

    Vorrei sapere se ci sono altri approcci standard al problema.

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  2. #2
    Utente di HTML.it L'avatar di Fox82
    Registrato dal
    Feb 2002
    Messaggi
    459

    Re: [*] Trasformare un errore di un database in un messaggio per l'utente

    Originariamente inviato da anx721
    Salve, la domanda è questa, data un'applicazione che lavora con un database, qual è la pratica migliore per trasformare l'errore ottenuto ad esempio con un'operazione di insert in una tabella in un messaggio descrittivo per l'utente?

    Ad esempio, ho una tabella che mantiene gli utenti registrati con nome unico, ed un utente prova a registrarsi con un nome già esistente, ad esempio 'pincopallinno'. Eseguedo la query avrò un errore, ad esempio mysql restituirà qualcosa del tipo:

    duplicate entry 'pincopallino'


    io però all'utente voglio mostrare un messaggio più "comprensibile" tipo:

    "L'utente pincopallino già esiste"


    Se c'è il vincolo che non solo i nomi siano univoci, ma anche le email, mysql mi restituirà lo stesso codice di errore anche se inserisco un valore email gia presente, perchè entrambi sono violazioni di vincoli di chiave.

    Il problema emerge anche nel caso in cui voglia rendere l'applicazione indipendente dalla lingua.

    L'unico escamotage che mi è venuto in mente è di eseguire 'manualmente' dei controlli sulle tabelle prima di effettuare le operazioni. Ad esempio potrei verificare se esiste un utente con quel nome e in tal caso ritornare subito un mio messaggio d'errore significativo; in questo modo riuscirei a risolvere un certo numero di errori comuni dovuti a vincli di integrità sulle tabelle.

    Vorrei sapere se ci sono altri approcci standard al problema.

    E' un problema che mi sono sempre posto anch'io...

    Il preventivo forse è il metodo più efficace, perchè ti permette di dare all'utente informazioni dettagliate su ciò che sta immettendo.
    Però è anche il meno efficiente (devi comunque accedere due volte al db, mentre interpretando gli errori del dbms devi accedere due volte solo nel caso peggiore).

    Ovviamente un accesso in più non ha (generalmente) un grosso impatto sulle prestazioni, però si potrebbe comunque risparmiare.

    Come sempre, il meglio è forse un approccio misto: se riesci ad associare ad ogni errore che il db ti fornisce un errore nei dati di input in maniera univoca, puoi risparmiarti i controlli preliminari, associando ad ogni codice di errore la relativa procedura di gestione; altrimenti segui l'altro approccio.

    Un'altra soluzione, relativa soltanto al caso di chiavi duplicate, potrebbe essere la creazione di una cache con i dati sensibili, in modo da accelerare i controlli. In questo caso però, presterei attenzione anche alla quantità dei dati di cui fare cache.

    Queste sono le mie idee, spero di sentirne altre...

    Linux user number 403381

    Stop TCPA!

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.