質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1307閲覧

掲示板のコメントを削除する前にアラートを出したい

arubina33

総合スコア4

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/11/21 06:00

編集2020/11/21 06:17

前提、実現したいこと

PHPの練習で掲示板を作成中なのですがコメントを削除する前に'本当に削除してもいいですか?'とアラートを表示させたいです。
現状の機能として
・コメント入力の際にパスワードを入力する
・コメントの削除、編集するにはコメントを投稿したときに決めたパスワードを入力する
・「コメントを削除する」をクリックすると消したいコメント番号とそのパスワードを入力するフォームが開く
・「コメントを編集する」をクリックすると編集したいコメント番号を入力するフォームが開き、番号を入力すると名前とコメントの入力フォームに選んだ番号の内容が反映される
・番号、名前、コメント、コメントした日時を入力フォームの下に表示する
・入力した内容はテキストファイルに保存(<>はデリミタ、パスワードも一緒に保存)
があります。

###問題点
削除ボタンを押すとアラートが出るようにコードを組んでみたのですがアラート画面が出てきません。
エラーメッセージは出てきていません。

また、パスワード機能を追加する前のコードでは削除時のアラートが表示されていましたが、パスワード機能をつけたあとではアラートが出なくなってしまいました。
原因がわかる方がいらっしゃれば教えていただけるとありがたいです。

該当のソースコード

php

1<?php 2//コメントされた内容をテキストファイルに保存 3date_default_timezone_set('Japan'); 4$name = ''; 5$comment = ''; 6$password = ''; 7$array = []; 8$filepath = 'keijiban.txt'; 9if (file_exists($filepath)){ 10 $filedata = file($filepath); 11 //テキストデータを配列に変換 12 foreach ($filedata as $row) { 13 $rowdata = explode('<>', $row); 14 $array[] = $rowdata; 15 } 16} 17//「投稿」または「編集する」が押されたら 18if(isset($_POST['send'])){ 19 $name = htmlspecialchars($_POST['name']); 20 $comment = htmlspecialchars($_POST['comment']); 21 $password = $_POST['password']; 22 $date = date('Y/m/d H:i:s'); //変数を定義 23 24 if(($name=='')or($comment=='')){ 25 echo '未入力項目があります'; 26 }elseif(preg_match('/(?=.*[a-z])(?=.*[0-9])[a-zA-Z0-9]{6,}/',$password)){ //パスワードの条件を確認 27 if(file_exists($filepath)){ 28 $num = count($filedata)+1; 29 }else{ 30 $num = 1; 31 } 32 $writedata = ($_POST['edit_post'] ?: $num).'<>'.$name.'<>'.$comment.'<>'.$date.'<>'.$password."\n"; 33 if($_POST['edit_post']){ //「編集する」が押された場合 34 if ($password != trim($array[$_POST['edit_post']-1][4])){ //パスワードを照合 35 echo "パスワードが違います"; 36 }else{ 37 foreach ($filedata as &$row){ 38 $rowdata = explode('<>', $row); 39 if($rowdata[0] == $_POST['edit_post']){ 40 $row = $writedata; 41 } 42 } 43 } 44 }else{ //「投稿」が押された場合 45 $filedata[] = $writedata; 46 } 47 file_put_contents($filepath,$filedata); 48 }else{ 49 echo '適切なパスワードではありません'; 50 } 51} 52?> 53 54<script type="text/javascript"> //アラートを出すための関数 55 function delete_check(){ 56 if (!window.confirm('本当に削除しますか?')){ 57 return false; 58 } 59 document.submit(); 60 } 61</script> 62 63<?php 64//コメントの削除 65$del_num = ''; 66if (isset($_POST['delsend_2'])){ 67 $del_num = htmlspecialchars(mb_convert_kana($_POST['delete'],'n')); 68 $password = $_POST['password']; 69 if ($del_num==''){ 70 echo "番号が指定されていません"; 71 }else{ 72 if (($del_num > count($filedata))or($del_num <= 0)){ 73 echo "そのコメント番号は存在しません"; 74 }elseif ($password != trim($array[$del_num-1][4])){ 75 echo "パスワードが違います"; 76 }else{ 77 $fp = fopen($filepath, 'w'); 78 for ($i=0; $i<count($filedata); $i++){ 79 $delcom = explode('<>', $filedata[$i]); 80 if ($delcom[0] != $del_num){ 81 fwrite($fp,$filedata[$i]); 82 }else{ 83 fwrite($fp,"削除しました<>N \n"); 84 } 85 } 86 fclose($fp); 87 } 88 } 89} 90?> 91<?php 92//コメントの編集 93$edit_num = ''; 94$edit_name = ''; 95$edit_comment = ''; 96 97if (isset($_POST['editsend_2'])){ 98 $edit_num = htmlspecialchars(mb_convert_kana($_POST['edit'],'n')); 99 if ($edit_num==''){ 100 echo '番号が指定されていません'; 101 }else{ 102 if(($edit_num > count($filedata))or($edit_num <= 0)){ 103 echo 'そのコメント番号は存在しません'; 104 }else{ 105 foreach($filedata as $row){ 106 $edit_data = explode('<>', $row); 107 if ($edit_data[0] == $edit_num){ 108 $edit_name = $edit_data[1]; 109 $edit_comment = $edit_data[2]; 110 break; 111 } 112 } 113 } 114 } 115} 116?> 117 118<!DOCTYPE html> 119<html> 120<head> 121 <meta charset='utf-8'> 122 <title>掲示板</title> 123</head> 124<body> 125 <form action='' method='post'> 126 <input type='hidden' name='edit_post' value='<?php echo $edit_num; ?>'> 127 名前<br> 128 <input type='text' name='name'value='<?php echo $edit_name; ?>'><br> 129 コメント<br> 130 <textarea name='comment' rows='5' cols='35'><?php echo $edit_comment; ?></textarea><br> 131 <?php 132 if($edit_num==''){ 133 echo "パスワードを決めて入力してください<br />"; 134 echo "(6文字以上で半角アルファベットと半角数字を各1文字以上含むこと)<br />"; 135 echo "<input type='password' name='password'><br />"; 136 echo "<input type='submit' name='send' value='投稿'><br /><br />"; 137 }else{ 138 echo "パスワードを入力してください<br />"; 139 echo "<input type='password' name='password'><br />"; 140 echo "<input type='submit' name='send' value='編集する'><br /><br />"; 141 } 142 ?> 143 </from> 144 <?php //削除についての入力フォーム 145 if(isset($_POST['delsend_1'])){ // 「コメントを削除する」が押されたら表示 146 echo "<form action='' method='post' onsubmit='return delete_check()'>"; 147 echo "削除対象番号<br />"; 148 echo "<input type='text' name='delete' size='5'><br />"; 149 echo "パスワードを入力してください<br />"; 150 echo "<input type='password' name='password'><br />"; 151 echo "<input type='submit' name='delsend_2' value='削除'></form>"; 152 }else{ 153 echo "<form action='' method='post'>"; 154 echo "<input type='submit' name='delsend_1' value='コメントを削除する'></form>"; 155 } 156 ?> 157 <form action='' method='post'> 158 <?php //編集についての入力フォーム 159 if(isset($_POST['editsend_1'])){ // 「コメントを編集する」が押されたら表示 160 echo "編集対象番号<br />"; 161 echo "<input type='text' name='edit' size='5'><br />"; 162 echo "<input type='submit' name='editsend_2' value='編集'>"; 163 }else{ 164 echo "<input type='submit' name='editsend_1' value='コメントを編集する'><br />"; 165 } 166 ?> 167 </form> 168 <h3>コメント欄<h3> 169 <?php 170 if (file_exists($filepath)){ 171 $filedata = file($filepath); 172 foreach($filedata as $value){ 173 $com= explode('<>', $value); 174 for($i=0; $i<count($com)-1; $i++){ //パスワードを表示しないために−1する 175 echo $com[$i],' '; 176 } 177 echo "<br />"; 178 } 179 } 180 ?> 181</body> 182</html>

パスワード機能をつける前のコード

php

1<?php 2//コメントされた内容をテキストファイルに保存 3date_default_timezone_set('Japan'); 4$name = ''; 5$comment = ''; 6$filepath = 'keijiban.txt'; 7if (file_exists($filepath)){ 8 $filedata = file($filepath); 9} 10 11if(isset($_POST['send'])){ 12 $name = htmlspecialchars($_POST['name']); 13 $comment = htmlspecialchars($_POST['comment']); 14 $date = date('Y/m/d H:i:s'); 15 16 if (($name=='')or($comment=='')){ 17 echo '未入力項目があります'; 18 }else{ 19 if(file_exists($filepath)){ 20 $num = count($filedata)+1; 21 }else{ 22 $num = 1; 23 } 24 $writedata = ($_POST['edit_post'] ?: $num).'<>'.$name.'<>'.$comment.'<>'.$date."\n"; 25 if($_POST['edit_post']){ 26 foreach ($filedata as &$row){ 27 $rowdata = explode('<>', $row); 28 if($rowdata[0] == $_POST['edit_post']){ 29 $row = $writedata; 30 } 31 } 32 }else{ 33 $filedata[] = $writedata; 34 } 35 file_put_contents($filepath,$filedata); 36 } 37} 38?> 39 40<script type="text/javascript"> 41 function delete_check(){ 42 if (!window.confirm('削除しますか?')){ 43 return false; 44 } 45 document.submit(); 46 } 47</script> 48 49<?php 50//コメントの削除 51$del_num = ''; 52if (isset($_POST['delsend'])){ 53 $del_num = htmlspecialchars(mb_convert_kana($_POST['delete'],'n')); 54 if ($del_num==''){ 55 echo '番号が指定されていません'; 56 }else{ 57 if(($del_num <= count($filedata))and($del_num > 0)){ 58 $fp = fopen($filepath, 'w'); 59 for ($i=0; $i<count($filedata); $i++){ 60 $delcom = explode('<>', $filedata[$i]); 61 if ($delcom[0] != $del_num){ 62 fwrite($fp,$filedata[$i]); 63 }else{ 64 fwrite($fp,"削除しました \n"); 65 } 66 } 67 fclose($fp); 68 }else{ 69 echo 'そのコメント番号は存在しません'; 70 } 71 } 72} 73?> 74<?php 75//コメントの編集 76$edit_num = ''; 77$edit_name = ''; 78$edit_comment = ''; 79 80if (isset($_POST['editsend'])){ 81 $edit_num = htmlspecialchars(mb_convert_kana($_POST['edit'],'n')); 82 if ($edit_num==''){ 83 echo '番号が指定されていません'; 84 }else{ 85 if(($edit_num <= count($filedata))and($edit_num > 0)){ 86 foreach($filedata as $row){ 87 $edit_data = explode('<>', $row); 88 if ($edit_data[0] == $edit_num){ 89 $edit_name = $edit_data[1]; 90 $edit_comment = $edit_data[2]; 91 break; 92 } 93 } 94 }else{ 95 echo 'そのコメント番号は存在しません'; 96 } 97 } 98} 99?> 100 101<!DOCTYPE html> 102<html> 103<head> 104 <meta charset='utf-8'> 105 <title>掲示板</title> 106</head> 107<body> 108 <form action='' method='post'> 109 <input type='hidden' name='edit_post' value='<?php echo $edit_num; ?>'> 110 名前<br> 111 <input type='text' name='name'value='<?php echo $edit_name; ?>'><br> 112 コメント<br> 113 <textarea name='comment'><?php echo $edit_comment; ?></textarea><br> 114 <?php 115 if($edit_num==''){ 116 echo "<input type='submit' name='send' value='投稿'><br /><br />"; 117 }else{ 118 echo "<input type='submit' name='send' value='編集する'><br /><br />"; 119 } 120 ?> 121 </form> 122 <form action='' method='post' onsubmit="return delete_check()"> 123 削除対象番号<br> 124 <input type='text' name='delete' size='5'><br> 125 <input type='submit' name='delsend' value='削除'> 126 </form> 127 <form action='' method='post'> 128 編集対象番号<br> 129 <input type='text' name='edit' size='5'><br> 130 <input type='submit' name='editsend' value='編集'> 131 </form> 132 <h3>コメント欄<h3> 133 <?php 134 if (file_exists($filepath)){ 135 $filedata = file($filepath); 136 foreach($filedata as $value){ 137 $com= explode('<>', $value); 138 foreach ($com as $c){ 139 echo $c,' '; 140 } 141 echo "<br>"; 142 } 143 } 144 ?> 145</body> 146</html> 147

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

form要素の閉じタグが</from>になってるのが原因でしょう。
場所は、"from"で検索すれば分かると思います。

投稿2020/11/21 08:09

gpsoft

総合スコア1323

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

arubina33

2020/11/21 08:18

回答ありがとうございます。 formの誤字に気づいていませんでした... 閉じタグを訂正すると正しく動作しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問