sayhi
asked on
Need help converting a CGI script to PHP
well, my free web host died on me. i moved to a new one and it allows PHP scripts but for CGI scripts to work you'd have to pay $$.
i figured ok, i know a little perl, how hard could this php thing be? for my form mail scripts, i just downloaded a ready made version (so much for learning).
but, my other script, it's sorta like a guestbook, but it's not. i tried looking at the php code of guestbook scripts to see if i could figure out how, but that didn't help any, most had something to do with MySQL. then i went to php.net to see if i could look up bits of code... i just got lost.
so here's my little script:
#!/usr/bin/perl
use CGI;
$q=new CGI;
$list ='list.html';
$|++;
print "Content-type: text/html\n\n";
unless (open(LIST, "$list")) {
print "Could not open $list $!\n";
die "Could not open $list $!";
}
@contents=<LIST>;
close(LIST);
open (LIST, ">$list");
foreach $line (@contents) {
print LIST $line;
$line=~/<!--data-->/ || next;
print LIST "<CENTER>Date: ", $q->param('date'), "<BR>\n";
print LIST "Name: ", $q->param('name'), "<BR>\n";
print LIST "Class: ", $q->param('classtype'), "<BR>\n";
print LIST "Explaination: ", $q->param('explain'), "<BR>\n";
print LIST "</CENTER>";
}
close (LIST);
#send them to the list
print qq|<HTML><HEAD><TITLE></TI TLE><META HTTP-EQUIV="refresh" CONTENT="0; URL=$list"></HEAD></BODY>< /HTML>|;
How (appreciate examples, explaination of code etc. :) can I do this using PHP? if not, i guess i'll go look for a CGI enabled host. =\
i figured ok, i know a little perl, how hard could this php thing be? for my form mail scripts, i just downloaded a ready made version (so much for learning).
but, my other script, it's sorta like a guestbook, but it's not. i tried looking at the php code of guestbook scripts to see if i could figure out how, but that didn't help any, most had something to do with MySQL. then i went to php.net to see if i could look up bits of code... i just got lost.
so here's my little script:
#!/usr/bin/perl
use CGI;
$q=new CGI;
$list ='list.html';
$|++;
print "Content-type: text/html\n\n";
unless (open(LIST, "$list")) {
print "Could not open $list $!\n";
die "Could not open $list $!";
}
@contents=<LIST>;
close(LIST);
open (LIST, ">$list");
foreach $line (@contents) {
print LIST $line;
$line=~/<!--data-->/ || next;
print LIST "<CENTER>Date: ", $q->param('date'), "<BR>\n";
print LIST "Name: ", $q->param('name'), "<BR>\n";
print LIST "Class: ", $q->param('classtype'), "<BR>\n";
print LIST "Explaination: ", $q->param('explain'), "<BR>\n";
print LIST "</CENTER>";
}
close (LIST);
#send them to the list
print qq|<HTML><HEAD><TITLE></TI
How (appreciate examples, explaination of code etc. :) can I do this using PHP? if not, i guess i'll go look for a CGI enabled host. =\
Oops,
one thing I forgot,
Just change those last few lines of HTML code to this,
<HTML>
<HEAD>
<TITLE></TITLE>
<META HTTP-EQUIV="refresh" CONTENT="0; URL=<?=$list">
</HEAD>
<BODY>
</BODY>
</HTML>
Rest stays the same,
JD
one thing I forgot,
Just change those last few lines of HTML code to this,
<HTML>
<HEAD>
<TITLE></TITLE>
<META HTTP-EQUIV="refresh" CONTENT="0; URL=<?=$list">
</HEAD>
<BODY>
</BODY>
</HTML>
Rest stays the same,
JD
ASKER
" Basically this script processes form and makes a new entry in list.html under <!--data--> section. Right
??? "
yup
Form is submitted by Post.
Stuff I don't understand/can't figure out:
$CRLF = "\n"; //keep it "\r\n" if on unix/linux. (what's this?)
//following code should be used if your form is submitted by GET method.
// as such if you have register_globals on in your php.ini [ normally it is ] you don't nee to fetch
value like this, but this is the best practise. (what's this mean??)
I'll try out your code tonight.
??? "
yup
Form is submitted by Post.
Stuff I don't understand/can't figure out:
$CRLF = "\n"; //keep it "\r\n" if on unix/linux. (what's this?)
//following code should be used if your form is submitted by GET method.
// as such if you have register_globals on in your php.ini [ normally it is ] you don't nee to fetch
value like this, but this is the best practise. (what's this mean??)
I'll try out your code tonight.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
ah okay.
well, i haven't gotten it to work yet.
here is the error i am getting:
Warning: fopen("/usr/home/vhost/use rname/list .html", "w") - Permission denied in /usr/home/freehost/10023/c gi-bin/lis t.php on line 8
Can not write to file /usr/home/vhost/username/l ist.html
well, i haven't gotten it to work yet.
here is the error i am getting:
Warning: fopen("/usr/home/vhost/use
Can not write to file /usr/home/vhost/username/l
Error is pretty self explanatory.
The fopen statement is same as open (LIST, ">$list") incase of PHP.
Here the error is,The file you are trying to update is not writable by script,
CHMOD it to 766 an it should work.
JD
The fopen statement is same as open (LIST, ">$list") incase of PHP.
Here the error is,The file you are trying to update is not writable by script,
CHMOD it to 766 an it should work.
JD
ASKER
Doh, i totally forgot permissions
i should've know that heh
anyway, THANK YOU so much for your help. now people can start to post stuff at my site.
i should've know that heh
anyway, THANK YOU so much for your help. now people can start to post stuff at my site.
My pleasure !! :)
JD
JD
Basically this script processes form and makes a new entry in list.html under <!--data--> section. Right ???
Check the code below,
<?php
$list = 'list.html'; //name of file.
$lines_array = file($list) or die('Can not open list file ' . $list); //file function opens file named $list and each line of the file is put in differnet array elements.
$fp = fopen($list,'w') or die('Can not write to file ' . $list);
$CRLF = "\n"; //keep it "\r\n" if on unix/linux.
flock($fp,LOCK_EX); //lock file for writing.
//following code should be used if your form is submitted by GET method.
// as such if you have register_globals on in your php.ini [ normally it is ] you don't nee to fetch value like this, but this is the best practise.
$date = $HTTP_GET_VARS['date'];
$name = $HTTP_GET_VARS['name'];
$class= $HTTP_GET_VARS['classtype'
/*
Put up like
$date = $HTTP_POST_VARS['date'];
$name = $HTTP_POST_VARS['name'];
$class= $HTTP_POST_VARS['classtype
If your form is submitted by POST Method.
*/
foreach($lines_array as $line)
{
fwrite($fp,$line . $CRLF); //write original lines as it is.
if(eregi('\<\!--data--\>',
{
fwrite("<CENTER>Date: $date<br>" . $CRLF); //write out new entry.
fwrite("<CENTER>Name: $name<br>".$CRLF);
fwrite("<CENTER>Class:$cla
fwrite("</CENTRE>" . $CRLF);
}
}
fclose($fp); //close the file.
?>
<HTML>
<HEAD>
<TITLE></TITLE>
<META HTTP-EQUIV="refresh" CONTENT="0; URL=$list">
</HEAD>
<BODY>
</BODY>
</HTML>
JD