🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PHP

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

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

Q&A

1回答

2752閲覧

$_SESSION変数を使って入力フォームに表示したい【書き直し機能】

pikumin777

総合スコア13

PHP

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

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

0グッド

0クリップ

投稿2019/09/22 22:07

編集2019/09/23 07:21

入力ミスなどで,check.phpから書き直しでindex.phpに戻った場合,$_SESSION変数を利用して,ユーザの入力した内容を保持し,index.phpのフォームに表示したいと考えています。
これにより,入力ミスでない部分について再度入力する手間を省きたいと考えています。

今読んでいる「よくわかるPHPの教科書」という参考書では

PHP

1//書き直し 2if(isset($_REQUEST["action"]) && $_REQUEST["action"] === "rewrite") { 3$_POST = $_SESSION["join"]; 4$error["rewrite"] = true; 5}

このコードでそれが可能と書いてあったのですが、index.phpに書き直しで戻った際、フォームに何も入力されていないので困っています。

また、

PHP

1if(isset($_REQUEST["action"]) && $_REQUEST["action"] === "rewrite") { 2$_POST = $_SESSION["join"]; 3var_dump($_POST); 4$error["rewrite"] = true;

で調べた際、

array(4) { ["name"]=> string(3) "aaa" ["email"]=> string(3) "aaa" ["password"]=> string(5) "aaaaa" ["image"]=> string(25) "20190923071935sample2.jpg" }

と表示されたのでセッションの受け渡しは上手くいっていると思います。

この場合、どこを修正したらよろしいでしょうか?

ご教授願います。

「index.php」

PHP

1<?php 2session_start(); 3 4if(!empty($_POST)) { 5 //エラー項目の確認 6 if($_POST["name"] === "") { 7 $error["name"] = "blank"; 8 } 9 if($_POST["email"] === "") { 10 $error["email"] = "blank"; 11 } 12 if(strlen($_POST["password"]) < 4) { 13 $error["password"] = "length"; 14 } 15 if($_POST["password"] === "") { 16 $error["password"] = "blank"; 17 } 18 $file = $_FILES["image"]; 19 if(!empty($file["name"])) { 20 $ext = substr($file["name"], -3); 21 if ($ext != "jpg" && $ext != "gif") { 22 $error["image"] = "type"; 23 } 24 } 25 26 if(empty($error)) { 27 //画像をアップロードする 28 $image = date("YmdHis").$file["name"]; 29 move_uploaded_file($file["tmp_name"],"../member_picture/".$image); 30 $_SESSION["join"] = $_POST; 31 $_SESSION["join"]["image"] = $image; 32 header("Location: check.php"); 33 exit(); 34 } 35} 36//書き直し 37if(isset($_REQUEST["action"]) && $_REQUEST["action"] === "rewrite") { 38 $_POST = $_SESSION["join"]; 39 $error["rewrite"] = true; 40} 41 42?> 43<p>次のフォームに必要事項をご記入ください。</p> 44<form action="" method="post" enctype="multipart/form-data"> 45 <dl> 46 <dt>ニックネーム<span class="required">(必須)</span></dt> 47 <dd> 48 <input type="text" name="name" size="35" maxlength="255" value="<?php echo htmlspecialchars(filter_input(INPUT_POST,"name"), ENT_QUOTES); ?>"> 49 <?php if(isset($error["name"]) && $error["name"] ==="blank"): ?> 50 <p class="error">*ニックネームを入力してください</p> 51 <?php endif; ?> 52 </dd> 53 <dt>メールアドレス<span class="required">必須</span></dt> 54 <dd> 55 <input type="text" name="email" size="35" maxlength="255" value="<?php echo htmlspecialchars(filter_input(INPUT_POST,"email"), ENT_QUOTES); ?>"> 56 <?php if(isset($error["email"]) && $error["email"] === "blank"): ?> 57 <p class="error">*メールアドレスを入力してください</p> 58 <?php endif; ?> 59 </dd> 60 <dt>パスワード<span class="required">必須</span></dt> 61 <dd> 62 <input type="password" name="password" size="10" mexlength="20" value="<?php echo htmlspecialchars(filter_input(INPUT_POST,"password"), ENT_QUOTES); ?>"> 63 <?php if(isset($error["password"]) && $error["password"] === "blank"): ?> 64 <p class="error">*パスワードを入力してください</p> 65 <?php endif; ?> 66 <?php if(isset($error["password"]) && $error["password"] === "length"): ?> 67 <p class="error">*パスワードは4文字以上で入力してください</p> 68 <?php endif; ?> 69 </dd> 70 <dt>写真など</dt> 71 <dd> 72 <input type="file" name="image" size="35"> 73 <?php if(isset($error["image"]) && $error["image"] === "type"): ?> 74 <p class="error">*写真などは「.gif」または「.jpg」の画像を指定してください</p> 75 <?php endif; ?> 76 <?php if(!empty($error)): ?> 77 <p class="error">*恐れいりますが、画像を改めて指定してください</p> 78 <?php endif; ?> 79 </dd> 80 </dl> 81 <div><input type="submit" value="入力内容を確認する"></div> 82</form> 83

「check.php」

PHP

1<?php 2session_start(); 3 4if(!isset($_SESSION["join"])) { 5 header("Location: index.php"); 6 exit(); 7} 8 9?> 10<p>記入した内容を確認して、「登録する」ボタンをクリックしてください</p> 11<form action="" method="post"> 12 <dl> 13 <dt>ニックネーム</dt> 14 <dd> 15 <?php echo htmlspecialchars($_SESSION["join"]["name"], ENT_QUOTES); ?> 16 </dd> 17 <dt>メールアドレス</dt> 18 <?php echo htmlspecialchars($_SESSION["join"]["email"], ENT_QUOTES); ?> 19 <dd> 20 </dd> 21 <dt>パスワード</dt> 22 <dd> 23 【表示されません】 24 </dd> 25 <dt>写真など</dt> 26 <dd> 27 <img src="../member_picture/<?php echo htmlspecialchars($_SESSION["join"]["image"], ENT_QUOTES); ?>" width="100" height="100" alt=""> 28 </dd> 29 </dl> 30 <div><a href="index.php?action=rewrite">&laquo;&nbsp;書き直す</a> | <input type="submit" value="登録する"></div> 31</form>

ー書き直しのリンクを踏んだ際の画面ー

イメージ説明

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

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

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

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

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

pikumin777

2019/09/22 22:25

m.ts10806様、ご指摘ありがとうございます。 一箇所$fileでなく$_fileになってる所がありました。 修正したのですが、まだ問題は解決されてないです。
m.ts10806

2019/09/22 22:49

「うまくいかない」では何が起きてるのか伝わらないので、具体的にこのコードで実現できるはずのことと、実際に起きている現象を記載してください。 あとできれば想定の箇所を通っているかデバッグして、その結果も追記してください
pikumin777

2019/09/22 23:26

こちらの質問の趣旨としては 入力ミスなどで,check.phpから書き直しでindex.phpに戻った場合,$_SESSION変数を利用して,ユーザの入力した内容を保持し,index.phpのフォームに表示したいと考えています。 これにより,入力ミスでない部分について再度入力する手間を省きたいと考えています。 今読んでいる「よくわかるPHPの教科書」という参考書では //書き直し if(isset($_REQUEST["action"]) && $_REQUEST["action"] === "rewrite") { $_POST = $_SESSION["join"]; $error["rewrite"] = true; } このコードでそれが可能と書いてあったのですが、index.phpに書き直しで戻った際、フォームに何も入力されていないので困っています。
m.ts10806

2019/09/23 00:44

質問本文に追記願います こちらに書かれてもデフォルト非表示ですので
guest

回答1

0

質問主旨は全く理解していませんが、コードを見るとファイルアップロード部分が非常に危ういです。
ちゃんと安全な仕組みを学習した上で再実装してください。

投稿2019/09/22 23:10

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

pikumin777

2019/09/22 23:22

こちらの質問の趣旨としては 入力ミスなどで,check.phpから書き直しでindex.phpに戻った場合,$_SESSION変数を利用して,ユーザの入力した内容を保持し,index.phpのフォームに表示したいと考えています。 これにより,入力ミスでない部分について再度入力する手間を省きたいと考えています。
退会済みユーザー

退会済みユーザー

2019/09/22 23:28

質問を理解するつもりは無いです。 脆弱なコードで公開するとサーバを乗っ取られるので指摘しただけです。 むしろ、脆弱な部分が修正されないまま動くほうがイヤです。
pikumin777

2019/09/22 23:31

まだ、PHPを勉強し始めて数日なのでセキュリティの面まで考えるのは無理です。 これから勉強していく予定です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問