簡要掲示板を作るという自分への課題をしております。
HMTLフォームから名前、コメントを入力しテキストファイルに
番号<>名前<>コメント<>日時を保存し、HTMLフォームの下に表示するというものを
作っております。
できないこと
消去機能を追加しようとしているのですが、うまくいきません。
このソースを実行すると下記のようにエラーがでて、調べると文字列ではなく配列が入力されている
とかでファイルに書き込むことができません。
{Warning: file_put_contents() expects parameter 1 to be string, resource given in /home/co-981.99sv-coco.com/public_html/Kadai2/Kadai2_15.php on line 50}
php
//htmlファイル <?php header('Content-Type: text/html; charset=UTF-8'); require_once('Kadai2_15.php'); ?> <html> <head> <meta charset="utf-8"/> <title>sample</title> </head> <body> <form method="post" action="<?php echo($_SERVER['PHP_SELF']) ?>"> <p>名前:</p> <input type="text" name="name" placeholder="山田太郎" required="required"> <p>コメント:</p> <textarea type="text" name="com" maxlength="20" required></textarea> <!-- <input type="hidden" name="token" value="<?=h(sha1(session_id())) ?>"> --> <input type="submit" name="mode" value="add"> </form> <form action="<?php echo($_SERVER['PHP_SELF']) ?>" method="POST"> <p>削除対象番号:</p> <input type="text" name="deleteNo"> <input type="submit" name="delete" value="削除"> <input type="hidden" name="mode" value="delete"> </form> <p> <p> 掲示板: </p> <?php foreach ((array)$text_rows as $text_row) {//配列でcount<>name<>comment<>data表示 if($text_row === ""){ continue; } $ret = explode("<>", $text_row); echo h($ret[0])."番 "; echo h($ret[1])." さん "; echo h($ret[2])." "; echo h($ret[3]); echo "<br>"; } ?> </p> </body> </html>
php
//php <?php header('Content-Type: text/html; charset=UTF-8'); ?> <html> <head> <meta charset="utf-8"/> <title>sample</title> </head> <body> <?php function h($str) { return htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); } //session_start(); // 1 $name = (string)filter_input(INPUT_POST, 'name'); //名前フォーム値 文字列にキャスト $comment = (string)filter_input(INPUT_POST, 'com');//コメントフォーム値 フィルタリングする //$token = (string)filter_input(INPUT_POST, 'token'); // トークンセッション switch($_POST["mode"]){ case "add"://投稿追加処理 $fp = fopen('Kadai2_15.txt', 'a+'); if ($_SERVER['REQUEST_METHOD'] === 'POST'/* && sha1(session_id()) === $token */) { // postが送られて来てるか?CSRF対策 flock($fp, LOCK_SH); $text_rows = file("Kadai2_15.txt"); $count = count($text_rows);//行数をカウント $add_text = ($count + 1)."<>".$name."<>".trim($comment)."<>".date('H時i分');//追加したい文章 array_unshift($text_rows, $add_text); flock($fp, LOCK_EX); fwrite($fp, $add_text."\n"); flock($fp, LOCK_UN); fclose($fp); } break; case "delete"://投稿削除処理 if (isset($_POST["delete"])) { $fp = fopen('Kadai2_15.txt', 'a+'); $delete = $_POST["deleteNo"]; flock($fp, LOCK_SH); $delarray = file("Kadai2_15.txt"); for ($j = 0; $j < count($delarray) ; $j++){ $delData = explode("<>", $delarray[$j]); if ($delData[0] == $delete) { array_splice($delarray, $j, 1); flock($fp, LOCK_EX); file_put_contents($fp, implode("\n", $delarray));//問題の箇所 break; } } break; } } ?> </body> </html>
まだまだ未熟者で汚いソースと思いますが、よろしくお願いします。
var_dump($delarray)の出力結果 ↓
{
array(4) { [0]=> string(54) "1<>アンパンマン<>アンパンラブ<>15時46分 " [1]=> string(54) "2<>ジャムおじさん<>ジャムラブ<>15時47分 " [2]=> string(54) "3<>バタコさん<>バター塗りたい<>15時47分 " [3]=> string(45) "4<>チーズ<>キャンキャン<>15時47分 " }
}
↓入力結果
まだ回答がついていません
会員登録して回答してみよう