file_get_contents 查找和编辑数据
file_get_contents find and edit data
我目前正在一个网站上编辑页面,该页面从 HTML 或 PHP 文件中获取内容并将其插入到 'fill in the blank' 中(不知道该称呼什么这个)页面,我可以在其中编辑内容并 POST 它,用新编辑的数据覆盖旧文件。我试图获取的数据包括一个 table (如下所示)以及一个无序列表和一些其他随机文本。我一直在寻找使用 file_get_contents 和 fopen(...) 执行此操作的方法,找到数据并将其插入适当的 html 输入编辑空间。该站点仅将数据存储在文件中,而不是数据库中。有人对我在这种情况下可以做什么有什么建议吗?
Table 示例
<table>
<tr><th>Ingredient</th><th>Amount</th></tr>
<tr><td>Example</td><td>Example</td></tr>
</table>
file_get_contents 的一个示例和我发现的 here 的示例,它只是从 html 文件中获取了一些文本。我尝试使用 table 数据,但只是将其显示为一个大字符串。
<?php
$fileToEditPath = $_POST['editPath']; //editPath is the full path to the file
$fileEdits = file_get_contents($fileToEditPath);
$doc = new DOMDocument();
$doc->loadHTML($fileEdits);
$divs = $doc->getElementsByTagName('div');
foreach($divs as $div) {
if ($div->getAttribute('id') === 'recipe-information') {
echo $div->nodeValue;
//Alternatively if this ends up working, echo into something more like this to POST
echo "<input type='text' name='specificinstructions[]' value='" . $div->nodeValue . "'/>";
}
}
?>
经过数天的数小时寻找解决方案后,我不知道应该尝试什么。如果这很简单,我很抱歉,我对使用 PHP 还很陌生。对于更多上下文, 是另一个问题的 link,该问题概述了我正在创建的内容以及我从中获取数据的文件是如何创建的。
正如我发布这个看到建议的标签一样,使用 javascript/jquery 会更容易吗?我现在将对此进行调查,但如有任何建议,我们将不胜感激。
我的建议是将数据与 HTML 标记分开存储。我认为您每次都试图解析标记以获取数据,从而使您的代码比需要的难得多。将数据存储在文件中就可以了,只需注意竞争条件(即 2 个人同时对文件进行更新)。出于这个原因,使用数据库会更好,但这不是必需的。或者,您可以寻找处理并发更新的 PHP 仅文件数据库库(我没有任何经验,因此无法推荐)。您可以通过多种方式将数据存储在文件中,例如CSV 或序列化或 JSON。如果数据文件只能由 PHP 打开,那么我认为序列化将是最简单的。注意:文件名不会有 php 扩展名,您可以使用 .txt、.dat 等任何名称。
阅读:$data = unserialize(file_get_contents($fileToEditPath))
要存储:file_put_contents($fileToEditPath, serialize($data))
这种方法使您的数据与标记分开,我认为这是一种很好的做法。然后,您将正常使用 PHP 来生成和输出 HTML。这将允许您轻松更改输出 HTML,而不必担心您的编辑脚本是否仍然可以读取它。
万一以后有人遇到这个问题,这就是我最终遇到的问题。
//Map all $_POST arrays (from tables etc.)
$output = array_map(null, $a, $b, $c, $d);
//Write to csv
$file = fopen("path/to/file/" . $fileName. ".csv", "w+");
foreach ($output as $fields) {
fputcsv($file, $fields);
}
fclose($file);
//Grab csv data and put it into editable table inputs
if (($csvfile = fopen($contentFile, 'r')) !== FALSE){
while (($csvdata = fgetcsv($csvfile, 1000, ',')) !== FALSE){
echo '<tr>';
echo '<td><input type="text" value="' . $csvdata[0] . '"></td>';
echo '<td><input type="text" value="' . $csvdata[1] . '"></td>';
echo '</tr>';
}
}
我目前正在一个网站上编辑页面,该页面从 HTML 或 PHP 文件中获取内容并将其插入到 'fill in the blank' 中(不知道该称呼什么这个)页面,我可以在其中编辑内容并 POST 它,用新编辑的数据覆盖旧文件。我试图获取的数据包括一个 table (如下所示)以及一个无序列表和一些其他随机文本。我一直在寻找使用 file_get_contents 和 fopen(...) 执行此操作的方法,找到数据并将其插入适当的 html 输入编辑空间。该站点仅将数据存储在文件中,而不是数据库中。有人对我在这种情况下可以做什么有什么建议吗?
Table 示例
<table>
<tr><th>Ingredient</th><th>Amount</th></tr>
<tr><td>Example</td><td>Example</td></tr>
</table>
file_get_contents 的一个示例和我发现的 here 的示例,它只是从 html 文件中获取了一些文本。我尝试使用 table 数据,但只是将其显示为一个大字符串。
<?php
$fileToEditPath = $_POST['editPath']; //editPath is the full path to the file
$fileEdits = file_get_contents($fileToEditPath);
$doc = new DOMDocument();
$doc->loadHTML($fileEdits);
$divs = $doc->getElementsByTagName('div');
foreach($divs as $div) {
if ($div->getAttribute('id') === 'recipe-information') {
echo $div->nodeValue;
//Alternatively if this ends up working, echo into something more like this to POST
echo "<input type='text' name='specificinstructions[]' value='" . $div->nodeValue . "'/>";
}
}
?>
经过数天的数小时寻找解决方案后,我不知道应该尝试什么。如果这很简单,我很抱歉,我对使用 PHP 还很陌生。对于更多上下文,
正如我发布这个看到建议的标签一样,使用 javascript/jquery 会更容易吗?我现在将对此进行调查,但如有任何建议,我们将不胜感激。
我的建议是将数据与 HTML 标记分开存储。我认为您每次都试图解析标记以获取数据,从而使您的代码比需要的难得多。将数据存储在文件中就可以了,只需注意竞争条件(即 2 个人同时对文件进行更新)。出于这个原因,使用数据库会更好,但这不是必需的。或者,您可以寻找处理并发更新的 PHP 仅文件数据库库(我没有任何经验,因此无法推荐)。您可以通过多种方式将数据存储在文件中,例如CSV 或序列化或 JSON。如果数据文件只能由 PHP 打开,那么我认为序列化将是最简单的。注意:文件名不会有 php 扩展名,您可以使用 .txt、.dat 等任何名称。
阅读:$data = unserialize(file_get_contents($fileToEditPath))
要存储:file_put_contents($fileToEditPath, serialize($data))
这种方法使您的数据与标记分开,我认为这是一种很好的做法。然后,您将正常使用 PHP 来生成和输出 HTML。这将允许您轻松更改输出 HTML,而不必担心您的编辑脚本是否仍然可以读取它。
万一以后有人遇到这个问题,这就是我最终遇到的问题。
//Map all $_POST arrays (from tables etc.)
$output = array_map(null, $a, $b, $c, $d);
//Write to csv
$file = fopen("path/to/file/" . $fileName. ".csv", "w+");
foreach ($output as $fields) {
fputcsv($file, $fields);
}
fclose($file);
//Grab csv data and put it into editable table inputs
if (($csvfile = fopen($contentFile, 'r')) !== FALSE){
while (($csvdata = fgetcsv($csvfile, 1000, ',')) !== FALSE){
echo '<tr>';
echo '<td><input type="text" value="' . $csvdata[0] . '"></td>';
echo '<td><input type="text" value="' . $csvdata[1] . '"></td>';
echo '</tr>';
}
}