Page 1 of 1
Posting to self with a Function
Posted: Thu Oct 16, 2003 7:23 pm
by sinewave
I am trying to write a function where it will accept a filename as a parameter and open it up for editing.
Code: Select all
<?php
function file_edit($filename)
{
if (isset($HTTP_POST_VARS[Submit]))
{
$non_breaking_spaces = nl2br(str_replace(' ', ' ', $HTTP_POST_VARS[text1]));
$fp = @fopen($filename, "w+");
if($fp)
{
$cont = fwrite($fp, $non_breaking_spaces);
fclose($fp);
}
echo "Updated Successfully";
exit();
}
$fp = @fopen($filename, "r");
if($fp)
{
$cont = str_replace ("<br />", "",fread($fp, filesize($filename)));
fclose($fp);
}
echo "<form action="".$PHP_SELF."" method="post" name="TextEdit">\n\t<textarea class="textarea" name="text1" cols="50" rows="25">\n";
echo stripslashes($cont);
echo"</textarea>\n\t<BR>\n\t<input type="submit" name="Submit" value="Submit">\n</form>\n";
}
?>
It accepts it and reads it fine, but i am unsure how to submit it from another file.
Example)
Another file will have this code:
Code: Select all
<?php
include("file_functions.php"); // This is the file containing above code
file_edit("news.txt");
?>
I think the problem lies in the $PHP_SELF since it wont be itself anymore it is uncluded elsewhere. Anyone have any idea what i could do?
Posted: Thu Oct 16, 2003 7:34 pm
by markl999
$_SERVER['PHP_SELF'] will be the name of the file that called the include..not the included file name.
Posted: Thu Oct 16, 2003 7:36 pm
by sinewave
Right, but what could i do?
Posted: Thu Oct 16, 2003 7:41 pm
by markl999
Not sure what your problem is now as the PHP_SELF thing isn't a problem

The code you posted should work fine (presuming the function does indeed work as you said it does).
i.e doing
Code: Select all
include_once 'file_functions.php';
file_edit('news.txt');
shouldn't be a problem.
Posted: Thu Oct 16, 2003 7:47 pm
by sinewave
It doesn't work because
Code: Select all
if (isset($HTTP_POST_VARS[Submit]))
is inside the function, so when it posts to itself it doesnt know what to do.
It also wont work if i put it outside of the function because then it doesnt know the filename.
Any ideas?
Posted: Thu Oct 16, 2003 7:59 pm
by markl999
Well, if you're using PHP => 4.1.0 then you should really use
Code: Select all
if(isset($_POST['Submit'])){
...
}
otherwise you'll need to do
Code: Select all
function file_edit($filename){
global $HTTP_POST_VARS;
if (isset($HTTP_POST_VARS['Submit']))
....
The posting to itself, $_SERVER['PHP_SELF'] isn't an issue as if file1.php includes file2.php, and file2.php does a POST to $_SERVER['PHP_SELF'] it will POST to file1.php as normal. By the way, your script as it is requires register_globals to be On, and they are Off by default in most recent versions of PHP, so might be worth checking that too as your script won't work otherwise.
Posted: Thu Oct 16, 2003 8:06 pm
by sinewave
It shouldn'trequire register_globals at all
$filename is just the parameter.
When it submits, it will never be able to reach that line because that line is WITHIN a function and doesnt get called.
If i put it outside of that function it doesnt know the filename.
I can use a hidden field to remember the filename, maybe i should just try that. That way i should be able to have multiple fields on one page...i think.
Posted: Thu Oct 16, 2003 8:25 pm
by markl999
Ok, here's how i'd do what you're trying to do..(and i've tried and tested this

)
file1.php
Code: Select all
require_once 'file_functions.php';
file_edit('news.txt');
file_functions.php
Code: Select all
<?php
function file_edit($filename){
if(isset($_POST['Submit'])){
$fp = fopen($filename, 'w');
fputs($fp, $_POST['text1']);
fclose($fp);
echo 'Updated Successfully';
}else{
$text1 = file_get_contents($filename);
?>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="POST">
<textarea class="textarea" name="text1" cols="50" rows="25"><?php echo $text1 ?></textarea>
<input type="submit" name="Submit" value="Submit" />
</form>
<?php
}
}
?>
Posted: Thu Oct 16, 2003 8:31 pm
by sinewave
This is the way i chose to do it. It works fine and you can have multiple files on 1 web page. Notice the saving is outside of the function. It works good. Thought i would post it if you were interested.
It also replaces nl2br and vice versa.
Code: Select all
<?php
if (isset($_POST[SubmitTextEdit]))
{
$filename = $_POST[filename];
$non_breaking_spaces = nl2br(str_replace(' ', ' ', $_POST[text1]));
$fp = @fopen($filename, "w+");
if($fp)
{ $cont = fwrite($fp, $non_breaking_spaces);
fclose($fp);
}
echo "Updated Successfully";
exit();
}
function file_edit($filename)
{
$fp = @fopen($filename, "r");
if($fp)
{ $cont = str_replace ("<br />", "",fread($fp, filesize($filename)));
fclose($fp);
}
echo "<form action="".$PHP_SELF."" method="post" name="TextEdit">\n\t<textarea class="textarea" name="text1" cols="50" rows="25">\n";
echo stripslashes($cont);
echo"</textarea>\n\t<BR>\n\t<input type="hidden" name="filename" value="".$filename."">\n";
echo"<BR>\n\t<input type="submit" name="SubmitTextEdit" value="Submit">\n</form>\n";
}
?>