Re: Gez
by dash2 (Hermit) on Mar 14, 2002 at 13:29 UTC
|
Sounds like you've got a misunderstanding.
Point the form you are submitting to the cgi script you want to run. E.g. <form action='foobar.cgi' method='post'>
Then make the script parse the form inputs and print out an HTML page. E.g.
#!/usr/bin/perl -w
# this is foobar.cgi
use strict;
# untested
use CGI;
my $cgi = new CGI;
print $cgi->header, $cgi->start_html;
print "You entered " . $cgi->param('form_input_name') . "<br>";
print $cgi->end_html;
exit;
No need to use system.
dave hj~ | [reply] [d/l] [select] |
|
Sorry, I should have been more specific
The perl script I am trying to start from a submit button, creates
text files based on data read from a database, then saves these files to disk.
Its output just prints 'RUNNING', and 'COMPLETE' to STDOUT,
which in this case needs to be an HTML form so that I know
the status of the perl script
| [reply] |
|
which in this case needs to be an HTML form so that I know the status of the perl script
First, output 512 bytes to make browsers render. Some browsers will never render until the page is loaded completely (like Konqueror), but this works with at least Mozilla and MSIE.
Then, start outputting.
It's a very good idea to set $| to 1, to avoid all buffering. You could use javascript to make it look good.
#!/usr/bin/perl -w
use strict;
$|++;
sub set_status {
my ($status) = @_;
print '<script> document.getElementById("status").innerHTML = "' .
$status . '"; </script>"';
}
print qq{Content-Type: text/html\n
<html><body><div style="font-size:288pt;">
Current status:
<div id=status>Initialising</div>
<!-- }, "Z" x 512, q{ -->
</div></body></html>
};
sleep 2;
set_status 'RUNNING';
sleep 5;
set_status 'COMPLETE';
U28geW91IGNhbiBhbGwgcm90MTMgY
W5kIHBhY2soKS4gQnV0IGRvIHlvdS
ByZWNvZ25pc2UgQmFzZTY0IHdoZW4
geW91IHNlZSBpdD8gIC0tIEp1ZXJk
| [reply] [d/l] |
Re: Gez
by erikharrison (Deacon) on Mar 14, 2002 at 13:35 UTC
|
Your question is not very clear. The preceeding comments are acurate, but I'm not sure they answer your question.
If you mean "How can a CGI program send data to another CGI program" there are a couple of ways. I think the solution you are looking for is to simply point the HTML page to the second script - this is assuming that you are trying ot run a CGI from a different server. This is probably a no-no however, simply because the original author could change that program, and your HTML page would send him/her bad data - which might actually do something.
Cheers,
Erik
| [reply] |
|
Sorry, I should have been more specific The perl script I am
trying to start from a submit button, creates text files
based on data read from a database, then saves these files
to disk. Its output just prints 'RUNNING', and 'COMPLETE' to
STDOUT, which in this case needs to be an HTML form so that
I know the status of the perl script
| [reply] |
|
Ahhh . . . I see. Perl, in this fashion, is a server side technology. What you need is a client side technology like JavaScript (Though you can still use Perl server side). See cgi buffer flush for a more detailed discussion.
Cheers,
Erik
| [reply] |
Re: Gez
by Biker (Priest) on Mar 14, 2002 at 13:25 UTC
|
You want to keep the old window in place? Sorry, but you'll have to do this with JavaScript.
Everything will go worng!
| [reply] |
Re: Have CGI call script, display status in browser
by dug (Chaplain) on Mar 14, 2002 at 18:27 UTC
|
It sounds like this may be a good place to use merlyn's method that he wrote up in his "search in progress" WebTechniques article.
It is a good explination of how to get a request, fork a process to do your heavy work, redirect the browser to a status file that the kid updates until it's done with its slave labor. | [reply] |