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

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

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

PhpSpreadsheetは、PHPExcelの後継であるPHPライブラリです。新規Excelファイルの作成や既存Excelファイルの読み書き、ファイル編集など一連の操作を無償で行うことができます。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Q&A

解決済

1回答

366閲覧

PHPで修正ボタンを押されたら前の入力を引き継ぎたい

phpsyoshinsya

総合スコア156

PhpSpreadsheet

PhpSpreadsheetは、PHPExcelの後継であるPHPライブラリです。新規Excelファイルの作成や既存Excelファイルの読み書き、ファイル編集など一連の操作を無償で行うことができます。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

1グッド

0クリップ

投稿2023/08/10 01:23

入力フォームで入力された情報を確認ページで表示させたあと

修正ボタンを押されたら最初に入力した内容を引き継いだフォームを表示したいのですが、修正ボタンを押すと全て消えてしまいます。
下のコードの何が悪いでしょうか?

$_POSTから引き継いで表示はできています

これで同じようにしているつもりなのですが、なぜ、修正画面でフォームに内容が代入されないのか、理由が理解できません。
是非対処方法をご教授ください。
##コード後半のmodify関数と、show_view関数のどちらに問題があるのでしょうか

#!/usr/local/bin/php <?php mb_internal_encoding("utf-8"); if($_POST["confirm"]) show_view(); if($_POST["modify"]) modify(); if($_POST["post"]) post(); print <<<output <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0"> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <meta name="description" content="困りごと悩み事があるなら「登録不要」「完全無料」で今すぐLINEと電話で相談できます。当機構は知識や経験、経済的な差の違いで生活の質の実現を諦めないようにお手伝いしています。"> <title>投稿画面</title> </head> <body style="background-color:#FFFFCC;"> <h1>トピックスの投稿</h1> <form method="post" action="{$_SERVER['SCRIPT_NAME']}"> <label>投稿者名<input type="text" name="name" maxlength="5"></label><br> <label>内容<br> <textarea name="detail" rows="5" colums="20" maxlength="200" placefolder="内容を記述してください。開業もそのまま表示されます."></textarea></label> <input type="submit" name="confirm" value="確認画面へ"><br> </form> </body> </html> output; exit(); function show_view(){ $detail=nl2br($_POST["detail"]); $time=time(); $date=date("Y/m/d H:i:s",$time); print <<<output <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0"> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <meta name="description" content="困りごと悩み事があるなら「登録不要」「完全無料」で今すぐLINEと電話で相談できます。当機構は知識や経験、経済的な差の違いで生活の質の実現を諦めないようにお手伝いしています。"> <title>投稿確認画面</title> </head> <body style="background-color:#FFFFCC;"> <h1>トピックスの投稿</h1> <p>入力内容を確認して、ボタンを押してください。</p> <form method="post" action="{$_SERVER['SCRIPT_NAME']}"> <input type="hidden" name="name" value="{$_POST['name']}"> <input type="hidden" name="detail" value="{$_POST['dtail']}"> <input type="submit" name="modify" value="修正">/<input type="submit" name="post" value="投稿する"> </form> <p>{$detail}<br> {$date} 投稿者:{$_POST["name"]}</p> </body> </html> output; exit(); } function modify(){ print <<<output <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0"> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <meta name="description" content="困りごと悩み事があるなら「登録不要」「完全無料」で今すぐLINEと電話で相談できます。当機構は知識や経験、経済的な差の違いで生活の質の実現を諦めないようにお手伝いしています。"> <title>投稿画面</title> </head> <body style="background-color:#FFFFCC;"> <h1>トピックスの投稿</h1> <form method="post" action="{$_SERVER['SCRIPT_NAME']}"> <label>投稿者名<input type="text" name="name" maxlength="5" value="{$_POST['name']}"></label><br> <label>内容<br> <textarea name="detail" rows="5" colums="20" maxlength="200" placefolder="内容を記述してください。開業もそのまま表示されます。">{$_POST['detail']}</textarea></label> <input type="submit">確認画面へ<br> </form> </body> </html> output; }

よろしくお願いいたします

何卒修正コードも添えていただけると助かります。

loving👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

hiddenでのデータ引き継ぎはデータの改竄のリスクが高いためセッションを利用するのが妥当です

参考

PHP

1<?php 2foreach(["confirm","modify","post","name","detail"] as $val){ 3 $$val=filter_input(INPUT_POST,$val); 4 if(in_array($val,["name","detail"])){ 5 ${"h_".$val}=htmlspecialchars($$val); 6 ${"v_".$val}=nl2br(${"h_".$val}); 7 } 8} 9$style_data=$confirm?"display:none":""; 10$txt_submit='<input type="submit" name="confirm" value="確認画面へ"><br>'; 11if($confirm) $txt_submit='<input type="submit" name="modify" value="修正">/<input type="submit" name="post" value="投稿する">'; 12 13if($post){ 14 print "投稿されました"; 15 exit; 16} 17 18 19 20print <<<output 21<body style="background-color:#FFFFCC;"> 22<h1>トピックスの投稿</h1> 23<form method="post" action="{$_SERVER['SCRIPT_NAME']}"> 24<div style="$style_data"> 25<label>投稿者名<input type="text" name="name" maxlength="5" value="$h_name"></label><br> 26<label>内容<br> 27<textarea name="detail" rows="5" colums="20" maxlength="200" placefolder="内容を記述してください。開業もそのまま表示されます."> 28$h_detail</textarea></label> 29</div> 30output; 31if($confirm){ 32 print "{$v_name}<br>\n{$v_detail}<br>\n"; 33} 34print <<<output 35$txt_submit</form> 36output;

投稿2023/08/10 01:40

編集2023/08/10 02:52
yambejp

総合スコア117674

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

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

phpsyoshinsya

2023/08/10 02:12

公開するページであれば セッションで引き継ぐことが妥当なのを理解していますが、クローズドな環境で利用するため ポストでの引継ぎを考えています。 何卒ご理解の上ご教授いただきますようお願いします。
yambejp

2023/08/10 02:17

とりえあえず$_POST['dtail']とな基本的なtypoをなくしてください。 また受け取ったPOSTデータを直接HTMLに埋め込むのは厳禁です、きちんとエスケープしてください 特にtextareaをtype=hiddenに受け直すことはできませんtextareaに受けてdisplay:noneにするなどで対応してください
yambejp

2023/08/10 02:54

とりあえず参考をアップしておきました セッションを使用しない限り投稿後のページバックやリロードなどで想定外の動作が発生し、クローズ語環境でもトラブルは絶えないと思います
phpsyoshinsya

2023/08/10 21:04

ありがとうございます。 最低限エスケープはした方がいいですよね。 とりあえず、意図した動作になりました。 関数の最後にexitを入れないと、画面が二つ表示されてしまうのですね。 頑張ってスクリプティングを進めたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問