CGI In Use | Site Search | Presenting Data | Cookies
Here's an example where a visitor can fill in a form and when form is submitted, the server stores the data in a database. The next time a visitor comes to the same page, the data that was uploaded by the previous visitor is now on display.
Here is a script that can do this:
#!/usr/bin/perl #database_demo.pl use CGI; use CGI::Carp qw(fatalsToBrowser); $cgi=new CGI(); chdir("cgi-bin"); #Print a new "Content type" header; print $cgi->header(); #Get the fields from the form "col_1, col_2..." #into the fields array for $i ( 1 .. 5 ) { $fields[$i-1] = $cgi->param('col_'.$i); } #Check to make sure at least one field has an entry if ( grep /\S/, @fields ) { #make the data comma separated $data_line = join ", ", @fields; #append the new data onto the old. #This is where you should use file #locking if you're worried about #multiple hits at the same millisecond open DATA, ">>database.txt" or die "Can't open database.txt"; print DATA $data_line, "\n"; close DATA; } #now reopen the whole data file for reading open DATA, "database.txt" or die "Can't open database.txt"; while ( <DATA> ) { #turn comma separated values #into HTML table rows @fields = split /\s*,\s*/; $database_results .= "<tr><td>"; $database_results .= join ( "</td><td>", @fields); $database_results .= "</td></tr>\n"; } #substitute the results into the original form $form = "long/long/path/to/form/on/server/.../database_form.html"; open (FORM, $form) or die "Can't open database_form page at $form: $!"; while ( <FORM> ) { #substitute the html into the reserved place s{<!-- database_results -->}{$database_results}; print; } close FORM;
Look through the code and read the comments for detailed explanations. In summary, the form input is parsed and saved onto the end of a "comma separated value" data file. Then the file contents are read back, turned into html table rows, and substituted into a placeholder in the original form.