I had similar problems not too long ago. The reason i believe is - 'You can only read POST data from STDIN _once_'.
Aka, in a mod_perl script if you do something like: my $q1 = new CGI; my $q2 = new CGI; my $name1 = $q1->param("name"); my $name2 = $q2->param("name"); $name2 will not be set if the data was POST'ed. This is because the $q1 object would have already read in data from STDIN and its now no longer available to any other objects (including $q2). If it was a 'GET' request, you would have no such problem as GET request query strings are in $ENV{'QUERY_STRING'} and you can read from that as many times as you like. The moral of the story being, for a single request never use more than one CGI object (instantiate one and then pass it around) cheers, simran. On Tue, 2002-02-05 at 03:31, Brett W. McCoy wrote: > On Mon, 4 Feb 2002, Oscar Serrano wrote: > > > some days ago I wrote to ask for this problem: The CGI.pm (sometimes) could > > not receive the POST data. I tried all you recomended me here in the list. > > But I still had the problem. Finally I decide to kick out CGI.pm and start > > to use the old cgi-lib.pl. But I still had the same problem. Then I turnet > > to Apache::Request, and since I use it, I've never had the same problem. > > I just tell you because perphaps somebody may have the same problem. I > > don't really understan if the problem is in mod_perl, in Apache, in Templat > > Toolkit, in my ultrasecure patched kernel, in CGI.pm, but the point is that > > Apache::Request seems not to loose any post data :-? > > I had a similar problem a few days ago with a form processing engine I > developed with mod_perl & Text::Template. It takes a sequence of states > out of a database and generates a 'wizard' to lead a user through a set of > forms for, say, an employment application, membership application, etc. > It uses a combination of CGI.pm for some of the high-level front end > stuff, and uses the Apache::* modules for the lower level stuff (cookies, > session management, etc). Anyway, I had this wierd bug that instead of > the straight sequence of forms, it would do the first form, then the > second, the the first again, then the third, then the first again, then > the fourth, and so on. POST data was either missing, or incomplete, or > was picking up values from several pages back. > > I discovered what the problem was: I had a hash in one of my top-level > class files (the system is object-oriented) that was being used as a > global variable, a hash that had data that changed a lot. Bad juju with > mod_perl! Moving the hash into the class constructor and making sure it > got properly blessed into that class fixed the problem. > > Another issue that can cause problems, especially using the OOP interface > to CGI.pm under mod_perl, is using a global CGI object and using it inside > of subroutines: > > my $cgi = new CGI; > > ... > > sendmail('A message'); > > ... > > sub send_mail { > > my $msg = shift; > print $cgi->h1('Something'); > print $cgi->p; > ... > } > > This will cause some wierd problems. The solution is to not use globals > inside your subroutine, but pass what you need into it: > > sendmail($cgi, 'A Message'); > > sub send_mail { > my $q = shift; > my $msg = shift; > ... > } > http://www.chapelperilous.net/ > ------------------------------------------------------------------------ > When the wind is great, bow before it; > when the wind is heavy, yield to it.