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

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

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

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

PHP

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

パスワード

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

1042閲覧

ファイルへの書き込みに失敗する

Renfield

総合スコア3

ファイル

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

PHP

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

パスワード

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2021/10/03 12:00

前提・実現したいこと

HTMLとPHPで簡易掲示板を作っています。
パスワードと投稿番号が削除用フォームに入力されたものと一致するときに、投稿削除をできるようにしたいです。

発生している問題・エラーメッセージ

Warning: fwrite(): supplied resource is not a valid stream resource in /public_html/m3/m3-05.php on line 146 Warning: fclose(): supplied resource is not a valid stream resource in /public_html/m3/m3-05.php on line 155

該当のソースコード

PHP

1//fileには順番に投稿番号、名前、コメント、日付、パスワードが<>で区切られて書き込まれています。 2//$dnumと$dpassは削除用フォームに書き込まれた投稿番号とパスワードです。 3elseif(!empty($_POST["dnum"]) && !empty($_POST["dpass"])){ 4 $dnum = $_POST["dnum"]; 5 $dpass = $_POST["dpass"]; 6 $filename = "m3-05.txt"; 7 $lines = file($filename,FILE_IGNORE_NEW_LINES); 8 $fp = fopen($filename,"w"); 9 foreach($lines as $line){ 10 $item = explode("<>",$line."<br>"); 11 if($item[0] == $dnum){ 12 if($item[4] == $dpass){ 13 fwrite($fp,"\n"); 14 } 15 else{ 16 fwrite($fp,$line.PHP_EOL); 17 } 18 } 19 else{ 20 fwrite($fp,$line.PHP_EOL); 21 } 22 fclose($fp); 23 }

試したこと

if($item[0] == $dnum && $item[4] == $dpass)のように投稿番号とパスワードを同時に確認した場合には正常に動作しました。
そのため、アクセス権の問題ではないと思います。
ただその場合、投稿とパスワードが誰のものかに関わらず、2つがファイル内に存在すれば削除できるようになってしまった(自分のパスワードで他の人の投稿を削除できる)ため、現在の形を試しています。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

fopenの返り値をテストしましょう。

$fp = fopen($filename,"w"); if ($fp === false) { // エラー処理 }

追記

ああ、わかりました。ループの中でfcloseしちゃってますよ。

投稿2021/10/03 12:13

編集2021/10/03 13:07
itagagaki

総合スコア8402

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

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

Renfield

2021/10/03 12:57

回答ありがとうございます。 確認してみましたが、ファイルは正常に開けているようです。
Renfield

2021/10/03 13:08 編集

すみません。 if ($fp == true){ echo "開けている"; } 再度このような処理を試したところ、「開けている」が表示されたのですが、==を===にしたところ「開けている」が表示されませんでした。
itagagaki

2021/10/03 13:10

$fpはopenに成功した場合はファイルハンドルなので true とは一致しません。 それはそうと、回答を追記しました。
Renfield

2021/10/03 13:18

できました!こんな単純なことだったんですね… ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問