Jump to content

Read a file's <div> or <p> by ID, then replace contents.


sKunKbad

Recommended Posts

I came up with this script the other night while working on another person's question here in this forum:

 

<html>
<head>
<style type="text/css">
     #editbox { width:500px; height:200px; }
</style>
</head>
<body>
<?php
if ($_GET['editbox'] != ""){
     $filename = 'fread_text.txt';
     $somecontent = $_GET['editbox'];
          if (is_writable($filename)) {
              if (!$handle = fopen($filename, 'w')) {
                   echo "Cannot open file ($filename)";
                   exit;
                   }
              if (fwrite($handle, $somecontent) === FALSE) {
                  echo "Cannot write to file ($filename)";
                  exit;
              }
              echo "Success, wrote ($somecontent) to file ($filename)";
              fclose($handle);
          } else {
              echo "The file $filename is not writable";
          }
}else{
$filename = "fread_text.txt";
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
echo "<form action='fread.php' method='get'>
<input type='text' name='editbox' id='editbox' value='$contents'></input>
<input type='submit' value='Submit' />
</form>";
fclose($handle);
}
?>
</body>
</html>

 

The script reads a file into a form's text area, allows a person to change that files text, and then writes the changed text back to the file when the submit button is pressed. My question is, how could I change only a selected div or paragraph of the file? For instance, if I wanted to only have the form read and change a paragraph whose ID is "paragraph1", how could I do that?

I have been able to read in the text by parsing the html, but I still have not figured out how to write it back to the file. Here is the script to read it in:

 

<?php
$url = "file.txt";
$input = @file_get_contents($url) or die('Could not access file: $url');
$regexp = "<div id='somediv'>(.*)<\/div>";
if(preg_match_all("/$regexp/siU", $input, $matches)) {
$string = $matches[1][0];
echo nl2br(htmlentities($string));
}
?>

 

If anyone can help with the last half of this project, I'd appreciate it. I just need to know how to write back to the specific div (id="somediv").

Thanks for any help in advance.

Well, I've got this script that is working as I wanted it to work, but I'm pretty sure this isn't the most efficient way of doing this. Any help is still appreciated. I can't be the only person who has ever wanted to do something like this. Isn't this like the basics of a CMS or something?

 

<html>
<head>
<style type="text/css">
#editbox { width:500px; height:200px; }
</style>
</head>
<body>
<?php
if ($_GET['editbox'] != ""){ //if the editbox has anything in it
$filename = 'html_parse_4_links.txt'; //this is the file to write to
$edit = $_GET['editbox']; //this is the contents of the editbox
$before = $_GET['before'];
$after = $_GET['after'];
$somecontent = urldecode($before);
$somecontent.= "<div id='somediv'>";
$somecontent.= $edit;
$somecontent.= "</div>";
$somecontent.= urldecode($after);
// Let's make sure the file exists and is writable first.
if (is_writable($filename)) {
    // In the example, they were opening $filename in append mode "a", but here we are overwriting the file in mode "w".
	//"a" mode might be pretty cool for a appending a blog with a user comment...
    if (!$handle = fopen($filename, 'w')) {
         echo "Cannot open file ($filename)";
         exit;
    }
    // Write $somecontent to our opened file.
    if (fwrite($handle, $somecontent) === FALSE) {
        echo "Cannot write to file ($filename)";
        exit;
    }
    echo "Success, wrote ($somecontent) to file ($filename)";
    fclose($handle);
} else {
    echo "The file $filename is not writable";
}
}else{
	$url = "html_parse_4_links.txt";
	$input = @file_get_contents($url) or die('Could not access file: $url');
	$regexp = "(.*)<div id='somediv'>(.*)<\/div>(.*)";
	if(preg_match_all("/$regexp/si", $input, $matches)) {
		$beforeEdit = urlencode($matches[1][0]);
		$string = $matches[2][0];
		$theEdit = htmlentities($string);
		$afterEdit = urlencode($matches[3][0]);
		echo "<form action='html_parse_4_links.php' method='get'>
					<input type='text' name='editbox' id='editbox' value='$theEdit'></input>
					<input type='hidden' name='before' value='$beforeEdit'></input>
					<input type='hidden' name='after' value='$afterEdit'></input>
					<input type='submit' value='Save Back 2 File' />
				</form>";
	}
}
?>
</body>
</html>

 

and here is the text file I was working with (named html_parse_4_links.txt)

what the heck
<div id='somediv'>im ready for a pepsi</div>
blah blah blah

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.