http://www.perlmonks.org?node_id=927930

anu2011 has asked for the wisdom of the Perl Monks concerning the following question:

Hi, I posted a message about Fetching MySQL data using Perl. Many of you took time to reply to my posting. Many thanks for everyone who tried to help me. Actually, my question should have been about "fetching data and showing them in a HTML form." This is where we have problems with. We are able to save any user entered data into a table, but the problem we have is the opposite: "displaying extracted data in a form." Does anyone have hands on experience doing something similar to this...? I'd appreciate your expertise advise.

Replies are listed 'Best First'.
Re: Fetched data in HTML..
by aaron_baugher (Curate) on Sep 26, 2011 at 20:04 UTC

    The simplest (and ugliest) way is to simply print out your form with the data inserted. Something like (untested):

    my $h = $sth->fetchrow_hashref; # error checking left out print <<END; <form> Username: <input name='username' value='$h->{username}' /><br /> Notes: <textarea name='notes'>$h->{notes}</textarea> <input type='submit' /> </form> END

    You can clean that up somewhat by using the CGI.pm module's HTML functions, so instead of printing a chunk of HTML, you call those functions for the individual tags:

    print( start_form, 'Username: ', textfield('username', $h->{username}), br, 'Notes: ', textarea('notes', $h->{notes}), submit, end_form );

    The next abstraction up would be a templating system like Template::Toolkit, where you keep your HTML in a separate template file, with placeholders where you want your data inserted, then put your data in a particular variable and pass it to the template.

    The next step up from that is something like Catalyst or Dancer, which will use a templating system on the output side, and also have plugins for easy access to your data on the database side.

    Somewhere in the middle of these I'd put inline-coding systems like HTML::Mason, which lets you put your code in your HTML (somewhat like PHP) instead of putting your HTML in your code. This still has the problem of the two getting jumbled, though.

    % my $h = $sth->fetchrow_hashref; <form> Username: <input name='username' value='<% $h->{username} %>' /><br /> Notes: <textarea name='notes'><% $h->{notes} %></textarea> <input type='submit' /> </form>

    I'm probably forgetting an option or two, but which of these options you should use depends on the complexity of your project, the ratio of HTML to code (if there's very little of one or the other, having them mixed may not be a big problem), what other subsystems might be helpful to you (like the plugins available for Dancer), and personal preference.

Re: Fetched data in HTML..
by ww (Archbishop) on Sep 26, 2011 at 19:34 UTC
    Looks like a question for HTML_Monks; populating a form is fundamentally the same as any other print operation; getting the form right is OT.
Re: Fetched data in HTML..
by planetscape (Chancellor) on Sep 26, 2011 at 19:40 UTC
Re: Fetched data in HTML..
by keszler (Priest) on Sep 26, 2011 at 19:44 UTC