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

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

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

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

Q&A

解決済

2回答

4090閲覧

phpで作成した簡易掲示板で投稿ボタンを押してもユーザーとメッセージが追加されない

sumikko6210

総合スコア138

PHP

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

0グッド

0クリップ

投稿2016/01/27 08:32

php初心者です
今,phpで簡易掲示板を作成しています

番号を指定すると、指定された番号のコメントが削除される仕組みを作った段階なのですが、
ユーザーとメッセージを記入し、投稿ボタンを押しても何も反応しなくなりました。
削除の仕組みと投稿の仕組みが混雑して起こっている問題のようなのですが原因がよくわかりません。
この問題の原因を教えていただきたいです。

コード↓

<?php $dataFile ='bbs2.txt'; if(isset($_POST['toukou'])) { $message = ($_POST['message']); $user = ($_POST['user']); $postedAt = date('Y-m-d H:i:s'); $newData = (sizeof(file($dataFile)) + 1)."<>".$message."<>".$user."<>".$postedAt. "\n"; $fp = fopen($dataFile,'a'); fwrite($fp, $newData); fclose($fp); } if (isset($_POST['delete'])) { $delete = $_POST['deleteNo']; $delCon = file("bbs2.txt"); for ($j = 0; $j < count($delCon) ; $j++){ $delData = explode("<>", $delCon[$j]); if ($delData[0] == $delete) { array_splice($delCon, $j, 1); file_put_contents($dataFile, implode("\n", $delCon)); } } } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>簡易掲示板</title> </head> <body> <h1>簡易掲示板</h1> <form action="" method="POST">
message:<input type="text" name="message"> user:<input type="text" name="user"> <input type="submit" name="toukou" value="投稿"></br></br> </form> <form action="" method="POST"> 削除対象番号<input type="text" name="deleteNo"> <input type="submit" name="delete" value="削除"> </form>
<?php $file=file($dataFile); // ファイルの内容を配列に格納 foreach( $file as $value ){ $line = explode("<>",$value); echo $value."<br />\n"; // 改行しながら値を表示 } ?> </body> </html>

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

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

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

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

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

guest

回答2

0

ベストアンサー

var_dump($_POST);すればわかるような話かもしれませんが。

投稿フォーム側に
<form action="~~~" name="toukou_form" method="POST">
<input type="hidden" name="command" value="toukou" />
削除フォーム側に
<form action="~~~" name="delete_form" method="POST">
<input type="hidden" name="command" value="delete" />
みたいなのをいれておき、
受け取るphp側で$_POST['command']を確認してtoukouなのかdeleteなのか分岐すると良いでしょう。

<input type="submit" name="toukou" value="~~~" />
<input type="submit" name="delete" value="~~~" />

送信ボタンが2つ存在する時点で$_POST['toukou']$_POST['delete']も存在してしまうんじゃないかと。
また、フォームが2つ存在するので、name属性で名前を与えたりid属性で別物であることを示す必要もありそうです。

<form action="" ~>
での、適切に設定しているでしょうか。
actionにコマンド送信先(データ処理するphpのurl)を記載しましょう。

また、データファイルのアクセス権は大丈夫でしょうか。
apache(などwebサーバープログラム)から読み書きできるかどうか確認してみてください。
(一般ユーザー権限でphpなどのファイルを設置できる場合には、0644のアクセス権だとapacheなどから書き込めません。)

投稿2016/01/27 08:58

編集2016/02/09 09:25
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

sumikko6210

2016/02/09 08:15 編集

返信が遅れて申し訳ございません <hidden>タグとphpのurlを追加したものの問題解決にはなりませんでした。 apacheの知識があまりなくよくわからないのですが、このコードを書いてからapacheの設定は一度も変えておりません。 削除機能をつけるまでは正常にbbs2.datに文字が飛んでいたので問題はないと思いました。
退会済みユーザー

退会済みユーザー

2016/02/09 09:26

var_dump($_POST); したときにどうなりますかね、というのがヒントのような気がします。
sumikko6210

2016/02/18 08:10

返信ありがとうございます 無事投稿機能を直すことができました これからはvar_dump();をかならず行ってから質問等いたします ありがとうございました
guest

0

ファイルリソースのアクセスの多さ、排他制御、削除時に番号を振りなおさなければならない・・・
などの改善しなければ余地はありますが、一旦はご質問の状況にはならないように思えます。

投稿ボタンを押したとき、レスポンスは返ってきますか?
それともずっと固まってるのでしょうか?

投稿2016/01/27 09:02

Toyoshima

総合スコア422

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

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

sumikko6210

2016/01/31 07:23

ご回答ありがとうございます 投稿ボタンを押すとレスポンスは返ってきます メッセージとユーザーに文字を入れて投稿ボタンを押すと、入れた文字が消えます。 その文字はテキストファイルにも飛んでいませんでした。 正規だと番号、ユーザー、メッセージ、投稿時間と下に表示されるのですが、それが表示されないです
Toyoshima

2016/02/02 02:36

すいません、忙しくて返信が遅れました・・・。 私の経験で実際にあった話ですが、 <input type='submit' name='toukou' value='投稿'> として、サーバー側で if($_POST['toukou']){ ・・・ } でリクエストを受ける処理を記述している場合、ご利用のブラウザバージョンなどによっては、"toukou"がそのままキーとして送られないという問題がある場合があります。 その場合に対処するため、submitボタンにname属性を設定せず、その代わりに送信するフォーム内に、 <input type='hidden' name='toukou' value='' > としておけば、正確に処理できます。
sumikko6210

2016/02/04 08:59

お忙しい中質問に答えていただき、誠にありがとうございます 教えていただいた通り、コードに <input type='hidden' name='toukou' value='' >を追加しましたが状況が変わりませんでした <form action="" method="POST">    message:<input type="text" name="message">     user:<input type="text" name="user">  <input type='hidden' name='toukou' value=''> <input type="submit" value="投稿"></br></br> </form> hiddenコードについて調べましたがコードの使い方はあっていると思います ほかに何か原因があるのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問