Javascript 从网页读取/写入.CSV文件
我试图在工作中创建一个小型“评论板”。我们一共有10个人,我希望我们每个人都能够向其中添加项目,让每个人都能够查看。其想法是将其构造为一个HTML网页(仅供内部使用),数据写入和读取CSV文件,该文件将位于服务器上的同一文件夹中。我想将其显示为网页上的表格,并允许个人添加新条目,这些条目将写入CSV文件并显示在表格中。我可以使用基本的HTML,但我不知道如何读取和写入CSV文件。我读过一些关于Javascript、PHP、SQL等的文章,但我不确定最好的方法是什么。任何指导(包括指向代码工作示例的指针)都将不胜感激。如果您只想使用Javascript实现这一点,您可以使用Node.Js server来检索和存储所有用户的数据。但是,即使您创建了PHP、Node.Js、Ruby、Python(…)脚本,您也必须开发一个API,以便能够检索数据并将其存储在单个数据库(CSV、MySQL、MongoDB等)中Javascript 从网页读取/写入.CSV文件,javascript,php,html,csv,Javascript,Php,Html,Csv,我试图在工作中创建一个小型“评论板”。我们一共有10个人,我希望我们每个人都能够向其中添加项目,让每个人都能够查看。其想法是将其构造为一个HTML网页(仅供内部使用),数据写入和读取CSV文件,该文件将位于服务器上的同一文件夹中。我想将其显示为网页上的表格,并允许个人添加新条目,这些条目将写入CSV文件并显示在表格中。我可以使用基本的HTML,但我不知道如何读取和写入CSV文件。我读过一些关于Javascript、PHP、SQL等的文章,但我不确定最好的方法是什么。任何指导(包括指向代码工作示例
实时可能是一个很好的解决方案,比如。所有这些都取决于你真正想要什么。这里有一些关于,有无的文档,您可以将下面的代码作为迷你板的起点。只需向构造函数传递可由web服务器写入的路径 下面只是一个表单,它将获取一条由时间戳、名称和注释组成的消息。过帐后,此信息将保存到CSV文件中 所有注释都存储在一个数组中,每次添加注释时,都会将其添加到数组中,然后整个数组作为CSV保存到磁盘中 没有备份的董事会,没有文件锁定,它缺乏技巧。 也没有用户登录系统或任何东西。我把它作为练习留给你 它是一个纯html/php解决方案,您可以自由定制
<?php
class Board
{
public $path_to_csv;
public $comments = [];
public function __construct($path_to_csv)
{
$this->path_to_csv = $path_to_csv;
$this->load();
}
public function load()
{
if(!is_file($this->path_to_csv))
file_put_contents($this->path_to_csv, '');
if (($fh = fopen($this->path_to_csv, "r")) !== FALSE) {
while (($data = fgetcsv($fh)) !== FALSE) {
$this->comments[] = $data;
}
fclose($fh);
}
}
public function addComment($ts, $username, $comment)
{
$this->comments[] = array($ts, $username, $comment);
$this->save();
}
public function getComments()
{
return $this->comments;
}
public function save()
{
$fp = fopen($this->path_to_csv, 'w');
foreach($this->comments as $comment) {
fputcsv($fp, $comment);
}
fclose($fp);
}
}
class ViewHelpers
{
public function form($action = '', $ts)
{
?>
<form method="POST" action="<?=$action ?>">
<input type="hidden" name="ts" value="<?=$ts ?>">
<label for="username">Name:</label>
<input type="text" name="username"><br />
<label for="comment">Comment:</label>
<textarea name="comment"></textarea>
<input type="submit" name="submit" value="Submit comment">
</form>
<?php
}
public function escape($string)
{
return htmlspecialchars($string);
}
public function table(array $comments)
{
if(!count($comments)) return; // No comments equals don't show.
//$comments = array_reverse($comments);
?>
<table>
<thead>
<tr>
<th>
Date
</th>
<th>
User
</th>
<th>
Comment
</th>
</tr>
</thead>
<tbody>
<?php foreach($comments as $comment) { ?>
<tr>
<td>
<?=date('r', $this->escape($comment[0])); ?>
</td>
<td>
<?=$this->escape($comment[1]); ?>
</td>
<td>
<?=nl2br($this->escape($comment[2])); ?>
</td>
</tr>
<?php } ?>
</tbody>
</table>
<?php
}
public function feedback($string)
{
if(!$string) return;
?>
<p>
<?=$this->escape($string); ?>
</p>
<?php
}
}
// Path to where you want to store your csv file.
$board = new Board('/tmp/comments.csv');
$feedback = '';
// Process form submissions.
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$ts = isset($_POST['ts']) ? $_POST['ts'] : null;
$username = isset($_POST['username']) ? $_POST['username'] : null;
$comment = isset($_POST['comment']) ? $_POST['comment'] : null;
if(!empty($username) && !empty($comment)) {
$board->addComment($ts, $username, $comment);
}
else {
$feedback = 'Please fill in all fields.';
}
}
$viewHelpers = new ViewHelpers;
// Your html here.
$viewHelpers->table($board->getComments());
$viewHelpers->feedback($feedback);
$viewHelpers->form("", time());
如果您有SQL,为什么不想将其存储为表呢?我想我没有SQL!这只是我读过的众多工具中的一个。如果你想要一个非常简单的解决方案,为什么不使用一个经过测试的解决方案,比如谷歌文档呢?对不起,但我对所有这些都是全新的,所以我实际上不了解上面的任何内容!我曾希望有一个非常简单的解决方案,使我能够从CSV文件中获取数据并以HTML格式显示在表格中——也许只有几行javascript代码可以嵌入HTML?在呈现表单时设置注释时间,这可能不是您想要的。要更改提交评论的时间,只需放置$ts=time()表单处理块中的代码>,忽略过账值。