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

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

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

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

Q&A

解決済

1回答

1890閲覧

エラーメッセージの出力がおかしいんです。ヘルプ!

YukaSaku

総合スコア52

PHP

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

0グッド

0クリップ

投稿2017/04/13 14:32

編集2017/04/13 17:33

PHPで簡単なフォームを作りました。

1入力項目はFirst name, Middle name, Last name, Phoneの4つです。 2First nameに数字123が入力されたら、” 123 is not a valid name.”と出力したい。
本当なら、Name(String項目)に123と数字を入力したら 「"123 is not a valid name"」と出るはず。

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

---------------checkblank_2.php ----------------------- <?php /* Program name: checkBlankOnly_2.php * Description: Program displays the blank form and checks * all the form fields for blank fields. */ foreach($_POST as $field => $value) echo $value; echo $field; echo $name_patt; if(!empty($value)) echo $value; echo $field; echo $name_patt; //name $name_patt = "/^[A-Za-z' -]{1,50}$/"; $phone_patt = "/^[0-9)(xX -]{7,20}$/"; $radio_patt = "/(new|changed)/"; if(preg_match("/name/i",$field)) if(!preg_match($name_patt,$value)) echo $name_patt; $error_array[] = "$value is not a valid name"; //phone if(preg_match("/phone/i",$field)) if(!preg_match($phone_patt,$value)) $error_array[] = "$value is not a valid phone number"; // endif phone format check if(preg_match("/status/i",$field)) if(!preg_match($radio_patt,$value)) $error_array[] = "$value is not a valid status"; $clean_data[$field] = strip_tags(trim($value)); if(@sizeof($error_array) > 0) { $message = "<p style='color: red; margin-bottom: 0; font-weight: bold'> You didn't fill in one or more required fields. You must enter: <ul style='color: red; margin-top: 0; list-style: none' >"; /* display list of missing information */ foreach($error_array as $value) $message .= "<li>$value</li>"; $message .= "</ul>"; echo $message; extract($clean_data); include("form_test3.inc"); exit(); } else echo "Data is all okay"; include("form_test3.inc"); ?>
----------------------form_test3.inc-------------------- <?php /* Program name: form_test3.inc * Description: Defines a form that collects a user's * name and phone number. */ //Initialization $first_name = "";//string initialization $middle_name = "";//string initialization $last_name = "";//string initialization $phone = "";//integer string initialization $labels = array( "first_name" => "First Name", "middle_name" => "Middle Name", "last_name" => "Last Name", "phone" => "Phone"); $radios = array( "New", "Changed"); $submit = "Submit Phone Number"; ?> <html> <head> <style type='text/css'> <!-- form { margin: 1.5em 0 0 0; padding: 0; } .field {padding-bottom: 1em;} label { font-weight: bold; float: left; width: 20%; margin-right: 1em; text-align: right; } .submit { margin-left: 35%; } --> </style> </head> <body> <h3>Please enter your phone number below</h3> <input type='hidden' name='submitted' value='yes'> <?php /* loop that displays the form */ if(isset($_POST['submitted']) and $_POST['submitted'] == "yes") echo "<form action='$_SERVER[PHP_SELF]' method='POST'>"; echo "<form action='checkblank_2.php' method='post'>"; foreach($labels as $field => $label) { echo "<div class='field'><label for='$field'>$label</label> <input id='$field' name='$field' type='text' value='".@$$field."' size='50%' maxlength='65' /></div>\n"; } echo "<div class='field'> <input type='radio' name='status' checked='checked' value='new' style='margin-left: 25%'/>$radios[0] <input type='radio' name='status' value='changed' style='margin-left: 1em' />$radios[1]</div>"; echo "<div class='submit'> <input type='submit' name='phoneButton' value='$submit'></div>"; ?> </form> </body> </html>
---------------------display_form.php----------------- <!doctype html> <html> <head> <meta charset="utf-8"> <title>Repair Order</title> </head> <body> <?php ini_set("display_errors","1"); error_reporting(E_ALL); echo "<html> <head><title>SQL Query Sender</title></head> <body>"; $host="***********.com"; $user="***********"; $password="**********"; $dbname = "***********_***Exercise"; $table = "************"; include("form_test3.inc"); ?> </body> </html>

###試したこと
出力されるエラーメッセージがちょっとおかしいので、echoでパラメータにどんなデータが入ってきてるのか見る為、First nameに1234、Middle nameに123と入力し、あとはブランクでSubmitすると、
「1234123newSubmit Phone NumberphoneButtonSubmit Phone NumberphoneButton」
と出力された。

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

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

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

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

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

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

kei344

2017/04/13 14:48

質問文のコードはそれぞれコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
s8_chu

2017/04/13 14:57 編集

checkblank_2.phpの6行目あたりのforeachの直前にある波括弧は必要なのでしょうか?転記ミスであれば、正しい情報へ修正していただけると嬉しいのですが。
YukaSaku

2017/04/13 15:01

kei344さん、ご指摘ありがとうございます。初めての投稿でわかりませんでした。囲んで、わかりやすくなりました。
YukaSaku

2017/04/13 15:03

s8_chuさん、学校の教科書をそのままコピーしてるので、なぜ波括弧があるのか自分でもあまり良くわかってないんです。消しても大丈夫なのでしょうか。
guest

回答1

0

ベストアンサー

以下のようにして質問文に記述されているものを入力したところ、123 is not a valid nameが出力されましたが、いかがでしょうか。変更した箇所は以下の箇所ですが、一度質問者さん自身で読んでみたほうが良いと思います。

  • Notice: Undefined variableという宣言していない変数を使おうとしたときに発生するエラーが出ていたのでif ($_SERVER["REQUEST_METHOD"] === "POST") {~}を追記して、$_POSTの値をforeachで取り出している処理の周辺を変更。

checkblank_2.php

PHP

1<?php 2/* Program name: checkblank_2.php 3 * Description: Program displays the blank form and checks 4 * all the form fields for blank fields. 5 */ 6 7{ 8 if ($_SERVER["REQUEST_METHOD"] === "POST") { // 追加 9 foreach ($_POST as $field => $value) { 10 echo $value; 11 { 12 if (!empty($value)) { 13 echo $value; 14 } 15 //name 16 { 17 $name_patt = "/^[A-Za-z' -]{1,50}$/"; 18 $phone_patt = "/^[0-9)(xX -]{7,20}$/"; 19 $radio_patt = "/(new|changed)/"; 20 if (preg_match("/name/i", $field)) { 21 if (!preg_match($name_patt, $value)) { 22 $error_array[] = "$value is not a valid name"; 23 } 24 } 25 26 } 27 //phone 28 if (preg_match("/phone/i", $field)) { 29 if (!preg_match($phone_patt, $value)) { 30 $error_array[] = "$value is not a valid phone number"; 31 } 32 } // endif phone format check 33 if (preg_match("/status/i", $field)) { 34 if (!preg_match($radio_patt, $value)) { 35 $error_array[] = "$value is not a valid status"; 36 } 37 } 38 39 $clean_data[$field] = strip_tags(trim($value)); 40 } 41 } 42 if (@sizeof($error_array) > 0) { 43 $message = "<p style='color: red; margin-bottom: 0; 44 font-weight: bold'> 45 You didn't fill in one or more required fields. 46 You must enter: 47 <ul style='color: red; margin-top: 0; 48 list-style: none' >"; 49 /* display list of missing information */ 50 foreach ($error_array as $value) { 51 $message .= "<li>$value</li>"; 52 } 53 $message .= "</ul>"; 54 echo $message; 55 extract($clean_data); 56 include("form_test3.inc"); 57 exit(); 58 } else { 59 echo "Data is all okay"; 60 } 61 } 62 include("form_test3.inc"); 63} 64?>

form_test3.inc

PHP

1<?php 2/* Program name: form_test3.inc 3 * Description: Defines a form that collects a user's 4 * name and phone number. 5 */ 6$labels = array( 7 "first_name" => "First Name", 8 "middle_name" => "Middle Name", 9 "last_name" => "Last Name", 10 "phone" => "Phone" 11); 12$radios = array("New", "Changed"); 13 14$submit = "Submit Phone Number"; 15?> 16<html> 17<head> 18 <style type='text/css'> 19 <!-- 20 form { 21 margin: 1.5em 0 0 0; 22 padding: 0; 23 } 24 25 .field { 26 padding-bottom: 1em; 27 } 28 29 label { 30 font-weight: bold; 31 float: left; 32 width: 20%; 33 margin-right: 1em; 34 text-align: right; 35 } 36 37 .submit { 38 margin-left: 35%; 39 } 40 41 --> 42 </style> 43</head> 44<body> 45<h3>Please enter your phone number below</h3> 46<input type='hidden' name='submitted' value='yes'> 47 48<?php 49 50/* loop that displays the form */ 51if (isset($_POST['submitted']) and $_POST['submitted'] == "yes") { 52 echo "<form action='$_SERVER[PHP_SELF]' method='POST'>"; 53} 54echo "<form action='checkblank_2.php' method='post'>"; 55foreach ($labels as $field => $label) { 56 echo "<div class='field'><label for='$field'>$label</label> 57 <input id='$field' name='$field' type='text' value='" . @$$field . "' 58 size='50%' maxlength='65' /></div>\n"; 59} 60echo "<div class='field'> 61 <input type='radio' name='status' checked='checked' 62 value='new' style='margin-left: 25%'/>$radios[0] 63 <input type='radio' name='status' 64 value='changed' style='margin-left: 1em' />$radios[1]</div>"; 65echo "<div class='submit'> 66 <input type='submit' name='phoneButton' value='$submit'></div>"; 67?> 68</form> 69</body> 70</html>

投稿2017/04/13 15:33

編集2017/04/13 15:34
s8_chu

総合スコア14731

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

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

YukaSaku

2017/04/13 16:11

s8_chuさん、ご回答いただき、ありがとうございます!!!本当に助かります。 if ($_SERVER["REQUEST_METHOD"] === "POST") {~}を追記しただけでは直らず、 $_POSTの値をforeachで取り出している処理の周辺を変更。というところを.incファイル内で見てみたのですが、どこを修正されたのかよくわからなかったのですが、具体的にどこをどのように修正されましたか?
s8_chu

2017/04/13 16:21

回答文の内容が不十分でした。失礼しました。 変更したのはform_test3.incにあるforeachではなく、checkblank_2.phpの9行目のforeachで、具体的には入力された値が妥当かチェックするコードをforeachのスコープの中に入れました。
YukaSaku

2017/04/13 17:31

ありがとうございます! ご回答いただきました、checkblank_2.phpをコピペで実行し、form_test3.incに初期化項目を追加し、フォームは空白のままSubmitしてみたのですが、以下のようなエラーメッセージが表示されました。 newnewSubmit Phone NumberSubmit Phone Number You didn't fill in one or more required fields. You must enter: is not a valid name is not a valid name is not a valid name is not a valid phone number Submit Phone Number is not a valid phone number phone numberを2度取得しに行ってるのでしょうか? この部分はどのように直せばいいでしょうか?
YukaSaku

2017/04/13 18:04

phone number だけではなく、全て2度読んでる感じです。 yukayukamikamikasakusaku123-456-7890123-456-7890newnewSubmit Phone NumberSubmit Phone Number
YukaSaku

2017/04/13 21:22

すみません、2度読んでるのは私がデータの流れを見るためにechoをセットしてたからでした。 しかし、何かエラーがあると、必ずSubmitボタンのエラーも一緒に表示されます。 Submitボタンにエラーメッセージをセットはしてないはずなのですが、何がいけないのでしょうか?
s8_chu

2017/04/14 12:32 編集

返信が遅れてしまいすみません。私から質問があるのですが、Submitボタンのエラーとはどのようなエラー文でしょうか?
YukaSaku

2017/04/15 04:03 編集

いえいえ、お返事ありがとうございます。 何も入力しないでSubmitすると、以下のエラーが表示されます。 You didn't fill in one or more required fields. You must enter: is not a valid name is not a valid name is not a valid name is not a valid phone number Submit Phone Number is not a valid phone number 上の5行は私が設定したエラーメッセージですが、6行目の Submit Phone Number is not a valid phone number は、設定してないんですが、このように表示されます。 もし、きちんとすべての項目を入力した場合には、この6行目も何も表示されず、Submit成功という形になります。
s8_chu

2017/04/16 07:38

form_test3.inc、66行目の<input type='submit' name='phoneButton' value='$submit'>が原因ではないかと。submit変数にはSubmit Phone Numberという文字列が入っています。
YukaSaku

2017/04/16 15:31

ありがとうございます。 家のパソコンのxamppの設定が出来ずにエラーメッセージが見れずにいるので、週が明けたら学校のパソコンでやってみようと思います。
YukaSaku

2017/04/28 13:17

Submitに入っている"Submit phone number"をただのSubmitにしました。 他にもphoneが使われている項目があるので、引っ張られていたようです。 よくわかりませんが、これで解決しました。アイデア頂きましてありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問