[PHP] Netste OO formulier afhandeling

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Fles
  • Registratie: Augustus 2001
  • Laatst online: 06-04-2023
Bij een CMS kom je het heel veel tegen, een HTML formulier met verschillende velden. Ieder veld wordt uit de database gehaald en vervolgens weer geupdate na het verzenden van het formulier.

Omdat ik zelf PHP heb geleerd met voornamelijk PHP Manual heb ik natuurlijk heel weinig voorbeelden gezien van nette PHP. Ik werk altijd alleen en heb geen collega's die hetzelfde doen. Syntaxen, code en verschillende manieren weet ik wel, maar is het ook netjes en dan niet alleen in mijn ogen, maar ook voor iemand anders. Wanneer ga ik wel met Objecten werken en wanneer niet. Iedereen is tegenwoordig meer en meer gebrand op nette code (waaronder ik zelf).

Standaard code vind je niet op internet, maar het is wel makkelijk om te weten wat "de standaard" is.

Nu heb ik een paar ideeën, waarvan ik bij sommige weet dit sowieso niet de manier is. Ik zou graag van wat ervaren scripters weten wat de manier is.

1.
Je hebt een functie om het formulier te maken. Er wordt een id meegegeven waarmee je een query uitvoerd en "echo"'t direct op het scherm.
Voor het opslaan van de velden bij het verzenden van het formulier, geef je alle velden mee aan een functie die de query maakt en uitvoert.

2.
Je zet de functies van 1 letterlijk over in een class (eventueel in een apart bestand) en roept hem aan met:

cms::laat_formulier_zien()
cms::opslaan($id, $veld1, $veld2, $veld3)
cms::toevoegen($veld1, $veld2, $veld3)

3.
Je maakt een class aan die alle velden aan de hand van een id uit de database haalt. Vervolgens maak je een object in de hoofdpagina van deze class en zet de velden van het object in de velden van het formulier.

cms = new cms();
cms->haal_op($id);

Opslaan doe je op manier 2:

muteer_cms::opslaan($id, $veld1, $veld2, $veld3)
muteer_cms::toevoegen($veld1, $veld2, $veld3)

4.
Je maakt als 3 een class aan die alle velden uit de database terug geeft in een object. Deze zet je in de hoofdpagina in een formulier.
Voor het opslaan maak je wederom een object aan van het "cms" en roept de functie in het object aan als:

$cms->maak_cms_object($veld1, $veld2, $veld3)

vervolgens sla je deze op in de database met:

$cms->opslaan()
of
$cms->toevoegen()

Deze laatsten maken de query met de velden in het object en voeren hem uit.

Tot nu toe werkte ik altijd met optie 3, hoewel ik ook wel wat voel voor 4. Maar misschien dat je dan een beetje doordraaft in objecten. Ik zou graag willen weten wat de beste oplossing is als die er is. Of misschien mis ik het helemaal en moet het nóg anders.

Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

Wat ik eigenlijk doe:

Ik heb een dbObject gemaakt, een object dat automagisch linkt naar een rij in de database, en als je een property van het object update dan wordt ook de database rij geupdate bij een __destruct() van het object. Je hoeft dus niet elke keer met de hand een select / update query te doen.

een klant is bijvoorbeeld een object dat ge-extend wordt van dbObject. in de constructor geef je aan welke velden aan welke tabel en rij gekoppeld zitten, en wat de property van het klant object wordt wat je kan aanroepen. Zo kan je bijv. aangeven dat strKlantNaam linkt naar $klant->Naam.


dit klant dbObject paas je door aan een formGenerator, wat kijkt naar het type veld in de database (varchar, enum, etc) en a.d.h. daarvan een formulier genereert (uiteraard kan je dit ook met de hand doen, en zelf teksten en validatie toevoegen.

na een POST van dit object doe ik dit:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
// uiteraard vereenvoudigd, hier zit geen validatie of wat dan ook bij.
if (!empty($_POST['ID']))
{
  $obj = new Klant($_POST['ID']);
  foreach ($_POST as $key=>$val)
  {
     if ($klant->hasProperty($key))
    {
     $obj->$key = $val;
    }
  }
  $obj->__destruct();
}

en voila, klaar :)

[ Voor 31% gewijzigd door SchizoDuckie op 10-02-2006 12:54 ]

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

  • Fles
  • Registratie: Augustus 2001
  • Laatst online: 06-04-2023
Nog net een stapje verder dan "4" :) Netjes, mooi universeel en snel zolang je geen joins hebt.

Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

Graveheart schreef op vrijdag 10 februari 2006 @ 14:17:
Nog net een stapje verder dan "4" :) Netjes, mooi universeel en snel zolang je geen joins hebt.
Die joins heb ik uiteraard ook wat voor, ik kan in m'n constructor ook opgeven dat er een relatie ligt tussen object Klant en bijvoorbeeld object Factuur, eventueel nog via een koppeltabel ;)

offtopic:
Om het nog mooier te maken, wordt er daar ook nog eens een standaard Ajax'ed interface van gegenereerd waarmee je dingen aan elkaar kan knopen (dus koppel bijv. in 1x 20 facturen aan een klant :) )

[ Voor 27% gewijzigd door SchizoDuckie op 10-02-2006 15:38 ]

Stop uploading passwords to Github!