Re: columns not getting updated with Class::DBI::FromCGI

[prev] [thread] [next] [Date index for 2005/01/10]

From: Luke Valenty
Subject: Re: columns not getting updated with Class::DBI::FromCGI
Date: 14:23 on 10 Jan 2005
Yup.  It's there, I just haven't been using the __PACKAGE__ syntax.
The code is generated from a database schema, so I just decided to
replace the actual package name in there because I'm more used to it.

I also modified the schema so that no mixed case columns or tables
remain, they are all lower case.  This solved some problems of columns
not being updated, however, other columns that were never mixed case
still do not update.  I think I know what's going on here, so I'm going
to fix it and see what happens.

On Fri, Jan 07, 2005 at 08:08:32PM -0800, Peter Speltz wrote:
> Just a thought -- 
> Did you declare your untaint_columns?
> 
> I don't see any
>  __PACKAGE__->untaint_columns( . . . ) declarations. 
> 
> 
> 
> 
> 
> > Howdy!
> > 
> > I've got a problem that has been giving me too much grief to solve
> > on my own.  I am using Class::DBI::FromCGI to update columns from post
> > data.  The fun part is when I submit the values only to find a few
> > columns have been updated while the others stay the same.  There
> > are no errors or warning messages thrown.  Some of my column names
> > are mix case.  But those aren't necessarily the ones that don't 
> > get updated, there are a few all lower-case columns that don't update.
> > 
> > I would be ecstatic if this was just some silly overlook on my part.
> > 
> > I hate to post all my code, so I'll see if I can't just post what's
> > relevant (though still a bit of text...):
> > 
> > 
> > # Module in question...
> >   package MSI::Admin::person;
> > 
> >   push @ISA, 'MSI::Admin::DBI';
> > 
> >   use Class::DBI::FromCGI;
> >   use Class::DBI::AsForm;
> > 
> >   use MSI::Admin::DBI;
> >   use base 'MSI::Admin::DBI';
> > 
> >   MSI::Admin::person->table('person');
> > 
> >   MSI::Admin::person->columns(All => qw/
> >     id searchName firstName middleName lastName nickName title department
> > active status
> >   /);
> > 
> >   MSI::Admin::person->has_many(contactInfo => 'MSI::Admin::contactInfo');
> >   MSI::Admin::person->has_many(groupMembership =>
> > 'MSI::Admin::groupMembership');
> >   MSI::Admin::person->untaint_columns(
> >     printable => [qw/
> >       searchName firstName middleName lastName nickName department
> >     /],
> >     integer   => [qw/id/]
> >   );
> >   
> >   
> > 
> > # Mason template used for testing (only the init code, nothing else
> > matters)...
> >   # $class:  record type to be saved
> >   # $id:     record number to save
> >   <%init>
> >     push @INC, '/www/dws/cgi-bin/lib';
> > 
> >     use Data::Dumper;
> > 
> >     use CGI::Untaint;
> >     use strict;
> >     eval("use $class");
> > 
> >     my %args = $m->request_args;
> > 
> >     my $h = CGI::Untaint->new(\%args);
> >     my $obj;
> > 
> >     if(ref $id) {
> >       $id = $id->[0];
> >     }
> > 
> >     unless($obj = $class->retrieve($id)) {
> >       $obj = $class;
> >     }
> > 
> >     my $recordSaved = 0;
> >     my $recordCreated = 0;
> > 
> >     if($args{'action'} eq 'save') {
> >       if($id eq '') {
> >         $obj = $class->create_from_cgi($h);
> >         $recordCreated = 1;
> >       } else {
> >         $obj->update_from_cgi($h);
> >         $obj->update();
> >         $recordSaved = 1;
> >       }
> >     } elsif($args{'action'} eq 'delete') {
> >       $obj->delete();
> >     }
> >   </%init>
> >  
> >   
> > 
> > And finally, here is some output (with notes) from that mason template:
> >   RECORD SAVED
> >   Form Post Data (From %args)
> > 
> >   department =        Chemistry
> >   status =            Non-Academic Staff
> >   __config =      
> >   save =              Save
> >   url =               personForm.tmpl?id=2
> >   lastName =          Scriven
> >   id =    2
> >   _ERR =        
> >   nickName =          Scribbles
> >   firstName =         Loyd
> >   value =             Chemistry
> >   active =            1
> >   middleName =        Elmo
> >   action =            save
> >   class =             MSI::Admin::person
> >   title =             Mr.
> >   __loaded =          HASH(0x9344b18)
> >    
> > 
> >   Record Data (AFTER it's been updated using update_from_cgi
> >                Note: this is the same data that was in the record in the
> > first place)
> > 
> >   firstname =    
> >   department =  Chemistry (<- only this column gets updated)
> >   nickname =   
> >   middlename =        
> >   status =      Research Associate
> >   active =      0
> >   title =  
> >   lastname =      
> >   searchname =   
> >   id =          2
> >  
> > 
> >   Errors (From Class:DBI:FromCGI)
> > 
> >  
> > 
> >   CGI::Untaint Vars (using CGI::Untaint manually)
> > 
> >   department =        Chemistry
> >   Error(?): 
> >   status =            Non-Academic Staff
> >   Error(?): 
> >   __config =  
> >   Error(?):           No parameter for '__config'
> >   save =              Save
> >   Error(?): 
> >   url =               personForm.tmpl?id=2
> >   Error(?): 
> >   lastName =          Scriven
> >   Error(?): 
> >   id =                2
> >   Error(?): 
> >   _ERR =  
> >   Error(?): 
> >   nickName =          Scribbles
> >   Error(?): 
> >   firstName =         Loyd
> >   Error(?): 
> >   value =             Loyd
> >   Error(?): 
> >   active =            1
> >   Error(?): 
> >   middleName =        Elmo
> >   Error(?): 
> >   action =            save
> >   Error(?): 
> >   class =             MSI::Admin::person
> >   Error(?): 
> >   title = Mr.
> >   Error(?): 
> >   __loaded =          HASH(0x9344b18)
> >   Error(?): 
> >   
> >  
> > ----
> > Luke 
> > 
> 
> 
> =====
> pjs
> 
> 
> 		
> __________________________________ 
> Do you Yahoo!? 
> Meet the all-new My Yahoo! - Try it today! 
> http://my.yahoo.com 
>  
----
Luke 

Re: columns not getting updated with Class::DBI::FromCGI
Luke Valenty 14:23 on 10 Jan 2005

Generated at 12:15 on 16 Jan 2005 by mariachi v0.52