phpの勉強で簡昜掲示板を作っております。
<内容>
名前、コメント、パスワードを入力し追加ボタンを押すとテキストファイル(Kadai2_15.txt)に
番号<>名前<>コメント<>日時<>パスワード
といった形で保存される。
保存した内容をKadai2_1sam.phpに出力する。
消去機能を実行する場合は、消去したい番号とパスワードを入力し、消去。
編集機能を実行する場合は、編集したい番号とパスワードを入力し、編集。
<やりたい事>
消去ボタンおした時、本当に消去しますか?とアラートする機能を作りたいです。
<できない事>
下のコードではjavaScriptでアラートさせているのですが、キャンセルした時も
消去処理が完了してしまいます。
Kadai2_1sam.php
php
1<?php 2header('Content-Type: text/html; charset=UTF-8'); 3 4require_once('Kadai2_15sam.php'); 5?> 6<html> 7 <head> 8 <meta charset="utf-8"/> 9 <title>sample</title> 10 <script type="text/javascript"> 11 function disp(){ 12 13 // 「OK」時の処理開始 + 確認ダイアログの表示 14 if(window.confirm('本当にいいんですね?')){ 15 16 location.href = "Kadai2_15sam.php"; // Kadai2_15sam.php へジャンプ 17 18 } 19 // 「OK」時の処理終了 20 // 「キャンセル」時の処理開始 21 else{ 22 <?php 23 $_POST["delete"] = NULL; 24 ?> 25 window.alert('キャンセルされました'); // 警告ダイアログを表示 26 27 } 28 // 「キャンセル」時の処理終了 29 30 } 31 </script> 32 </head> 33 <body> 34 <form method="post" action="<?php echo($_SERVER['SCRIPT_NAME']) ?>"> 35 <input type="hidden" name="editmode" value="<?php echo($_POST['editNo']);?>"> 36 <p>名前:</p> 37 <input type="text" value="<?php echo($simEdit[1]); ?>" name="name" required="required"> 38 <p>コメント:</p> 39 <textarea type="text" name="com" maxlength="20" required><?php echo $simEdit[2]; ?></textarea> 40 <p>パスワード:</p> 41 <input type="password" name="pas" required="required" maxlength='8' placeholder='8字以内'> 42 <input type="submit" name="add" value="追加"> 43 </form> 44 <form action="<?php echo($_SERVER['SCRIPT_NAME']) ?>" method="POST"> 45 <p>削除対象番号:</p><!-- 削除対象番号 --> 46 <input type="number" name="deleteNo"> 47 <p>消去パスワード:</p> 48 <input type="password" name="delpas" required="required" maxlength='8' placeholder='8字以内'> 49 <input type="submit" name="delete" value="削除" onClick="disp()"> 50 </form> 51 <form action="<?php echo($_SERVER['SCRIPT_NAME']) ?>" method="POST"> 52 <p>編集対象番号:</p><!-- 編集対象番号 --> 53 <input type="number" name="editNo"> 54 <p>編集パスワード:</p> 55 <input type="password" name="editpas" required="required" maxlength='8' placeholder='8字以内'> 56 <input type="submit" name="edit" value="編集"> 57 </form> 58 <p> 59 <p> 60 掲示板: 61 </p> 62 <?php 63 64 foreach ((array)$text_rows as $text_row) {//配列でcount<>name<>comment<>data表示 65 if($text_row === ""){ 66 continue;//空の時、次の配列へ 67 } 68 $ret = explode("<>", $text_row); 69 echo h($ret[0])."番 "; 70 echo h($ret[1])." さん "; 71 echo h($ret[2])." "; 72 echo h($ret[3]); 73 echo "<br>"; 74 75 } 76 ?> 77 78 </p> 79 </body> 80</html> 81
Kadai2_15sam.php
php
1<?php 2header('Content-Type: text/html; charset=UTF-8'); 3?> 4<html> 5 <head> 6 <meta charset="utf-8"/> 7 <title>sample</title> 8 </head> 9 <body> 10 11 <?php 12 13 function h($str) { 14 return htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); 15 } 16 17 //session_start(); // 1 18 19 $name = (string)filter_input(INPUT_POST, 'name'); //名前フォーム値 文字列にキャスト 20 $comment = (string)filter_input(INPUT_POST, 'com');//コメントフォーム値 フィルタリングする 21 $pas = (string)filter_input(INPUT_POST, 'pas');//password 22 $fileName = 'Kadai2_15.txt'; 23 24 //投稿追加処理 25 if (isset($_POST["add"]) && empty($_POST["editmode"])) 26 { 27 echo "追加モード!"; 28 $fp = fopen($fileName, 'a+'); 29 flock($fp, LOCK_SH); 30 $text_rows = file($fileName); 31 //var_dump($text_rows); 32 $lastline = explode("<>", $text_rows[count($text_rows)-1]);//<>で配列を作る。 33 $num = $lastline[0];//番号取得 34 $add_text = ($num + 1)."<>".$name."<>".trim($comment)."<>".date('H時i分')."<>".trim($pas);//追加したい文章 35 array_unshift($text_rows, $add_text);//一つ以上の要素を配列の最初に加える 36 flock($fp, LOCK_EX); 37 fwrite($fp, $add_text."\n"); 38 flock($fp, LOCK_UN); 39 fclose($fp); 40 } 41 42 //投稿削除処理 43 if (isset($_POST["delete"])) 44 { 45 echo "消去モード!"; 46 $fp = fopen($fileName, 'a+'); 47 $delete = $_POST["deleteNo"]; 48 $delpas = $_POST["delpas"]; 49 flock($fp, LOCK_SH); 50 $text_rows = file($fileName); 51 //var_dump($delarray); 52 for ($j = 0; $j < count($text_rows) ; $j++) 53 { 54 $delData = explode("<>", $text_rows[$j]);//配列に格納 55 var_dump($delData); 56 var_dump($delpas); 57 if ($delData[0] == $delete && trim($delData[4]) == $delpas)//番号が同じ時 58 { 59 array_splice($text_rows, $j, 1);//置換 60 file_put_contents($fileName, implode($text_rows)); 61 flock($fp, LOCK_UN); 62 fclose($fp); 63 } 64 } 65 } 66 67 //投稿編集処理 68 if (isset($_POST["edit"])) 69 { 70 echo "編集フォーム!"; 71 $fp = fopen($fileName, 'a+'); 72 $edit = $_POST["editNo"]; 73 $editpas = $_POST["editpas"]; 74 //print_r($edit); 75 flock($fp, LOCK_SH); 76 $text_rows = file($fileName); 77 //var_dump($editarray);// 78 for ($j = 0; $j < count($text_rows); $j++) 79 { 80 $ediData = explode("<>", $text_rows[$j]); 81 //var_dump($ediData); 82 //var_dump($editpas); 83 if ($ediData[0] == $edit && trim($ediData[4]) == $editpas) 84 { 85 for($h = 0; $h < count($ediData); $h++) 86 { 87 $simEdit[$h] = mb_substr(trim($ediData[$h]), 0); 88 89 } 90 //var_dump($simEdit); 91 flock($fp, LOCK_UN); 92 fclose($fp); 93 } 94 } 95 } 96 97 if (isset($_POST["add"]) && !empty($_POST['editmode'])) 98 { 99 echo "編集モード!"; 100 $fp = fopen($fileName, 'a+'); 101 $edit = $_POST["editNo"]; 102 flock($fp, LOCK_SH); 103 $text_rows = file($fileName); 104 //var_dump($text_rows);// 105 for ($j = 0; $j < count($text_rows); $j++) 106 { 107 $ediData2 = explode("<>", $text_rows[$j]); 108 if ($ediData2[0] == $_POST['editmode']) 109 { 110 $ediData2[1] = $name;//POST[’name’] 111 $ediData2[2] = $comment;//POST[’comment’] 112 $ediData2[4] = $pas;//POST[’pas’] 113 $text_rows[$j] = implode("<>", $ediData2); 114 //var_dump($text_rows); 115 file_put_contents($fileName,implode($text_rows)); 116 flock($fp, LOCK_UN); 117 fclose($fp); 118 } 119 } 120 //var_dump($ediData2); 121 } 122 123 124 125 126 ?> 127 </body> 128 129</html>
実装画面
まだまだ未熟者ですがよろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2018/04/18 01:33
2018/04/18 01:45 編集
2018/04/18 04:28
2018/04/18 04:41 編集