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

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

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

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

配列

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

Q&A

解決済

1回答

1828閲覧

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

dog57

総合スコア131

PHP

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

配列

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

0グッド

0クリップ

投稿2017/11/25 12:49

###前提・実現したいこと
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.50%

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

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

質問する

関連した質問