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

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

ただいまの
回答率

87.61%

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,378

score 44

入力項目はFirst name, Middle name, Last name, Phoneの4つです。
First 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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • YukaSaku

    2017/04/14 00:01

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

    キャンセル

  • YukaSaku

    2017/04/14 00:03

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

    キャンセル

  • YukaSaku

    2017/04/14 00:22

    s8_chuさん、波括弧は絶対に必要なものではないんですね。<参照:http://www.furimuke.com/2013/08/php.html>ちょっと消してみます。ありがとうございます。

    キャンセル

回答 1

checkベストアンサー

+3

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

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

checkblank_2.php

<?php
/*  Program name: checkblank_2.php
 *  Description:  Program displays the blank form and checks
 *  all the form fields for blank fields.
 */

{
    if ($_SERVER["REQUEST_METHOD"] === "POST") { // 追加
        foreach ($_POST as $field => $value) {
            echo $value;
            {
                if (!empty($value)) {
                    echo $value;
                }
                //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)) {
                            $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.
 */
$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>

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/04/16 16:38

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

    キャンセル

  • 2017/04/17 00:31

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

    キャンセル

  • 2017/04/28 22:17

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

    キャンセル

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

  • ただいまの回答率 87.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る