Re: FormBuilder linkNewValue issue
| From: | Alessandro Pasotti | Date: | Fri, 20 May 2005 05:52:10 +0000 |
| Subject: | Re: FormBuilder linkNewValue issue | ||
| References: | 1 2 | Groups: | php.pear.general |
| Request: | Send a blank email to pear-general+get-19295@lists.php.net to get a copy of this message | ||
Il 02:23, venerdì 20 maggio 2005, Justin Patrin ha scritto:
> On 5/19/05, Alessandro Pasotti <ale.pas@tiscali.it> wrote:
> > Hello,
> >
> > I have a big problem here:
> >
> > * I have a FB form with one linkNewValue linked table (PK on linked table
> > points to FK on main table)
> > * When there is an error in the main form, the linked new value in
> > sub-form is inserted correctly in the DB, but the form is displayed again
> > as nothing would happened in the sub form.
> > * When I correct the main form and submit it again, FB try to insert the
> > sub-form
> > values again and fails because DB constraints check for uniq in the
> > linked table.
> >
> > I don't know if this is a bug or I did'nt understand how it works.
>
> So basically you're getting a DB error on inserting the main record.
> How are you handling this? FB doesn't do any transactional stuff, so
> it can't really rollback. You could easily start a transaction before
> you process the FB and then roll it back if processForm returns an
> error. In fact, this is what I suggest you do. FB assumes that if the
> form validates it will process correctly. The DB processing is not
> fault tolerant at all. If something fails it's up to the calling app
> to deal with it.
Thanks for the quick answer, I implemented commit/rollback stuff and now it
works great.
I have another problem yet (the DB design is unfortunately not my choice):
* Imagine you are adding a new record in the same scenario described above,
* When you call validation method _before_ the subform is processed it fails
because the required FK for the linked table is null.
* To make it work, I had to modify fb->processForm to posticipate validation
of the main form _after_ the subform is processed.
Is there a more "elegant" solution for this problem?
--
Alessandro Pasotti
ICQ# 245871392
Linux User #167502