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

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

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

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

Q&A

解決済

1回答

3193閲覧

php簡易掲示板に指定された番号だけを削除する削除機能をつけたい

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

0グッド

0クリップ

投稿2019/08/16 06:36

編集2019/08/16 07:16

前提・実現したいこと

phpで簡易掲示板に指定された番号の投稿だけ削除できるようにする削除機能たいです。
ただ自分が初心者な事もあり、どこに何をつければいいのかが分かりません。
ここでも同じような質問がたくさんあったのでほぼすべて見てみましたが、自分とはコードの書き方が違っていて理解することが出来ませんでした。

if文で投稿フォームからの投稿か削除フォームからなのか条件分岐させて、foreachを使って1文ずつチェックし指定番号と投稿番号が一致していないときに書き込むことが最初のステップということまでは理解しましたが、それは今書き終えているコードの続きに書くのでしょうか?それともどこかに組み込むのでしょうか?
また、「1文ずつチェックをする」には何をすればいいのかが分かりません。
初歩的な質問ではあると思いますがご教授お願いします・・・!

コードはここまで書きました。

該当のソースコード

php

1<!DOCTYPE html> 2<html lang="ja"> 3<html> 4 <head> 5 <meta charset="utf-8"> 6 <title>mission3-3_new</title> 7 </head> 8 <body> 9 <form action="mission_3-3_new.php" method="post"> 10 【 投稿フォーム 】<br> 11 名  前: 12 <input type="text" name="user" value=""><br> 13 コメント: 14 <input type="text" name="comment" value=""><br> 15 <input type="submit"><br><br> 16 【 削除フォーム 】<br> 17 投稿番号: 18 <input type="text" name="deletenumber" value=""><br> 19 <input type="submit" value="削除"><br><br> 20 21 </form> 22 23<?php 24if(!empty($_POST["user"]) || !empty($_POST["comment"])){ 25 26 $date = date("y/m/d H:i"); 27 28 //カウント用ファイルを開く 29 $fp2 = fopen("count.txt","r"); 30 $num_text = fgets($fp2);//1行目を文字列として読み込む 31 fclose($fp2);//ファイルを閉じる 32 33 $num_text +=1;//カウントを1増やす 34 35 $fp2 = fopen("count.txt","w"); 36 fwrite($fp2,$num_text);//新しい数値を書き込む 37 fclose($fp2); 38 39 //投稿内容用ファイルを開く 40 $fp = fopen("mission_3-3_new.txt", "a"); 41 $info = $num_text."<>".$_POST["user"]."<>".$_POST["comment"]."<>".$date; 42 fwrite($fp, $info."\r\n"); 43 fclose($fp); 44?> 45 46 【 投稿一覧 】<br> 47 48<?php 49 $hairetsu = file("mission_3-3_new.txt"); 50 foreach($hairetsu as $hensuu){ 51 $splits = explode("<>",$hensuu); 52 53 //投稿番号、氏名、コメント、日時を表示して改行する 54 echo $splits[0].".".$splits[1].".".$splits[2].".".$splits[3]."<br>"; 55 56 //繰り返し処理はここまで 57 } 58 59} 60?> 61 62 63 64 65 </body> 66</html>

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

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

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

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

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

gentaro

2019/08/16 06:43

タイトルに「【初心者です、助けてください】」って書く代わりに「初心者マーク」を付ける機能があるんで、そっちを使いましょう。(編集できます)
m.ts10806

2019/08/16 06:44

タイトルは要件のみを記載してください。 https://teratail.com/help/question-tips#questionTips3-1 >ありがちな失敗としては、「助けてください」「初心者です」という表題をつけてしまうことです。 両方入ってしまっていますね。 「初心者」については「初心者アイコン」がありますのでそれを質問につけてください。 「助けてください」は「急ぎです」のような煽り文句と同じと思いますので、それはそれで不要です。 むしろより具体的に質問を記載することに注力してください。 ※質問は編集できます
gentaro

2019/08/16 06:45

あと学校の課題なら先生に聞くのが筋ってもんです。 ガイドラインに書いてあるんで。 「学校の課題を解いてほしい等の質問は、具体的にプログラミングで困っている質問ではないと考え、推奨していません。」 https://teratail.com/help/avoid-asking
azuapricot

2019/08/16 06:47

授業の課題なら先生に聞きに行かなきゃ~。 なんのための学校ですか?
退会済みユーザー

退会済みユーザー

2019/08/16 07:12

すみません、初心者マークに気づかなかったので初心者と入れてしましましたが修正しました! 何度か先生とやり取りはしていたんですが、昨日から出張でしばらく連絡が取りづらいといわれてしまい困って投稿してしまいました…! また、似たような質問はほぼすべて目を通したのですが、自分とphp部分のコードがだいぶ違くてどう参考にしていけば分からず質問しました…
m.ts10806

2019/08/16 07:18

ヒント回答のみですが、作成中です。 少々お待ちください。
退会済みユーザー

退会済みユーザー

2019/08/16 07:20

m.ts10806さん ありがとうございます…!
guest

回答1

0

ベストアンサー

どこに入れればいいのか

削除後にまたリストを読み込んで最新の状態で出力することを加味すると、
「データの読み込み処理より前」であればどこでも良いということになります。

ただ、
「画面出力」を伴わない処理は別にHTMLのドキュメント内に埋め込む必要はないと思います。
あくまで「処理を行うだけ」なので、投稿・編集・削除などの処理はまとめて<!DOCTYPE html>より上に移動しましょう。
そうすると見やすくなります。
(欲を言えば別ファイルにしてincludeしてもらいたい)

foreachを使って1文ずつチェックし指定番号と投稿番号が一致していないときに書き込む

表現と考え方の問題ですが「指定番号と投稿番号が一致していれば飛ばす。そうでなければ書き込む。」としたほうが良いです。

おそらくプログラム的には下記のようになるはずなので。

php

1if($delete_number == $row_number){ 2 continue; 3} 4//書き込み

設計的な観点からすると「プログラムを書く時のような表現にする」ほうが良いですね。

※下記のようにするなら「違うとき書き込む」でも良いですけど個人的には「一致した情報を削除する」のが分かるような記述にしたいので。

php

1if($delete_number != $row_number){ 2 //書き込み 3}

他気になる点。
何度も出てくる定型的な文言は定数を使ったほうが良いかなと。

php

1define("COMMENT_LIST_FILE","mission_3-3_new.txt"); 2 3//中略 4 5$hairetsu = file(COMMENT_LIST_FILE); 6

あと変数も意味がある名前をつけたほうが後から見返したときに見通しが良いです。

php

1 $hairetsu = file("mission_3-3_new.txt"); 2 foreach($hairetsu as $hensuu){

php

1 $comment_list = file("mission_3-3_new.txt"); 2 foreach($comment_list as $comment_data){

下記のような記事も参考にしましょう。

個人的には、
テキストファイルのデータベースを初心者の段階から学んでも使い道はほぼありません。
確かにファイルの扱いと文字列の扱いは覚えられるかもしれませんが、これをメインで進めていってもあまり利点は大きくないと思います。
学校でやっているなら仕方ない部分はありますが、なるべくデータベースの学習を個人的にでも勧めるようにしてください。

※最も大事なのは「PHPマニュアルを活用できることになること」「エラーメッセージをしっかり読むこと」「デバッグを覚えること」 です。

投稿2019/08/16 07:31

m.ts10806

総合スコア80765

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

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

退会済みユーザー

退会済みユーザー

2019/08/16 07:53

凄く勉強になります…! 投稿・編集・削除はhtmlフォームの後じゃないといけないと思ってたのでこのあと変えたいと思います! continueも自分で調べていた時には見なかったのですが、スキップすることが出来るんですね!調べ方が悪いみたいで反省しています… プログラムを書く時のような表現や、変数の付け方などはこれから上達できれば…と思います! 記事や重要な点など何から何までありがとうございます!!教えて頂いたことを考えながら作業してみます!
m.ts10806

2019/08/16 08:29

>投稿・編集・削除はhtmlフォームの後じゃないといけないと思ってたのでこのあと変えたいと思います! PHPプログラムが実行される絶対条件は <?php ?> に囲われた中にコードを書くこと です。 https://www.php.net/manual/ja/language.basic-syntax.phptags.php ※ただしファイル最後の?>は省略可能で、省略することが推奨されている PHPにとってHTMLは単なる出力文字列の集合体に過ぎません。 ブラウザから実行することで「HTMLだ」と解釈して表示してくれているだけです。 最初は下記のようなことをやったかと思います。 <?php echo "Hello World"; HTMLに関する記述は一切ありませんよね? あくまで出力文字列の集合体であるので、HTMLを出力するのでなければ書く必要は一切ありません。 それにPHPは「サーバーサイドの言語」なので、HTMLとはそもそも実行される段階が違います。 ※長くなるので下記回答参照されたし https://teratail.com/questions/149920#reply-225651 > continueも自分で調べていた時には見なかったのですが、スキップすることが出来るんですね!調べ方が悪いみたいで反省しています… 業務ではよく使われるのですが(代替手段は少なくないけど)、あまり諸学者向けの書籍にはないんですかね。これを機会に覚えておきましょう。 >プログラムを書く時のような表現や、変数の付け方などはこれから上達できれば…と思います! これって結構大事です。特に変数名(あと関数名やクラス名) あくまで「命名」にあたるものなので、PHPからすれば「文字列の集合体」でしかないのですが、 やはり「意味が分かる名前をつける」というのは大事なことです。 望ましいのは「他人が(またはのちの自分が)読み返してもその名前を読んだだけでどういう役割をしているか分かる」ことです。 ここを今のうちに意識しておくと同時期に学習を始めた人との「差」が出ます。 「可読性」「メンテナンス性」はコードを書いていくうえでは非常に大事な要素です。 提示した記事に格言がありますね。 「コード三日会わざれば刮目して見よ」 記事ではコメントにフォーカスして書いてありますが、コード全体にも言えると思います。 「あれ?この変数何のデータ持ってたっけ?」とならないような命名を心がけましょう。
退会済みユーザー

退会済みユーザー

2019/08/16 22:32

なぜその作業が必要なのか?というところまで教えていただきありがとうございます!すごくわかりやすく勉強になります…!!
退会済みユーザー

退会済みユーザー

2019/08/17 04:16

m.ts10806さん ベストアンサー押してなかったようですみません…!ブラウザ上では削除できるところまで行くことが出来ました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問