2016-10-20 34 views
-1

私は職場でミニコメントボードを作成しようとしています。私たちのうち10人がいます。皆に見せるために、それぞれの人にアイテムを追加できるようにしています。このアイデアは、サーバー上の同じフォルダにあるCSVファイルにデータを書き込み、そこから読み取るHTML Webページ(内部消費用)として構造化することです。私はそれをWebページ上のテーブルとして表示し、個人がCSVファイルに書き込まれてテーブルに表示される新しいエントリを追加できるようにしたいと思います。私は基本的なHTMLで大丈夫ですが、私はCSVファイルの読み書き方法を知りません。私はJavascript、PHP、SQLなどについて少し読んだことがありますが、私は最良のアプローチについてはわかりません。どのようなガイダンス(コードの実例へのポインタを含む)は非常に高く評価されます。Webページからの.CSVファイルへの読み込み/書き込み

+0

SQLをお持ちの場合は、テーブルとして保存しないのはなぜですか? – Terry

+0

私はSQLを持っているとは思わない!私が読んだことのある多くのツールのうちの1つです。 – Richard

+0

Google Docsのように、試しただけでテストしたソリューションを使用しないでください。 – Terry

答えて

0

Javascriptでのみ実行したい場合は、Node.Jsサーバーを使用してすべてのコンサマーのデータを取得して保存することができます。しかし、PHP、Node.Js、Ruby、Python(...)スクリプトを作成しても、データを取得して単一のデータベース(CSV、MySQL、MongoDB、等。)。

ここでは、Pusherのようなリアルタイムでの優れた解決策があります。それらのすべては、あなたが本当に望むものに依存しています。 RestAPIに関するドキュメントがあります。some PHP frameworks

+0

申し訳ありませんが、私はこのすべてに全く新しいので、私は実際に上記のいずれかを理解していません!私はCSVファイルからデータを取得し、それをHTMLの表に表示することができる非常に簡単な解決策があることを期待していました - たぶんHTMLに埋め込むことのできる数行のJavaScriptコードですか? – Richard

0

ミニボードの出発点として、以下のコードを使用することができます。コンストラクタには、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()); 
+0

フォームのレンダリング時にコメント時間が設定されます。これはおそらくあなたが望むものではありません。コメントが送信された時刻に変更するには、フォーム処理ブロック内に '$ ts = time();'を置き、投稿された値は無視してください。 – Progrock

関連する問題