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

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

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

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

Q&A

解決済

3回答

884閲覧

phpで登録フォームのエラーチェックがうまくできません。

hilhilyzyan

総合スコア19

PHP

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

0グッド

0クリップ

投稿2018/01/01 11:36

編集2018/01/01 13:07

登録フォームを作っていて、
「登録画面→確認画面→登録完了画面」の「確認画面」の部分で質問です。

エラーチェックがうまくできません。
具体的には、ブラウザに以下のようなメッセージが表示されます

HTTP 500 エラー
申し訳ありません。Web サイトはこのページを表示できません
このサイトではメンテナンス中であるか、プログラミング エラーが発生している可能性があります。
対処方法
直前のページに戻る
Web サイトの所有者に連絡してください

そもそも、エラーチェックのイメージが湧いていないことが原因なのですが、
同じ「confirm.php」内なのに、どのようにして表示内容を切り替えるのでしょうか。

<エラーチェック項目>
・学籍番号に数字以外が入力された場合にエラー
・名前が空欄の場合にエラー
・年齢が入力されていない場合にエラー

以下、登録フォーム入力画面

php

1 2<!DOCTYPE html> 3<html lang = "ja"> 4<head> 5 <meta charset="utf-8"> 6 <title>Progate</title> 7 <link rel="stylesheet" type="text/css" href="stylesheet.css"> 8</head> 9<body> 10 11<div class="contact-form"> 12 <div class="idinput"> 13 <form class="form-item" action="confirm.php" method="POST" id="id"> 14 <table> 15 <thead> 16 <tr> 17 <th>ID入力ホーム</th> 18 </tr> 19 </thead> 20 <tbody> 21 <tr> 22 <th>学籍番号</th> 23 <td><input type="text" name="idnumber"></td> 24 </tr> 25 <tr> 26 <th>名前</th> 27 <td><input type="text" name="name"></td> 28 </tr> 29 <tr> 30 <th>年齢</th> 31 <td><input type="text" name="age"></td> 32 </tr> 33 </tbody> 34 <tfoot> 35 <tr> 36 <th>備考</th> 37 <td><textarea name="comment" cols="40" rows="5"></textarea></td> 38 </tr> 39 </tfoot> 40 </table> 41 <input type="submit" value="送信"> 42 </form> 43 </div> 44 </div> 45</body> 46</html> 47

以下、登録フォーム確認画面

php

1<!DOCTYPE html> 2<html> 3<head> 4 <meta charset="utf-8"> 5 <title>登録確認フォーム</title> 6 <link rel="stylesheet" type="text/css" href="stylesheet.css"> 7</head> 8<body> 9<form class="form-item" action="complete.php" method="post" id="confirm"> 10 11 12<?php 13 $idnumber =$_POST["idnumber"]; 14 $name = $_POST["name"]; 15 $age = $_POST["age"]; 16 $comment = $_POST["comment"]; 17 18 $error = array(); 19 if (is.numeric($idnumber) == false){ 20 $errors[] = "数字を入力してください"; 21 } 22 if ($name == NULL){ 23 $errors[] = "名前を入力してください"; 24 } 25 if ($age == NULL){ 26 $errors[] = "年齢を入力してください"; 27 } 28?> 29 30<?php 31if (empty($error)){ 32 <h1>登録内容確認</h1> 33 <p>学籍番号</p> 34 <p><?php echo $_POST['idnumber']; ?></p> 35 36 <p>名前</p> 37 <p><?php echo $_POST['name']; ?></p> 38 39 <p>年齢</p> 40 <p><?php echo $_POST['age']; ?></p> 41 42 <p>備考</p> 43<p><?php echo $_POST['comment']; ?></p> 44 45 46 <input type="hidden" name="idnumber" value="<?php echo $_POST['idnumber']; ?>"> 47 <input type="hidden" name="name" value="<?php echo $_POST['name']; ?>"> 48 <input type="hidden" name="age" value="<?php echo $_POST['name']; ?>"> 49 <input type="hidden" name="comment" value="<?php echo $_POST['comment']; ?>"> 50 </form> 51} 52else { 53 <h1>入力にエラーがあります</h1> 54 foreach( $error as $value ){ 55 <li>< echo $value; </li> 56 } 57} 58 ?> 59 60 </body> 61</html>

この後にcomplete.phpという登録完了画面を作る予定ですが、まだ作成していません。

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

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

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

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

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

guest

回答3

0

エラーチェックがうまくできません。

それ以前にスクリプトがエラーを吐いて動かないはずですが。。。

記述されているコードは、ネットの情報のつなぎ合わせだと思いますが、ユーザ入力値の確認や、表示のエスケープ処理と言った基本事項に問題があります。

実践的なコードではないので、あまりこだわらず、別の学習方法に移行したほうが効率が良いと思います。

そもそもの php の書き方が分かっていないので、まずは入門書を入手し、体系的な学習をされることをオススメします。

投稿2018/01/01 13:12

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

PHP

1<form class="form-item" action="complete.php" method="post" id="confirm"> 2 3<?php 4 $idnumber =$_POST["idnumber"]; // $_POST["idnumber"]が無い場合エラー。書くなら $idnumber =filter_input( INPUT_POST, 'idnumber' ); かな。 5 $name = $_POST["name"]; // 同じ 6 $age = $_POST["age"]; // 同じ 7 $comment = $_POST["comment"]; // 同じ 8 9 $error = array(); 10 if (is.numeric($idnumber) == false){ // is.numeric ではなく is_numeric 。具体的な検証方法については触れない。 11 $errors[] = "数字を入力してください"; 12 } 13 if ($name == NULL){ 14 $errors[] = "名前を入力してください"; 15 } 16 if ($age == NULL){ 17 $errors[] = "年齢を入力してください"; 18 } 19?> 20 21<?php 22if (empty($error)){ // 末尾に「?>」 が抜けてる 23 <h1>登録内容確認</h1> 24 <p>学籍番号</p> 25 <p><?php echo $_POST['idnumber']; ?></p><!-- さっき変数化したのになぜまた $_POST['idnumber'] で呼ぶんだろう。あと、エスケープしないとだめ。 --> 26 27 <p>名前</p> 28 <p><?php echo $_POST['name']; ?></p><!-- 同じ --> 29 30 <p>年齢</p> 31 <p><?php echo $_POST['age']; ?></p><!-- 同じ --> 32 33 <p>備考</p> 34<p><?php echo $_POST['comment']; ?></p><!-- 同じ --> 35 36 37 <input type="hidden" name="idnumber" value="<?php echo $_POST['idnumber']; ?>"><!-- 同じ --> 38 <input type="hidden" name="name" value="<?php echo $_POST['name']; ?>"><!-- 同じ --> 39 <input type="hidden" name="age" value="<?php echo $_POST['name']; ?>"><!-- 同じ --> 40 <input type="hidden" name="comment" value="<?php echo $_POST['comment']; ?>"><!-- 同じ --> 41 </form> 42}<!-- ←「<?php }」になるべき --> 43else {<!-- 末尾に「?>」 が抜けてる --> 44 <h1>入力にエラーがあります</h1><!-- 末尾に「<?php」 が抜けてる --> 45 foreach( $error as $value ){<!-- 末尾に「?>」 が抜けてる --> 46 <li>< echo $value; </li> 47 }<!-- ←「<?php }」になるべき --> 48} 49 ?>

【$_GET, $_POSTなどを受け取る際の処理 - Qiita】
https://qiita.com/mpyw/items/2f9955db1c02eeef43ea

【PHP: is_numeric - Manual】
http://php.net/manual/ja/function.is-numeric.php

投稿2018/01/01 13:28

kei344

総合スコア69398

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

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

0

ベストアンサー

こんにちは。

実際に動かして確認していないのですが、うまく動かない原因として
怪しいと思われる点は、

HTMLの組み方が、<body>・・・</body><form>・・・</form> がくくっていること

です。
これを修正して、
<body>・・・</body> の中に <form>・・・</form> 
が入っているようにして、いま一度確認されてみてはいかがでしょうか。

参考になれば幸いです。

投稿2018/01/01 12:13

jun68ykt

総合スコア9058

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

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

hilhilyzyan

2018/01/01 12:28

回答ありがとうございます! 修正しましたが、それでもうまくいきません…。
jun68ykt

2018/01/01 12:44

それでは、 (1) <body>と <form>の位置を入れ替えて修正した、修正後のPHPを再度、質問欄に提示して頂きたい のと、 (2)「それでもうまくいきません…。」とは具体的にどううまくいってないのか?をもう少し詳細に教えて頂きたいです。 (2)については、たとえば   - 入力エラーとなるべき値がエラーとして認識されていない  のか、あるいは   - 入力エラーにならないはずの値が不正な値として認識されてしまう  のか、あるいはもっと違う状況が起こっているのか? といったところが知りたいです。 それと、たぶん、この確認画面が表示される前に入力画面が、 別の PHP としてあるものと思いますが、それも載せてもらったほうが 正確な回答ができると思います。
hilhilyzyan

2018/01/01 13:09

具体的な指示ありがとうございます。 修正後のphpファイルと、入力画面のphpファイルをアップしました。 そして、うまくいかない点の追記もしました。 初心者なので、ご教授よろしくお願いします。
退会済みユーザー

退会済みユーザー

2018/01/01 13:15

そもそもの php の構文として <?php と ?> が適切に扱われていません。
jun68ykt

2018/01/01 13:36

@te2ji さん あ。そうですね。 @hilhilyzyan さん 再掲いただいたコードの中で、 <?php if (empty($error)){ <h1>登録内容確認</h1> <p>学籍番号</p> <p><?php echo $_POST['idnumber']; ?></p> <p>名前</p> <p><?php echo $_POST['name']; ?></p> <p>年齢</p> <p><?php echo $_POST['age']; ?></p> <p>備考</p> <p><?php echo $_POST['comment']; ?></p> <input type="hidden" name="idnumber" value="<?php echo $_POST['idnumber']; ?>"> <input type="hidden" name="name" value="<?php echo $_POST['name']; ?>"> <input type="hidden" name="age" value="<?php echo $_POST['name']; ?>"> <input type="hidden" name="comment" value="<?php echo $_POST['comment']; ?>"> </form> } else { <h1>入力にエラーがあります</h1> foreach( $error as $value ){ <li>< echo $value; </li> } } ?> と書かれているところから察するに、PHPをHTMLの中に書くときの基本の把握が あやふやであるものと推測されます。 たとえば、 <h1> というタグを出力したいときに、 <?php ・・・ ?> の中で単に <h1> と書くことはできないです。 ここは、@te2ji さんのご回答にあるように、入門書で定評あるものの 最初の簡単なサンプルから動かして、進めていかれることをお勧めしたい と思います。 すると、 @kei344 さんの回答の意味が分かってうまくいけば自己解決できると思いますし、 そこで何かひっかかっても今回の質問よりも一段レベルが上の質問になっているかと思います。 頑張ってください!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問