[PHP/PGSQL] Error handling in normaal Nederlands

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 16:32
Ik ben bezig met een database klasse welke in- en uitvoer van data regelt, onafhankelijk van de database die ik selecteer. Daarvoor maak ik verschillende klassen aan die allemaal afstammen van een database klasse en op die manier netjes dezelfde functionaliteit herbergen.

Nu wil ik uiteraard error handling ook in die klasse regelen en liefst op een beetje nette manier. Mijn gebruikers snappen de melding "ERROR: duplicate key violates unique constraint" natuurlijk niet en willen daar niets mee te maken hebben. Ik wil die meldingen omzetten in iets wat te begrijpen is, tenzij de config file echt debug mode specificeert. Het probleem is dat ik uit Postgres niks nuttigs krijg behalve wat Engelse meldingen, en om nou regex-en of iets dergelijks te gaan gebruiken om die meldingen weer te converteren vind ik wel erg zuur. Concreet: kun je op een of andere manier uit Postgres ook foutcodes halen of iets dergelijks? Ik weet dat MySQL dat bijvoorbeeld wel kan, en aan de hand van die foutcode kun je dan zelf een betere boodschap verzinnen richting gebruiker. Ik heb gezocht, maar tot nu toe niks gevonden, of ik kijk er gruwelijk overheen ofzo.

Acties:
  • 0 Henk 'm!

  • DexterDee
  • Registratie: November 2004
  • Laatst online: 18:47

DexterDee

I doubt, therefore I might be

Ik zou het helemaal anders doen. Je lost immers in je PHP code een stukje functionaliteit op. Deze functionaliteit kan dus goed gaan of fout. Kijk naar dit stukje pseudo code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Stop nieuwe gegevens van gebruiker in de gebruikerstabel

geeft de query een error terug? {
      analyseer de woorden uit de foutmelding van pgsql
      als het woord "unique" en "constraint" voorkomt, 
             print dan "gebruikersnaam bestaat al"
      als het woord "storage" en "full" voorkomt,
             print dan "geen opslagruimte meer voor de gebruiker"
      als het woord "record" en "locked" voorkomt,
             print dan "iemand anders actualiseert de gebruiker al"
      als het woord "syntax error" voorkomt, 
             print dan "opslaan van gebruiker mislukt"
      ...
      stop script
}

Print nieuwe gegevens van gebruiker


Zo kan het ook:
code:
1
2
3
4
5
6
7
8
9
10
Stop nieuwe gegevens van gebruiker in de gebruikerstabel

geeft de query een error terug? {
     toon error "Gebruiker kan niet worden geactualiseerd"
     log de technische error in een log bestand of log tabel 
           en/of mail de webmaster over de details van de error
     stop script
}

Print nieuwe gegevens van gebruiker

Gebruikers zijn alleen geinteresseerd of iets wel of niet gelukt is. Als iets lukt geef je ze een thank you scherm, zo niet vertel je wat er niet is gelukt. Het is helemaal niet nodig om een hele berg technische errors naar "leesbaar" nederlands te vertalen. Het enige dat je de gebruiker hoeft te vertellen is dat het fout is gegaan en dat hij bij herhaling van de fout even contact op moet nemen met de webmaster. De technische engelse gegevens van de foutmelding, de foutcode, lijnnummer en bestand waar het fout ging kun je mooi loggen in een log tabel of wegschrijven in een error.log bestand. En een mailtje naar de webmaster brengt hem op de hoogte van een mogelijke fout in het script.

Klik hier om mij een DM te sturen • 3245 WP op ZW


Acties:
  • 0 Henk 'm!

Anoniem: 14829

Na niet zo lang zoeken kwam ik deze pg_result_sqlstate patch voor PHP5 tegen.

"attached is a patch which implements a function pg_result_sqlstate. This function is needed because the error messages returned by pg_result_error is localized and can therefor not be parsed reliably."

Of 't werkt weet ik niet, want ik gebruik geen PHP en geen PostgreSQL. :)

Acties:
  • 0 Henk 'm!

  • HunterPro
  • Registratie: Juni 2001
  • Niet online
DexterDee schreef op woensdag 02 augustus 2006 @ 19:57:[..]
Gebruikers zijn alleen geinteresseerd of iets wel of niet gelukt is. Als iets lukt geef je ze een thank you scherm, zo niet vertel je wat er niet is gelukt. Het is helemaal niet nodig om een hele berg technische errors naar "leesbaar" nederlands te vertalen. Het enige dat je de gebruiker hoeft te vertellen is dat het fout is gegaan en dat hij bij herhaling van de fout even contact op moet nemen met de webmaster. De technische engelse gegevens van de foutmelding, de foutcode, lijnnummer en bestand waar het fout ging kun je mooi loggen in een log tabel of wegschrijven in een error.log bestand. En een mailtje naar de webmaster brengt hem op de hoogte van een mogelijke fout in het script.
helemaal mee eens. Als je het helemaal slim aanpakt (en je doet ook telefonische support op de app) laat je direct een ticketnummer aanmaken wat je aan de client teruggeeft. Zo kan je iemand aan de telefoon om het ticketnummer vragen en direct opvragen wat ie aan het doen was en wat er fout ging. Eventueel zou je een functie kunnen maken om de bug online te kunnen escaleren maar vaak levert dat veel doorklikkers op en dus een hoop rommel in je inbox, en weinig meer bewustzijn van de gebruiker. :)

Acties:
  • 0 Henk 'm!

  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 16:32
Tja, jullie hebben eigenlijk helemaal gelijk. Soms zit je onwijs ingewikkeld na te denken terwijl de oplossing gewoon voor het grijpen ligt!