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

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

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

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

HTML

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

Q&A

解決済

2回答

1138閲覧

PHP、掲示板の編集機能

amanoa

総合スコア12

PHP

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

HTML

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

0グッド

0クリップ

投稿2019/07/09 16:35

前提・実現したいこと

phpの練習で簡単な掲示板を作成していて編集機能を実装したいのですが、編集番号を入れても何も起こらないです。
確認のため編集機能のところにecho data1と入れても何も表示されないのでそのあたりに問題があると思うのですがどなたかわかりませんか。

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

該当のソースコード

<!DOCTYPE html> <html lang = 'ja'> <head> <meta charset="utf-8"> </head> <body> <?php $fname = "mission_3-2.txt"; //コメントの判定 if(isset($_POST["comment"])){ $comment = $_POST["comment"]; //名前の判定 if(isset($_POST["name"])){ $name = $_POST["name"]; }else{ $name = "名無し"; } $date = date('Y/m/d G:i:s'); if($comment != NULL){ echo $comment."を受け付けました"."<br>"; //新規・編集の判定 if(empty($_POST["edit"])){ //新規の書き込み $fp = fopen($fname,'a'); $count = sizeof(file($fname))+1; fwrite($fp,$count."<>".$name."<>".$comment."<>".$date."\r\n"); }else{ //編集 $edit = $_POST["edit"]; $set_array = file($fname); $fp = fopen($fname,'w'); foreach($set_array as $line){ $data = explode("<>", $line); } if($data[0] == $edit){ fwrite($fp,$edit."<>".$name."<>".$comment."<>".$date."\r\n"); }else{ fwrite($fp,$line); } } fclose($fp); } } //削除機能 if(isset($_POST["delete"])){ $delete = $_POST["delete"]; $delfile = file($fname); $fp = fopen($fname,'w'); foreach($delfile as $d){ if($d[0] != $delete){ fwrite($fp,$d); }else{ fwrite($fp,"消去されました"."\r\n"); } } fclose($fp); } //編集機能 if (isset($_POST['edit'])) { $edit = $_POST['edit']; $editfile = file($fname); foreach ($editfile as $line) { $editdata = explode("<>",$line); if ($editdata[0] == $edit) { $data0 = $editdata[0]; $data1 = $editdata[1]; $data2 = $editdata[2]; } } } //編集の実行 if(isset($_POST["name"]) && isset($_POST["comment"]) && (isset($_POST["edit"]))){ $edit = $_POST["edit"]; $set_array = file($fname); $fp = fopen($fname,'w'); foreach($set_array as $s){ $data = explode("<>",$s); if($data[0] != $edit){ fwrite($fp,$s); }else{ fwrite($fp,$edit."<>".$name."<>".$comment."<>".$data3."\r\n"); } } fclose($fp); } ?> <form action="mission_3-4.php" method="post"> 名前:<input type="text" name="name" placeholder="名前" value="<?php if(isset($data1)) {echo $data1;} ?>"><br> コメント:<input type="text" name="comment" placeholder="コメント" value="<?php if(isset($data2)) {echo $data2;} ?>"><br> <input type="submit" name="submit" value="送信"> <br> <br> <input type="text" name="delete"> <input type="submit" name="delete" value="削除"> <br> <input type="text" name="edit"> <input type="submit" value="編集"> </form> <?php //表示機能 $fname = "mission_3-2.txt"; $text_array = file($fname); if(isset($text_array)){ foreach($text_array as $t){ $textdata = explode("<>",$t); foreach($textdata as $a){ echo $a." "; } echo "<br>"; } } ?> </body> </html>

試したこと

ここに問題に対して試したことを記載してください。

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

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

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

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

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

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

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

m.ts10806

2019/07/09 20:58

過去質問に幾度となくPHPの掲示板機能についての質問があがっています。まずは過去質問を参考にしてください
hentaiman

2019/07/09 22:24

その辺りに問題あると思うんでしたらその前後でもechoして動作確認すればいいんじゃないですか
amanoa

2019/07/10 01:17

丁寧にありがとうございます、ただ過去の質問を参考に作成して動作しないので行き詰まって質問しています
m.ts10806

2019/07/10 01:22

そのあたり質問に追記いただけますか? 参考にした質問のURLがあるだけでも違うと思います。 あと、どの程度のレベルの回答が欲しいのかも気になっています。 ヒント程度でも問題ないのかどうか。「コード丸々ください」だと質問ではなくなりますし、PHP掲示板まわりの質問って丸投げでコードください系が非常に多いので。
amanoa

2019/07/10 01:26

ご指摘ありがとうございますURLはPCの履歴から探して追記させていただきます、回答に関してはこのコードでなぜ動作しないのかという原因が知りたいです
m.ts10806

2019/07/10 01:29

現状でざっと動かしてみたのですけど、だいぶ作り直さないとちゃんと動くようにはならないと思います。 原因も複合的でちょっと確認して全部洗いだせるレベルではないからです。 テキストデータベースのプログラムは作ってもあまり練習にも練習にもなりませんので、 データ管理部分はMySQLなどのデータベースを利用されては如何でしょうか。たぶん他の質問でも勧められているところも少なくないはずです。
m.ts10806

2019/07/10 01:30

とりえず「定義されているけど利用されていない変数」「未定義のままいきなり使われている変数」くらいはチェックされたほうが良いですね。
amanoa

2019/07/10 01:35

アドバイスありがとうございます、ただ課題として出されているものなのでテキストデータの使用は変えられないです、この課題が出来次第データベースの利用をして行きます、ひとまずコードのチェックからやってみます
m.ts10806

2019/07/10 01:42

構文チェック機能のあるエディタの利用を強くすすめます(できればEclipseなどのIDE)
amanoa

2019/07/10 01:46

今はvsCodeを使用してるのですがやっぱりIDEの方がいいですか
m.ts10806

2019/07/10 01:50

VSCodeもIDEの1つとは思います。拡張機能をきちんと入れれば構文チェックや入力補完などもしてくれるようですね。きちんとプラグインを利用しているなら問題ないと思います。 (今回挙げた未定義変数や未使用変数くらいならすぐわかるようになりそうです)
amanoa

2019/07/10 01:53

そんなんですよね、未使用変数、未定義は緑の波線、赤の波線で警告してくれるのでわかるはずなんですけど…
guest

回答2

0

自己解決

html

1 2<input type="hidden" name="edit" value="<?php if(isset($editnumber)) {echo $editnumber;} ?>">

htmlのform内に上記の記述を追加したら解決しました!

投稿2019/07/10 07:01

amanoa

総合スコア12

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

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

0

html

1<input type="text" name="edit"> 2<input type="submit" value="編集">

の部分を

html

1<input type="text" name="edit_id"> 2<input type="submit" name="edit" value="編集">

に変更し、編集機能の冒頭部を下記のように修正してください。

php

1 //編集機能 2 if (isset($_POST['edit'])) { 3 $edit = $_POST['edit_id'];

if (isset($_POST['edit'])) {で押されたsubmitボタンの判断をしようとしているようですから、submitボタンにそのnameを割り当てなければいけません。
また、同じnameを複数割り当てると正しく値を取得できないので、テキストボックスのnameはedit_idに変更しています。

投稿2019/07/10 03:10

tomoeine

総合スコア127

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

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

amanoa

2019/07/10 05:21

回答ありがとうございます ご指摘の通り変更してみましたがif文が正しく動作しません if (isset($_POST['edit'])) { $edit_id = $_POST['edit_id']; $editfile = file($fname); foreach ($editfile as $line) { $editdata = explode("<>",$line); if (strcmp($edit_id,$editdata[0])==0) { <--ここの条件 $data0 = $editdata[0]; $data1 = $editdata[1]; $data2 = $editdata[2]; }else{ echo "hello"; } } 上記のように記述するとすべて例外処理になりhelloが表示されます strcmpの使い方に何か間違いがありますか
tomoeine

2019/07/10 05:45

うーん、 `if (strcmp($edit_id,$editdata[0])==0) {` がtrueにならない理由は、 `mission_3-2.txt` の内容を見てみないと判断できませんね・・・ if文の手前に`echo $editdata[0] . "<br>";` のようにしてデバッグ出力すると何か分かるかもしれません。 それと、参照しているのはテキストファイルなので(バイナリデータではない)、strcmpを使わずに `if ($edit_id == $editdata[0]) {` のような単純な文字列比較で良いと思いますよ。
amanoa

2019/07/10 10:43

ありがとうございます formの方を書き換えたら解決しました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問