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

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

新規登録して質問してみよう
ただいま回答率
85.49%
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

PHP

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

パスワード

パスワードは主に情報にアクセスする際に扱われます。主に、アクセス可能なユーザーを限定する手段として使われます。

Q&A

解決済

1回答

1644閲覧

php 掲示板 パスワード機能

huku

総合スコア18

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

PHP

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

パスワード

パスワードは主に情報にアクセスする際に扱われます。主に、アクセス可能なユーザーを限定する手段として使われます。

0グッド

0クリップ

投稿2019/12/14 03:36

編集2019/12/24 09:35

現在掲示板にパスワード機能をつけたいと考えています。
ファイルはphpファイルのindex.php、掲示板で出力するデータを格納するreceave.txt,で構成しています。
やりたいことは
消去機能の部分で、入力された番号とパスワードが格納されているものと一致している場合消去し、消去しましたと表示させることです。
現在消去はできるのですが、パスワードに関係なく消えてしまう状況です。
また消えた後に<>が残ってしまうのですがいい表示方法はないでしょうか?

調べた結果、explodeがうまく動作していないということがわかりました。
うまく配列になっておらず、〔0〕はうまく動くのですが、{4〕が認識されていません。
しかし、どう編集すればいいのか分からず、いろいろと試しましたがうまくいかず行き詰っています。
そうすればうまく動くのかわかる方いましたら教えていただきたいです。

回答よろしくお願いします。

php

1 2 3<?php 4 5 6 7$file="receive.txt"; 8if (file_exists($file)) { 9 $count = count(file($file))+1; 10} else { 11 $count = 1; 12 } 13$err_msg1 = ""; 14$err_msg2 = ""; 15$err_msg7= ""; 16$message =""; 17$passmessage=""; 18$edfile = file('receive.txt'); 19$name=( isset( $_POST["name"] ) === true ) ?$_POST["name"]: ""; 20$text=( isset( $_POST["text"] ) === true ) ?$_POST["text"]: ""; 21$password=( isset( $_POST["password"] ) === true ) ?$_POST["password"]: ""; 22$data=($count."<>".$name."<>".$text."<>" .date('H:i:s')."<>".$password."\n"); 23 24if ( isset($_POST["posting"] ) === true ) { 25 26 if ( $name === "" ) $err_msg1 = "名前を入力してください"; 27 28 if ( $text === "" ) $err_msg2 = "コメントを入力してください"; 29 30 if ( $password === "" ) $err_msg7 = "パスワードを入力してください"; 31 32 33 if( $err_msg1 === "" && $err_msg2 ==="" && $err_msg7 ===""){ 34 $fp = fopen( "receive.txt" ,"a" ); 35 fwrite( $fp , $data); 36 $message ="投稿に成功しました。"; 37 38 } 39 fclose($fp); 40 } 41 42 43 44 45 46 47// 編集フォーム 48 49$err_msg3 = ""; 50$err_msg4 = ""; 51$err_msg5 = ""; 52$err_msg9 = ""; 53$message2 =""; 54$edfile = file('receive.txt'); 55$renum=( isset( $_POST["renum"] ) === true ) ?$_POST["renum"]: ""; 56$rename=( isset( $_POST["rename"] ) === true ) ?$_POST["rename"]: ""; 57$retext=( isset( $_POST["retext"] ) === true ) ?$_POST["retext"]: ""; 58$pass2ed=( isset( $_POST["pass2ed"] ) === true ) ?$_POST["pass2ed"]: ""; 59$redata=($renum."<>".$rename."<>".$retext."<>" .date('H:i:s')."<>".$pass2ed."\n"); 60 61 62 63if ( isset($_POST["edit"] ) === true ) { 64 65 if ( $renum === "" ) $err_msg3 = "番号を入力してください"; 66 67 if ( $rename === "" ) $err_msg4 = "名前を入力してください"; 68 69 if ( $retext === "" ) $err_msg5 = "コメントを入力してください"; 70 71 if ( $pass2ed === "" ) $err_msg9 = "パスワードを入力してください"; 72 73 74 if( $err_msg3 === "" && $err_msg4 === "" && $err_msg5 === "" && $err_msg9 === ""){ 75 $fp = fopen("receive.txt", "w"); 76 for ($i = 0; $i < count($edfile); $i++) { 77 $editraw = explode("<>", $edfile[$i]); 78 if ($editraw[0] !== $renum && $editraw[4] !== $pass2ed) { 79 fwrite($fp, $edfile[$i]); 80 } 81 else{ 82 fwrite($fp, $redata); 83 $message2 ="編集に成功しました。"; 84 } 85 } 86 } 87 } 88 89 // 消去フォーム 90 $err_msg6 = ""; 91 $err_msg8 = ""; 92 $delfile = file('receive.txt'); 93 $delete=( isset( $_POST["delete"] ) === true ) ?$_POST["delete"]: ""; 94 $pass3del=( isset( $_POST["pass3del"] ) === true ) ?$_POST["pass3del"]: ""; 95 96 97 if ( isset($_POST["delete"] ) === true ) { 98 99 if ( $delete === "" ) $err_msg6 = "番号を入力してください"; 100 101 if ( $pass3del === "" ) $err_msg8 = "パスワードを入力してください"; 102 103 if( $err_msg6 === "" && $err_msg8 === ""){ 104 $fp = fopen("receive.txt", "w"); 105 for ($i = 0; $i < count($delfile); $i++) { 106 $deldata = explode("<>", $delfile[$i]); 107 if ($deldata[0] !== $delete && $deldata[4] !== $pass3del ) { 108 fwrite($fp, $delfile[$i]); 109 } else { 110 fwrite($fp, "消去しました。\n"); 111 } 112 } 113 } 114 fclose($fp); 115 } 116 117 118 119?> 120 121<!DOCTYPE html> 122<html lang="ja"> 123<head> 124<meta charset="UTF-8"> 125<title>掲示板</title> 126 <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> 127 <link rel="stylesheet" href="./styles.css" type="text/css"> 128</head> 129<body> 130<h1>掲示板</h1> 131<section> 132 <h2>新規投稿</h2> 133 <form action="index.php" method="post"> 134  名前 : <input type="text" name="name" > <?php echo $err_msg1; ?><br> 135 コメント: <input type="text" name="text" > <?php echo $err_msg2; ?><br> 136 パスワードを設定 <input type="text" name="password" > <?php echo $err_msg7; ?> 137 <input type="submit" value="投稿" name="posting"><br> 138 <?php echo $message; ?> 139 </form> 140 141 142 <h2>投稿編集</h2> 143 <form action="index.php" method="post"> 144 編集番号 <input type="number" name="renum"> <?php echo $err_msg3; ?><br> 145 名前: <input type="text" name="rename" ><?php echo $err_msg4; ?><br> 146 コメント: <input type="text" name="retext" > <?php echo $err_msg5; ?><br> 147 パスワードを入力 <input type="text" name="pass2ed" ><?php echo $err_msg9; ?><br> 148 <input type="submit" value="編集" name="edit"><br> 149 <?php echo $message2; ?> 150 </form> 151 152 153 154 155 <h2>消去</h2> 156 <form action="index.php" method="post"> 157 消去番号 <input type="number" name="delete">     <?php echo $err_msg6; ?><br> 158 パスワードを入力 <input type="text" name="pass3del" > <?php echo $err_msg8; ?><br> 159 <input type="submit" value="消去">  <br> 160 </form> 161 162</section> 163<section> 164 <h2>投稿一覧</h2> 165</section> 166 167<?php 168// 読み込むファイル名の指定 169$file_name = "receive.txt"; 170// ファイルを全て配列に入れる 171$ret_array = file( $file_name ); 172 173// 取得したファイルデータ(配列)を全て表示する 174for( $i = 0; $i < count($ret_array); ++$i ) { 175 $echo_array = explode("<>", $edfile[$i]); 176 177// // 配列を順番に表示する 178 echo ( $echo_array[0]."<>".$echo_array[1]."<>".$echo_array[2]."<>".$echo_array[3]."<br />\n" ); 179} 180 181 ?> 182 183 184</body> 185</html> 186

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

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

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

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

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

m.ts10806

2019/12/14 04:39

実装上他にも気になるところは山ほどありますが、そこはひとまずとして。 どうしてもテキストベースでデータ保存したいですか? DBじゃダメですか?むしろDBにすべきと思うのですけど。
huku

2019/12/16 13:21 編集

とりあえずテキスト形式で練習をしてからデータベース形式のものを作りたいと考えています。
javahack

2019/12/24 17:22

ファイル入出力を勉強したいのなら止めませんが、掲示板機能作成が目的ならDB一択だと思います。 意味のないところで行き詰っているより、学習のモチベーションも上がります。
guest

回答1

0

ベストアンサー

php

1if ($deldata[0] !== $delete && $deldata[4] !== $pass3del ) {

↑ここ

「削除指定の行でない、かつ、パスワードが一致しないなら、削除しない」なら
「削除指定の行である」ならばパスワードが一致しなくても削除されますよね

「削除指定の行、かつ、パスワードが一致する」の集合を排するなら
「削除指定の行でない、または、パスワードが一致しない」ですよね

そして、file()で取得した配列の各行の末尾には改行がついてます
要trim

現行だと本来なら指定していない行も
パスワードさえ一致すれば削除されるはずなのですよね

そう言うことが認識されてないのは
パスワードに改行がついてしまっているので
一致したパスワードを入力できなかったからでしょうね

投稿2019/12/25 08:36

KazuhiroHatano

総合スコア7804

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問