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

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

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

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

Q&A

解決済

2回答

1776閲覧

POST送信&受け取り + テキスト保存 + 条件分岐が実現できなくて困っています

tamkaching_19

総合スコア5

PHP

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

0グッド

0クリップ

投稿2019/12/05 04:39

編集2019/12/05 04:52

前提・実現したいこと

PHPでフォーム入力された文字列データをPHPで受け取り、新しいテキストファイルに保存という作業をしています
(POST送信&受け取り + テキスト保存 + 条件分岐の実現)
ここに質問の内容を詳しく書いてください。

■■な機能を実装中に以下のエラーメッセージが発生しました。

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

POST送信&受け取り、テキスト保存と条件分岐が作動できないです
.txtに表示できないです

Notice: Undefined index: comment in /public_html/mission_2-1/mission_2-2.php on line 19

該当のソースコード

<!DOCTYPE html> <html lang="ja"> <html> <head> <title>mission_2-2</title> <meta charset="UTF-8"> </head> <body> <form action="mission_2-1.php" method="POST"> <input type="text" name="comment"><br> <input type="submit" value="送信"> </form> <?php date_default_timezone_set('Asia/Tokyo'); if($_POST['comment']) {echo 'ご入力ありがとうございます。<br>'; echo date("Y/m/d H:i:s")."\n".'に'.$_POST['comment'].'を受け付けました。'; } $filename = 'mission_2-2.txt'; $fp=fopen($filename,'w'); if(!empty($_POST['comment']=='コメント')){ fwrite($fp,$_POST['comment']); }elseif($_POST['comment'] == '完成'){ echo 'おめでとう!'; } fclose($fp); ?> </body> </html>
ソースコード

試したこと

色んな書き方を試しましたが、フォームからPOST送信&受け取り + テキスト保存 + 条件分岐 がうまくいかないです。
何が間違ってる分からないです。
ここに問題に対して試したことを記載してください。

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

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

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

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

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

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

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

kei344

2019/12/05 04:41

(質問文は編集できます)質問文のコード/エラーはそれぞれコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。 また、質問タグに「PHP」を追加することをお勧めします。
yoorwm

2019/12/05 05:07

ファイル名 ```php コード ``` という構成にすると見やすいですね。 あと、htmlタグがダブっているので修正しておいてください。
guest

回答2

0

ベストアンサー

流れ的にはこう

PHP

1<form method="POST"> 2<input type="text" name="comment"><br> 3<input type="submit" value="送信"> 4</form> 5 6<?php 7$comment=filter_input(INPUT_POST,"comment"); 8if(!is_null($comment)){ 9 if($comment==""){ 10 echo "データなし"; 11 }else{ 12 echo 'ご入力ありがとうございます。<br>'; 13 echo date("Y/m/d H:i:s")."\n".'に'.htmlspecialchars($comment).'を受け付けました。'; 14 } 15} 16?>

投稿2019/12/05 05:18

yambejp

総合スコア114821

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

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

退会済みユーザー

退会済みユーザー

2019/12/05 05:33

filter_input()を通すとNULLにはならないから、is_null()判定のifって不要な気がします。
yambejp

2019/12/05 06:09

filter_inputは所定のパラメータが送られてこないとnullになります ・nullのときは、データがない ・falseのときはバリデートに失敗 ・中身が""のときは別途処理(バリデートでfalseにすることも可能) ・それ以外は中身を使う のような切り分けをするのがベター
退会済みユーザー

退会済みユーザー

2019/12/05 06:51

PHPマニュアルを読んで得心しました。ありがとうございます。
guest

0

「該当のソースコード」というのが、ブラウザで表示させて入力フォームを入力し、さらにPOST先のファイルでしょうか?

このソースコードを最初にブラウザで表示した場合、「$_POST」変数は空です。
なのに「if($_POST['comment'])」と決め打ちしているので、「undefined index」のメッセージが表示されます。

最初に表示する時(GET)と、何かしらデータが送信された時(POST)の切り分けが必要です。

切り分けを行う処理ですが、PHPには「$_SERVER」という配列が用意されています。

  • $_SERVER['REQUEST_METHOD'] が存在しているか
  • $_SERVER['REQUEST_METHOD']の値が「POST」か

をチェックすると、ブラウザからのアクセスがGETなのかPOSTなのか判断できるかと思います。

他の方の記事ですが、GETとPOSTについては、こちらをご参照ください。
【PHP超入門】HTTP(GET・POST)について
GETとPOSTの違いについて

投稿2019/12/05 05:11

編集2019/12/05 05:14
XNXSXMXR

総合スコア239

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問