\r\n \r\n \r\n \r\n\r\n```\r\n\r\n###confirm.php(確認フォーム)\r\n```php\r\n= 1) {\r\n foreach ($errormsg as $error) {\r\n echo $error;\r\n }\r\n header(\"location: registration.php?name_error=名前を入力してください&email_error=メールアドレスを入力してください。\");\r\n exit();\r\n}\r\n\r\n session_destroy();\r\n ?>\r\n\r\n \r\n \r\n \r\n \r\n 確認フォーム\r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n\r\n
\r\n
\r\n\r\n \r\n

確認フォーム

\r\n\r\n
    \r\n
  1. トップ
  2. \r\n
  3. 新規登録フォーム
  4. \r\n
  5. 確認フォーム
  6. \r\n
\r\n\r\n
\r\n\r\n \t
\r\n \t\t\r\n \t\t
\r\n \t\t\t

\r\n \t\t
\r\n \t
\r\n\r\n \t
\r\n \t\t\r\n \t\t
\r\n \t\t\t

\r\n \t\t
\r\n \t
\r\n\r\n \r\n\r\n\r\n
\r\n
\r\n \r\n \r\n

以上の内容でよろしければ、送信ボタンを押してください。

\r\n
\r\n
\r\n\r\n\r\n\r\n\r\n\r\n
\r\n
\r\n
\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n\r\n```\r\n\r\n###補足情報(言語/FW/ツール等のバージョンなど)\r\nphp PHP 5.3.3","answerCount":1,"upvoteCount":0,"datePublished":"2017-11-25T12:49:53.923Z","dateModified":"2017-11-25T12:49:53.923Z","acceptedAnswer":{"@type":"Answer","text":"`$_SESSION` を活用すると、上手く書けるのではないでしょうか\r\n\r\nregistration.php (PHP 部のみ):\r\n\r\n```php\r\n= 1) {\r\n foreach ($_SESSION['errorMsg'] as $message) {\r\n echo $message;\r\n echo \"
\";\r\n }\r\n echo \"\";\r\n}\r\n\r\n// eval(\\Psy\\sh()); // Psysh : ブレークポイントの設定\r\n```\r\n\r\nconfirm.php (PHP 部のみ):\r\n\r\n```php\r\n= 1) {\r\n $_SESSION['errorMsg'] = $errorMsg;\r\n foreach ($errorMsg as $error) {\r\n echo $error;\r\n }\r\n\r\n header(\"location: registration.php\");\r\n exit();\r\n} else {\r\n session_destroy();\r\n}\r\n```\r\n\r\n簡単に書いてみましたが、何か参考になれば幸いです\r\n\r\n※かなり早い段階で管理が大変になるので、スッピンのPHP で機能を実装していくのはお勧めしません なにかしらテンプレートエンジンの導入、ライブラリの利用や、用途に応じたWeb Application Framework の導入をお勧めします\r\n\r\n# Links\r\n\r\n* [Respect/Validation: The most awesome validation engine ever created for PHP - GitHub](https://github.com/Respect/Validation)\r\n* [bobthecow/psysh: A REPL for PHP - GitHub](https://github.com/bobthecow/psysh)\r\n* [Home - Twig - The flexible, fast, and secure PHP template engine](https://twig.symfony.com/)\r\n* [CakePHP - Build fast, grow solid | PHP Framework | Home](https://cakephp.org/)\r\n* [Composer](https://getcomposer.org/)\r\n* [PHP: empty - Manual](http://php.net/manual/en/function.empty.php)\r\n* [PHP: count - Manual](http://php.net/manual/en/function.count.php)","dateModified":"2017-11-25T17:21:32.238Z","datePublished":"2017-11-25T17:21:32.238Z","upvoteCount":0,"url":"https://teratail.com/questions/102012#reply-157134"},"suggestedAnswer":[],"breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":{"@id":"https://teratail.com","name":"トップ"}},{"@type":"ListItem","position":2,"item":{"@id":"https://teratail.com/tags/PHP","name":"PHPに関する質問"}},{"@type":"ListItem","position":3,"item":{"@id":"https://teratail.com/questions/102012","name":"PHPの入力チェックでエラーを配列で受け渡し、入力画面に表示させたいです"}}]}}}
質問するログイン新規登録

Q&A

解決済

1回答

2156閲覧

PHPの入力チェックでエラーを配列で受け渡し、入力画面に表示させたいです

dog57

総合スコア131

PHP

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2017/11/25 12:49

0

0

###前提・実現したいこと
PHPの入力チェックで確認フォームから「エラーを新規登録画面に配列で受け渡し」エラー内容を入力画面に表示させたいです
新規登録フォームでエラーが出た場合は、リダイレクトさせて新規登録フォームの戻らせている状態です。

###発生している問題
エラー内容を「確認画面」から「新規登録画面」に配列で受け渡せないこと。
受け渡すことはできているのですが、空欄になっているフォームだけ、エラー内容を新規登録画面に送ることができないです。
今は、「氏名」「メールアドレス」のみエラーチェックを行っています。

・registration.php(新規登録画面) 左上にエラーが出ています。
イメージ説明

###registration.php(新規登録画面)

php

1<?php 2session_start(); 3 4$errors[] = $_GET["name_error"]; 5$errors[] = $_GET["email_error"]; 6 7if ($errors >= 1) { 8 foreach ($errors as $value) { 9 echo $value; 10 echo "<br>"; 11 } 12 echo ""; 13} 14 15 16 17session_destroy(); 18 ?> 19 20 21<!DOCTYPE html> 22<html lang="ja"> 23<head> 24 <meta charset="utf-8"> 25 <title>新規登録フォーム</title> 26 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 27 <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet" media="screen"> 28 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css"> 29 30</head> 31<body> 32 33 34 35<form class="form-horizontal" action="confirm.php" method="post"> 36 <fieldset> 37 38 <!-- Form Name --> 39 <legend style=background-color:#65ace4;><h1 style=text-align:center;>新規登録フォーム</h1></legend> 40 41 42 <!-- パンくずリスト--> 43 <ol class="breadcrumb"> 44 <li><a href="http://192.168.33.15"><span class="glyphicon glyphicon-home" aria-hidden="true"></span>トップ</a></li> 45 <li class="active">新規登録フォーム</li> 46 </ol> 47 48 49 <div class="container"> 50 51 <!-- Text input 名前--> 52 <div class="form-group" style="margin-top:30px;"> 53 <label class="col-md-4 control-label" for="name">氏名 <span class="label label-danger">必須</span></label> 54 <div class="col-md-4"> 55 <input name="name" class="form-control input-md" id="name" type="text" placeholder="例:鈴木太郎"> 56 57 </div> 58 </div> 59 60 61 62 63 <!-- Text input メールアドレス--> 64 <div class="form-group"> 65 <label class="col-md-4 control-label" for="email">メールアドレス <span class="label label-danger">必須</span></label> 66 <div class="col-md-4"> 67 <input name="email" class="form-control input-md" id="email" type="email" placeholder="例:suzuki.taro@gmail.com"> 68 69 </div> 70 </div> 71 72 73 <!-- Text input パスワード--> 74 <div class="form-group"> 75 <label class="col-md-4 control-label" for="password">パスワード <span class="label label-danger">必須</span></label> 76 <div class="col-md-4"> 77 <input name="password" class="form-control input-md" id="password" type="password" placeholder="パスワード"> 78 79 </div> 80 </div> 81 82 <!-- Text input 電話番号 --> 83 <div class="form-group"> 84 <label class="col-md-4 control-label" for="tel">電話番号 <span class="label label-danger">必須</span></label> 85 <div class="col-md-4"> 86 <input name="tel" class="form-control input-md" id="tel" type="tel" placeholder="09011112222 ハイフンなし"> 87 88 </div> 89 </div> 90 91 <!-- Select Basic 都道府県 --> 92 <div class="form-group"> 93 <label class="col-md-4 control-label" for="prefectures">都道府県 <span class="label label-danger">必須</span></label> 94 <div class="col-md-4"> 95 <select name="prefectures" class="form-control" id="prefectures"> 96 <option value="選択">選択</option> 97 <option value="東京">東京</option> 98 <option value="名古屋">名古屋</option> 99 <option value="大阪">大阪</option> 100 <option value="その他">その他</option> 101 </select> 102 </div> 103 </div> 104 105 106 <!-- インラインチェックボックス 趣味 --> 107 <div class="form-group"> 108 <label class="control-label col-md-4" for="checkbox">趣味 <span class="label label-info">任意</span></label> 109 <div class="col-md-4"> 110 <div class="checkbox"> 111 <label class="checkbox-inline"> 112 <input name="hobby[]" type="checkbox" value="野球"> 野球 113 </label> 114 <label class="checkbox-inline"> 115 <input name="hobby[]" type="checkbox" value="サッカー"> サッカー 116 </label> 117 </div> 118 </div> 119 </div> 120 121 122 123 <!-- インラインラジオボタン 性別 --> 124 <div class="form-group"> 125 <label class="control-label col-md-4" for="checkbox">性別 <span class="label label-info">任意</span></label> 126 <div class="col-md-4"> 127 <div class="radio-inline" name="gender"> 128 <input name"gender" type="radio" value="男性" name="gender" id="man">男性 129 </div> 130 <div class="radio-inline"> 131 <input name"gender" type="radio" value="女性" name="gender" id="woman">女性 132 </div> 133 </div> 134 </div> 135 136 137 138 <!-- テキストエリア お問い合わせ --> 139 <div class="form-group"> 140 <label class="col-md-4 control-label" for="contact">お問い合わせ <span class="label label-info">任意</span></label> 141 <div class="col-md-4"> 142 <textarea name="contact" placeholder="お問い合わせ" rows="3" class="form-control" id="contact"></textarea> 143 </div> 144 </div> 145 146 147 148 <!-- Button 送信ボタン --> 149 <div class="form-group"> 150 <label class="col-md-4 control-label" for="singlebutton"></label> 151 <div class="col-sm-offset-5 col-sm-7 col-xs-offset-4 col-xs-8"> 152 <a href="http://192.168.33.15"><button type="button" name="singlebutton" class="btn btn-primary" id="singlebutton">戻る</button></a> 153 <button name="singlebutton" class="btn btn-primary" id="singlebutton">確認する</button> 154 </div> 155 </div> 156 157 </div> 158 159 </fieldset> 160 </form> 161 162 163 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 164 <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script> 165 </body> 166 </html> 167

###confirm.php(確認フォーム)

php

1<?php 2session_start(); 3 4$name = $_POST["name"]; 5$email = $_POST["email"]; 6$password = $_POST["password"]; 7$tel = $_POST["tel"]; 8$prefectures = $_POST["prefectures"]; 9$hobby = $_POST["hobby"]; 10$gender = $_POST["gender"]; 11$contact = $_POST["contact"]; 12 13// エラーメッセージの配列の初期化 14$errormsg = array(); 15 16// 未入力チェック 17 18// 名前の未入力チェック 19if ($name = null) { 20 $errormsg[] = "名前を入力してください。"; 21} 22 23// メールアドレスの未入力チェック 24if ($email = null) { 25 $errormsg[] = "メールアドレスを入力してください。"; 26} 27 28if ($errormsg >= 1) { 29 foreach ($errormsg as $error) { 30 echo $error; 31 } 32 header("location: registration.php?name_error=名前を入力してください&email_error=メールアドレスを入力してください。"); 33 exit(); 34} 35 36 session_destroy(); 37 ?> 38 39 <!DOCTYPE html> 40 <html lang="ja"> 41 <head> 42 <meta charset="utf-8"> 43 <title>確認フォーム</title> 44 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 45 <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet" media="screen"> 46 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css"> 47 48 </head> 49 <body> 50 51 52 <form class="form-horizontal" action="#" method="post"> 53 <fieldset> 54 55 <!-- Form Name --> 56 <legend style=background-color:#65ace4;><h1 style=text-align:center;>確認フォーム</h1></legend> 57 58 <ol class="breadcrumb"> 59 <li><a href="http://192.168.33.15"><span class="glyphicon glyphicon-home" aria-hidden="true"></span>トップ</a></li> 60 <li><a href="http://192.168.33.15/registration.html">新規登録フォーム</a></li> 61 <li class="active">確認フォーム</li> 62 </ol> 63 64 <div class="container"> 65 66 <div class="form-group"> 67 <label class="col-sm-5 control-label">氏名</label> 68 <div class="col-sm-5"> 69 <p class="form-control-static"><?php echo $name; ?></p> 70 </div> 71 </div> 72 73 <div class="form-group"> 74 <label class="col-sm-5 control-label">メールアドレス</label> 75 <div class="col-sm-5"> 76 <p class="form-control-static"><?php echo $email; ?></p> 77 </div> 78 </div> 79 80 81 82 83 <div class="button-group"> 84 <div class="col-md-5 col-sm-offset-5 col-sm-7 col-xs-offset-4 col-xs-8"> 85 <a href="http://192.168.33.15/registration.php"><button type="button" name="singlebutton" class="btn btn-primary" id="singlebutton">戻る</button></a> 86 <button type="submit" class="btn btn-primary">送信する</button> 87 <p class="help-block" style=margin-top:15px;>以上の内容でよろしければ、送信ボタンを押してください。</p> 88 </div> 89 </div> 90 91 92 93 94 95</div> 96 </fieldset> 97 </form> 98 99 100 101 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 102 <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script> 103 </body> 104 </html> 105

###補足情報(言語/FW/ツール等のバージョンなど)
php PHP 5.3.3

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

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

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

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

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

guest

回答1

0

ベストアンサー

$_SESSION を活用すると、上手く書けるのではないでしょうか

registration.php (PHP 部のみ):

php

1<?php 2// require_once('vendor/autoload.php'); // composer でインストールしたライブラリの読み込み 3session_start(); 4 5if (count($_SESSION['errorMsg']) >= 1) { 6 foreach ($_SESSION['errorMsg'] as $message) { 7 echo $message; 8 echo "<br>"; 9 } 10 echo ""; 11} 12 13// eval(\Psy\sh()); // Psysh : ブレークポイントの設定

confirm.php (PHP 部のみ):

php

1<?php 2// require_once('vendor/autoload.php'); // composer でインストールしたライブラリの読み込み 3session_start(); 4 5$keys = array( 6 'name', 7 'email', 8 'password', 9 'tel', 10 'prefectures', 11 'hobby', 12 'gender', 13 'contact' 14); 15 16// POST で受けたキー値と同名の変数に値を代入 17foreach($keys as $key) { 18 ${$key} = $_POST[$key]; 19} 20 21// eval(\Psy\sh()); // Psysh : ブレークポイントの設定 22 23// 24// 未入力チェック 25// 26 27// エラーメッセージの配列の初期化 28$errorMsg = array(); 29 30// 名前の未入力チェック 31if (empty($name)) { 32 $errorMsg[] = "名前を入力してください。"; 33} 34 35// メールアドレスの未入力チェック 36if (empty($email)) { 37 $errorMsg[] = "メールアドレスを入力してください。"; 38} 39 40if (count($errorMsg) >= 1) { 41 $_SESSION['errorMsg'] = $errorMsg; 42 foreach ($errorMsg as $error) { 43 echo $error; 44 } 45 46 header("location: registration.php"); 47 exit(); 48} else { 49 session_destroy(); 50}

簡単に書いてみましたが、何か参考になれば幸いです

※かなり早い段階で管理が大変になるので、スッピンのPHP で機能を実装していくのはお勧めしません なにかしらテンプレートエンジンの導入、ライブラリの利用や、用途に応じたWeb Application Framework の導入をお勧めします

Links

投稿2017/11/25 17:21

gouf

総合スコア2321

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

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

dog57

2017/11/26 03:56

ご丁寧にありがとうございます! もう一つご質問なのですが ${$key} ${$key} はなぜ{}で囲っているのでしょうか?
gouf

2017/11/26 08:27 編集

単純に処理の順番で: $key の値(ここでは name)を文字列として展開、$ + 文字列で変数名として解釈($name)、それに対して代入処理($name = ...) ...といった流れだと思います (詳細な説明は他の人におまかせしたいと思います)
dog57

2017/11/26 08:52

ご丁寧にありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.29%

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

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

質問する

関連した質問