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

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

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

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

Q&A

解決済

2回答

7628閲覧

PHPで一つのファイルでページを切り替える方法とエラーメッセージの表示

yushi

総合スコア12

PHP

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

1グッド

0クリップ

投稿2017/03/09 15:34

###前提・実現したいこと
PHPで入力フォームにチェック機能をつけたいのですが、反映されなくて困っています。

以下、解決したい部分です。

・PHPのみで入力フォームと入力チェックを作る
・入力→確認→完了 までを一つのファイル内で行いたいが、入力から完了まで全てが表示されている
(一つのファイルでまとめられたが、切り替えできるようにしたい)

・入力画面で確認ボタンを押した際、空欄があればエラーメッセージを出す(→出ない)
・開発画面での改ざん防止のために、完了ボタンを押した際違う値になっていれば、エラーメッセージを出す(→出ない)

actionを全てindex.phpにしているのに、なぜ反映されないのかがわかりません。
原因が知りたいです。

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

syntax error, unexpected '!=' (T_IS_NOT_EQUAL) in アドレス名 on line 113 113の該当箇所は「if (isset($_POST["name"])) != $name {」です。

###該当のソースコード

PHP

1<?php 2 3//echo '<pre>'; 4//var_dump($_POST); 5//echo '</pre>'; 6 7 $errorm = array(); 8 9 if (isset($_POST["submit"])) { 10 $name = $_POST["name"]; 11 $gender = $_POST["gender"]; 12 $age = $_POST["age"]; 13 $message = $_POST["message"]; 14 15 16if($name == null){ 17 $errorm ['name'] = "名前を入力してください"; 18} 19if($gender == null){ 20 $errorm ['gender'] = "性別にチェックを入れてください"; 21} 22if($age == null){ 23 $errorm ['age'] = "年齢を入力してください"; 24} 25if($name == null){ 26 $errorm ['message'] = "メッセージを入力してください"; 27} 28 29} 30 ?> 31 32 33<!DOCTYPE html> 34<html> 35 <head> 36 <meta charset="utf-8"> 37 <title>問い合わせフォーム!</title> 38 <link rel="stylesheet" href="index.css"> 39 <style> 40 body{ 41 background-color: pink; 42 } 43 44 textarea{ 45 vertical-align:top; 46 } 47 </style> 48 </head> 49 <body> 50 51//入力画面 確認ボタンを押すと上記のエラーメッセージが出る 52 <h2>問い合わせフォーム</h2> 53 54 <form action= "index.php" method="post"> 55 名前 <input name="name" type="text" /> 56 57 <br> 58 59 性別 60 男性<input name="gender" type="radio" value="男性" /> 61 女性<input name="gender" type="radio" value=女性 /><br> 62 63 年齢 <select name="age"> 64 <option value="10">10代未満</option> 65 <option value="20">20代</option> 66 <option value="30">30代</option> 67 <option value="40">40代</option> 68 <option value="50">50代</option> 69 <option value="60">60代以上</option> 70 </select> 71 <br> 72 <p>メッセージ(お問い合わせ内容)</p> 73 <textarea name="message" rows="5" cols="50"></textarea><br> 74 <input type="submit" name="kakunin" value="確認" /> 75 </form> 76 </body> 77</html> 78 79//確認画面 入力画面の値を表示し、完了ボタンを押した際にデータが書き換わっていればエラーを出す 80<!DOCTYPE html> 81<html> 82 <head> 83 <meta charset="utf-8"> 84 <title>問い合わせフォーム!</title> 85 <link rel="stylesheet" href="index.css"> 86</head> 87 <body> 88 <h2>問い合わせ確認</h2> 89 <p>こちらでお間違いありませんか?</p> 90 <form action="index.php" method="post"> 91 <?php 92 93 $name = $_POST["name"]; 94 $gender = $_POST["gender"]; 95 $age = $_POST["age"]; 96 $message = $_POST["message"]; 97 98 echo "名前".'&nbsp'.'&nbsp'.$name; 99 echo "<br />"; 100 echo "性別".'&nbsp'.'&nbsp'.$gender; 101 echo "<br />"; 102 echo "年齢".'&nbsp'.'&nbsp'.$age; 103 echo "<br />"; 104 echo "<br />"; 105 echo "メッセージ内容".'&nbsp'.'&nbsp'.$message; 106 ?> 107 <input type="hidden" name="name" value="<?php echo $name; ?>"> 108 <input type="hidden" name="gender" value="<?php echo $gender; ?>"> 109 <input type="hidden" name="age" value="<?php echo $age; ?>"> 110 <input type="hidden" name="message" value="<?php echo $message; ?>"> 111 112<?php 113if (isset($_POST["name"])) != $name { 114 $errorm ['name'] = "名前が違います" 115} 116if (isset($_POST["gender"])) != $gender { 117 $errorm ['gender'] = "名前が違います" 118} 119if (isset($_POST["age"])) != $age { 120 $errorm ['age'] = "名前が違います" 121} 122 123if (isset($_POST["message"])) != $message { 124 $errorm ['message'] = "名前が違います" 125} 126 127?> 128 <br><br> 129 <input type="button" onclick="history.back()" value="戻る" /> 130 <input type="submit" value="完了" /> 131 132 </form> 133 </body> 134</html> 135 136//完了画面 137<!DOCTYPE html> 138<html> 139<head> 140<form action="index.php" method="post"> 141 <h2>お問合せありがとうございましたm(_ _)m</h2> 142 <input type="button" onclick="history.back(-2)" value="最初に戻る" /> 143 144</form> 145 </body> 146 147</html>

###試したこと
・ネットでエラーメッセージの出し方を調べて表記
・ページ切り替えでheaderやformにidをつけて移動できるよう試みた
###補足情報(言語/FW/ツール等のバージョンなど)
テキストエディタ: Atom
PHP: 7.0.9
サーバー: Xserver

norisukeoji👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

HTMLの構文など色々と修正してみました。
入力画面

HTML

1<?php 2$errorm = array(); 3 4if (isset($_POST["submit"])) { 5 $name = $_POST["name"]; 6 $gender = $_POST["gender"]; 7 $age = $_POST["age"]; 8 $message = $_POST["message"]; 9 10 if ($name === '') { 11 $errorm['name'] = "名前を入力してください"; 12 } 13 if ($gender === '') { 14 $errorm['gender'] = "性別にチェックを入れてください"; 15 } 16 if ($age === '') { 17 $errorm['age'] = "年齢を入力してください"; 18 } 19 if ($name === '') { 20 $errorm['message'] = "メッセージを入力してください"; 21 } 22} 23?> 24<!DOCTYPE html> 25<html> 26<head> 27 <meta charset="utf-8"> 28 <title>問い合わせフォーム!</title> 29 <link rel="stylesheet" href="index.css"> 30 <style type="text/css"> 31 body { 32 background-color: pink; 33 } 34 35 textarea { 36 vertical-align: top; 37 } 38 </style> 39</head> 40<body> 41<h2>問い合わせフォーム</h2> 42<form action="index.php" method="post"> 43 <label> 44 名前 <input name="name" type="text"> 45 </label> 46 性別 47 <label> 48 男性<input name="gender" type="radio" value="男性"/> 49 </label> 50 <label> 51 女性<input name="gender" type="radio" value=女性/> 52 </label> 53 <br> 54 <label>年齢 55 <select name="age"> 56 <option value="10">10代未満</option> 57 <option value="20">20代</option> 58 <option value="30">30代</option> 59 <option value="40">40代</option> 60 <option value="50">50代</option> 61 <option value="60">60代以上</option> 62 </select> 63 </label> 64 <br> 65 <label>メッセージ(お問い合わせ内容) 66 <textarea name="message" rows="5" cols="50"></textarea> 67 </label> 68 <br> 69 <input type="submit" name="kakunin" value="確認"> 70</form> 71</body> 72</html>

確認画面

HTML

1<!DOCTYPE html> 2<html> 3<head> 4 <meta charset="utf-8"> 5 <title>問い合わせフォーム!</title> 6 <link rel="stylesheet" href="index.css"> 7</head> 8<body> 9<h2>問い合わせ確認</h2> 10<p>こちらでお間違いありませんか?</p> 11<form action="index.php" method="post"> 12 <?php 13 $name = $_POST["name"]; 14 $gender = $_POST["gender"]; 15 $age = $_POST["age"]; 16 $message = $_POST["message"]; 17 18 echo "名前" . '&nbsp' . '&nbsp' . $name; 19 echo "<br />"; 20 echo "性別" . '&nbsp' . '&nbsp' . $gender; 21 echo "<br />"; 22 echo "年齢" . '&nbsp' . '&nbsp' . $age; 23 echo "<br />"; 24 echo "<br />"; 25 echo "メッセージ内容" . '&nbsp' . '&nbsp' . $message; 26 ?> 27 <input type="hidden" name="name" value="<?php echo $name; ?>"> 28 <input type="hidden" name="gender" value="<?php echo $gender; ?>"> 29 <input type="hidden" name="age" value="<?php echo $age; ?>"> 30 <input type="hidden" name="message" value="<?php echo $message; ?>"> 31 <!-- 32 意図している動作がわからなかったのでとりあえずコメントアウト。 33 < ?php 34 if (isset($_POST["name"])) != $name{ 35 $errorm ['name'] = "名前が違います" 36 } 37 if (isset($_POST["gender"])) != $gender{ 38 $errorm ['gender'] = "名前が違います" 39 } 40 if (isset($_POST["age"])) != $age{ 41 $errorm ['age'] = "名前が違います" 42 } 43 44 if (isset($_POST["message"])) != $message{ 45 $errorm ['message'] = "名前が違います" 46 } 47 ?> 48 --> 49 <br><br> 50 <input type="button" onclick="history.back()" value="戻る"> 51 <input type="submit" value="完了"> 52</form> 53</body> 54</html>

完了画面

HTML

1<!DOCTYPE html> 2<html> 3<head> 4</head><!-- 閉じる。 --> 5<body><!-- bodyタグの開始タグがない。 --> 6<form action="index.php" method="post"> 7 <h2>お問合せありがとうございましたm(_ _)m</h2> 8 <input type="button" onclick="history.back(-2)" value="最初に戻る"> 9</form> 10</body> 11</html>

追記

PHP

1<?php 2if (session_status() !== PHP_SESSION_ACTIVE) { 3 session_cache_expire(0); 4 session_cache_limiter('private_no_expire'); 5 session_start(); 6} 7if (!isset($_SESSION["token"])) { 8 $_SESSION["token"] = ""; 9} 10 11$errorm = ""; 12$state = ""; 13 14function h($str) 15{ 16 return htmlspecialchars($str, ENT_QUOTES, "UTF-8"); 17} 18 19function getToken() 20{ 21 $token = null; 22 if (is_null($token)) { 23 $token = hash("sha256", uniqid()); 24 } 25 $_SESSION["token"] = $token; 26 return $token; 27} 28 29function checkToken($str) 30{ 31 return (isset($_SESSION["token"]) && $_SESSION["token"] === $str); 32} 33 34foreach (["name", "gender", "age", "message"] as $value) { 35 $$value = ""; 36} 37 38if (filter_input(INPUT_POST, "submit")) { 39 if (checkToken(filter_input(INPUT_POST, "token"))) { 40 $state = "submit"; 41 unset($_SESSION["token"]); 42 foreach (["name", "gender", "age", "message"] as $value) { 43 if (empty(filter_input(INPUT_POST, $value))) { 44 $errorm = "未入力箇所があります。"; 45 $state = ""; 46 break; 47 } else { 48 $_SESSION[$value] = filter_input(INPUT_POST, $value); 49 } 50 } 51 } else { 52 $state = ""; 53 foreach (["name", "gender", "age", "message"] as $value) { 54 $$value = filter_input(INPUT_POST, $value); 55 } 56 } 57} else if (filter_input(INPUT_POST, "confirm")) { 58 if (checkToken(filter_input(INPUT_POST, "token"))) { 59 $state = "confirm"; 60 unset($_SESSION["token"]); 61 foreach (["name", "gender", "age", "message"] as $value) { 62 if (empty(filter_input(INPUT_POST, $value))) { 63 $errorm = "未入力箇所があります。"; 64 $state = ""; 65 break; 66 } else { 67 if ((!isset($_SESSION[$value])) || $_SESSION[$value] !== filter_input(INPUT_POST, $value)) { 68 $state = ""; 69 } 70 } 71 } 72 } else { 73 $state = ""; 74 } 75 //送られてきた内容の保存などの処理は省略。 76} 77?> 78<!DOCTYPE html> 79<html lang="ja"> 80<head> 81 <meta charset="utf-8"> 82 <title>タイトル</title> 83 <style type="text/css"> 84 * { 85 margin: 0; 86 padding: 0; 87 } 88 89 label { 90 display: block; 91 } 92 </style> 93</head> 94<body> 95<?php if (!empty($errorm)): ?> 96 <strong><?= $errorm ?></strong> 97<?php endif; ?> 98<?php if ($state === "submit"): ?> 99 <form action="" method="post"> 100 <ul> 101 <li><?= h($_SESSION["name"]) ?></li> 102 <li><?= h($_SESSION["gender"]) ?></li> 103 <li><?= h($_SESSION["age"]) ?></li> 104 <li><?= h($_SESSION["message"]) ?></li> 105 </ul> 106 <input type="hidden" name="name" value="<?= h($_SESSION["name"]) ?>"> 107 <input type="hidden" name="gender" value="<?= h($_SESSION["gender"]) ?>"> 108 <input type="hidden" name="age" value="<?= h($_SESSION["age"]) ?>"> 109 <input type="hidden" name="message" value="<?= h($_SESSION["message"]) ?>"> 110 <input type="hidden" name="token" value="<?= h(getToken()) ?>"> 111 <input type="submit" name="confirm"> 112 </form> 113<?php elseif ($state === "confirm"): ?> 114 <p>送信完了。</p> 115<?php else: ?> 116 <form action="" method="post"> 117 <label>お名前: 118 <input type="text" name="name" value="<?= h($name) ?>"> 119 </label> 120 <span>性別</span> 121 <label>男性: 122 <input type="radio" name="gender" value="男性" <?php if ($gender === "男性") echo "checked"; ?>> 123 </label> 124 <label>女性: 125 <input type="radio" name="gender" value="女性" <?php if ($gender === "女性") echo "checked"; ?>> 126 </label> 127 <label>その他: 128 <input type="radio" name="gender" value="その他" <?php if ($gender === "その他") echo "checked"; ?>> 129 </label> 130 <label>年齢: 131 <select name="age"><?= $age ?> 132 <?php foreach (["10", "20", "30", "40", "50", "60"] as $value): ?> 133 <?php if ($age === $value): ?> 134 <?php if ($value === "10"): ?> 135 <option value="<?= $value ?>" selected><?= $value ?>代未満</option> 136 <?php elseif ($value === "60"): ?> 137 <option value="<?= $value ?>" selected><?= $value ?>代以上</option> 138 <?php else: ?> 139 <option value="<?= $value ?>" selected><?= $value ?></option> 140 <?php endif; ?> 141 <?php else: ?> 142 <?php if ($value === "10"): ?> 143 <option value="<?= $value ?>"><?= $value ?>代未満</option> 144 <?php elseif ($value === "60"): ?> 145 <option value="<?= $value ?>"><?= $value ?>代以上</option> 146 <?php else: ?> 147 <option value="<?= $value ?>"><?= $value ?></option> 148 <?php endif; ?> 149 <?php endif; ?> 150 <?php endforeach; ?> 151 </select> 152 </label> 153 <label>メッセージ(お問い合わせ内容): 154 <textarea name="message" rows="5" cols="50"><?= h($message) ?></textarea> 155 </label> 156 <input type="hidden" name="token" value="<?= h(getToken()) ?>"> 157 <input type="submit" name="submit"> 158 </form> 159<?php endif; ?> 160</body> 161</html>

投稿2017/03/09 16:18

編集2017/03/10 04:54
s8_chu

総合スコア14731

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

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

退会済みユーザー

退会済みユーザー

2017/03/09 16:27

ついでに、10歳〜19歳の人も使えるようにするといいと思います。
yushi

2017/03/10 03:19

回答ありがとうございます。間違っている部分、修正しました。 修正はできましたが、一つのページに入力から完了までが全て出ている状態でエラーメッセージも表示されません。一つのファイルでページの切り替えはできないのでしょうか。 確認画面の「意図している動作がわからない・・」ところは 「完了ボタンを押した際に表示されている値が、入力画面で入力した値と異なっていれば、完了画面に進まないようにする(エラーメッセージを出す)」ということをしたいです。
s8_chu

2017/03/10 05:15

Kosuke_Shibuyaさん、yushiさん>返信が遅れてしまい申し訳ありません。質問文に記述されている要件のほとんどを満たしたコードを追記させていただきました。
退会済みユーザー

退会済みユーザー

2017/03/10 05:16

ロジックというより‥笑 ここ <option value="10">10代未満</option> <option value="20">20代</option> 10代の選択肢がないw
yushi

2017/03/11 15:57

Kosuke_Shibuyaさん、s8_chuさん ご回答ありがとうございました。10代~20代の部分忘れていて申し訳ありません・・ きちんと動きました。コードを書いては消し・・・の作業を繰り返していたので助かりました。 今後はコードを眺め関数がどう働いているのか、また知らない関数について調べていきます。 kei344さんのおっしゃる通り、phpの基礎からやり直しつつ勉強会についていくつもりです。
guest

0

PHPに限らず問題の切り分けは重要なスキルです。一度に全部盛り込んで作らず、ページを分けたところから作られてはいかがでしょうか。

また、PHPの入門書を最初から順番にこなされたほうが良いと思います。

投稿2017/03/09 15:50

kei344

総合スコア69364

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

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

yushi

2017/03/10 03:14

回答ありがとうございます。 できれば基礎からやり直したいのですが、今回は勉強会の宿題ということもあり、自分の力でエラーメッセージを出さなければなりません。 別ファイルにするのが一番いい方法ですが、一つのファイルでやってほしいと指示されたのでコードをまとめて載せています。
kei344

2017/03/10 04:20

> 勉強会の宿題 それであるならなおさら基礎を勉強すべきです。書かれているコードは「どこからどこまでがHTMLか」という切り分けができていない状態です。PHPについては制御文の書き方もいまいちわかっていない様子です。 あせって質問しているより書籍を複数買って勉強するほうが今後の上達につながりますよ。
yushi

2017/03/11 16:01

ご回答ありがとうございます。 HTML、CSSまではついていけるものの、JavaScriptやPHPになると関数や条件分岐が多く登場するため、頭が混乱してしているのが現状です。 なるべく自分の力でやるのであれば、基本的な部分を覚えなければなりませんね。 勉強会についていくためにも、少しずつ時間を取って始めからやり直します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問