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

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

ただいまの
回答率

91.36%

  • PHP

    15181questions

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

PHPでUndefined index: というエラーが出ます。

解決済

回答 2

投稿 2017/11/29 21:15

  • 評価
  • クリップ 0
  • VIEW 44

andrew57

score 68

PHPで新規登録フォームから確認フォーム行くときに下記のようなエラーが出ます。

Notice: Undefined index: hobby in /var/www/html/public_html/confirm.php on line 61


これの対策としては、isset関数を使っているのですが、効かずにどこが原因なのか分かりません。
ご教授いただけたら嬉しいです。

イメージ説明

・confirm.php (確認フォーム)

<?php
// 開発時にこれを書かないのはNG
ini_set('display_errors', TRUE);
error_reporting(E_ALL);

session_start();

// 文字化けを治す
header("Content-type: text/html; charset=utf-8");

// 変数の定義(初期化)
$name = "";
$email = "";
$password = "";
$tel = "";
$prefectures = "";
$hobby = "";
$gender = "";
$contact = "";

$form_Content = array($name, $email, $password, $tel, $prefectures, $hobby, $gender, $contact);

// エラーメッセージの配列の初期化
$errorMsg = array();
// セッション変数の初期化
$_SESSION['errorMsg'] = array();


// XSS対策 サニタイズ(無毒化)
function h($string){

    if(is_array($string)){
        return array_map("h", $string);

    } else {

        return htmlspecialchars($string, ENT_QUOTES, "UTF-8");
    }
}

  // XSS対策 (hrefやsrcの値がURLか確認する)
  function urlCheck($form_Content) {
      if (!preg_match("/^(https?:.+)$/", $form_Content)) {
          return $errorMsg[] = "不正を検知しました。";
      } else {
          return true;
      }
  }



// POST時
if (filter_input(INPUT_SERVER, 'REQUEST_METHOD') == 'POST') {


    $name = filter_input(INPUT_POST, 'name');
    $email = filter_input(INPUT_POST, 'email');
    $password = filter_input(INPUT_POST, 'password');
    $tel = filter_input(INPUT_POST, 'tel');
    $prefectures = filter_input(INPUT_POST, 'prefectures');
    $hobby = $_POST["hobby"];
    $gender = filter_input(INPUT_POST, 'gender');
    $contact = filter_input(INPUT_POST, 'contact');

//
// 未入力チェック
//

// エラーメッセージの配列の初期化
$errorMsg = array();

// 名前の未入力チェック
if (empty($name)) {
    $errorMsg[] = "名前を入力してください。";
}

// メールアドレスの未入力チェック
if (empty($email)) {
    $errorMsg[] = "メールアドレスを入力してください。";
}

// パスワードの未入力チェック
if (empty($password)) {
    $errorMsg[] = "パスワードを入力してください。";
}

// 電話番号の未入力チェック
if (empty($tel)) {
    $errorMsg[] = "電話番号を入力してください。";
}

// 都道府県の未入力チェック
if ($prefectures == "選択") {
    $errorMsg[] = "都道府県を選択してください。";
}

  //
  // 文字数チェック
  //

  // 名前の文字数チェック
  if (strlen($name) >= 60) {
    $errorMsg[] = "氏名が長すぎます。";
  }

  // パスワード文字数チェック(8文字以上か)
  if (preg_match("/^[a-zA-Z1-9]{1,7}$/", $password)) {
      $errorMsg[] = "パスワードは8文字以上で入力してください。";
  }

  // 電話番号の文字数チェック(10文字 or 11文字)
  if (strlen($tel) >= 1 && strlen($tel) <= 9 && preg_match("/^[0-9]+$/", $tel)) {
      $errorMsg[] = "電話番号は10文字か11文字で入力してください。";
  } elseif (strlen($tel) >= 12 && preg_match("/^[0-9]+$/", $tel)) {
      $errorMsg[] = "電話番号は10文字か11文字で入力してください。";
  }

  //
  // 形式チェック
  //

  // メールアドレス形式チェック
  if (!preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $email) && $email !== "") {
      $errorMsg[] = "メールアドレスに間違いがあります。";
  }

  // 電話番号の形式チェック
  if (preg_match("/[-]+/", $tel)) {
      $errorMsg[] = "電話番号はハイフンなしで入力してください。";
  }

  //
  // 半角英数字チェック
  //

  // 電話番号の数字チェック
  if (!preg_match("/[0-9]/", $tel) && $tel !== "") {
    $errorMsg[] = "電話番号は半角数字で入力してください。";
  }


  // 電話番号の全角チェック Todo
  //if (strlen($tel) !== mb_strlen($tel, "UTF-8")) {
    //  $errorMsg[] = "電話番号に全角が含まれています。";
  //}


  if (count($errorMsg) >= 1) {
      $_SESSION['errorMsg'] = $errorMsg;
      foreach ($errorMsg as $error) {
          echo $error;
      }

      header("location: http://192.168.33.15/registration.php");
      exit;

  } else {
    echo "";
  }



}

 ?>

 <!DOCTYPE html>
 <html lang="ja">
 <head>
     <meta charset="utf-8">
     <title>確認フォーム</title>
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet" media="screen">
     <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css">

 </head>
 <body>


   <form class="form-horizontal" action="#" method="post">
     <fieldset>

       <!-- Form Name -->
       <legend style=background-color:#65ace4;><h1 style=text-align:center;>確認フォーム</h1></legend>

       <ol class="breadcrumb">
           <li><a href="http://192.168.33.15"><span class="glyphicon glyphicon-home" aria-hidden="true"></span>トップ</a></li>
           <li><a href="http://192.168.33.15/registration.html">新規登録フォーム</a></li>
           <li class="active">確認フォーム</li>
         </ol>

    <div class="container">

       <div class="form-group">
           <label class="col-sm-5 control-label">氏名</label>
           <div class="col-sm-5">
               <p class="form-control-static"><?php echo h($name); ?></p>
           </div>
       </div>

       <div class="form-group">
           <label class="col-sm-5 control-label">メールアドレス</label>
           <div class="col-sm-5">
               <p class="form-control-static"><?php echo h($email); ?></p>
           </div>
       </div>

       <div class="form-group">
           <label class="col-sm-5 control-label">パスワード</label>
           <div class="col-sm-5">
               <p class="form-control-static"><?php echo h($password); ?></p>
           </div>
       </div>


    <div class="form-group">
      <label class="col-sm-5 control-label">電話番号</label>
      <div class="col-sm-5">
        <p class="form-control-static"><?php echo h($tel); ?></p>
      </div>
    </div>

    <div class="form-group">
      <label class="col-sm-5 control-label">都道府県</label>
      <div class="col-sm-5">
        <p class="form-control-static"><?php echo h($prefectures); ?></p>
      </div>
    </div>

    <div class="form-group">
      <label class="col-sm-5 control-label">趣味</label>
      <div class="col-sm-5">
          <p class="form-control-static"><?php

          if (isset($_POST["hobby"])) {
              foreach ((array)$hobby as $value) {
                  echo h($value);
              }
              echo " ";
          }


          ?></p>
      </div>
    </div>

    <div class="form-group">
      <label class="col-sm-5 control-label">性別</label>
      <div class="col-sm-5">
          <p class="form-control-static"><?php echo h($gender); ?></p>
      </div>
    </div>

    <div class="form-group">
      <label class="col-sm-5 control-label">お問い合わせ</label>
      <div class="col-sm-5">
        <p class="form-control-static"><?php echo h($contact); ?></p>
      </div>
    </div>


    <div class="button-group">
      <div class="col-md-5 col-sm-offset-5 col-sm-7 col-xs-offset-4 col-xs-8">
        <a href="http://192.168.33.15/registration.php"><button type="button" name="singlebutton" class="btn btn-primary" id="singlebutton">戻る</button></a>
        <button type="submit" class="btn btn-primary">送信する</button>
        <p class="help-block" style=margin-top:15px;>以上の内容でよろしければ、送信ボタンを押してください。</p>
      </div>
    </div>





</div>
      </fieldset>
   </form>



   <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
   <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
   </body>
   </html>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

+2

どこが原因なのか分かりません。

メッセージの末尾のline 61というのは61行目という意味です。

    60        $prefectures = filter_input(INPUT_POST, 'prefectures');
    61        $hobby = $_POST["hobby"];
    62        $gender = filter_input(INPUT_POST, 'gender');

投稿 2017/11/29 21:58

編集 2017/11/29 22:11

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

checkベストアンサー

+1

質問に記載の内容からは、下記行でチェック無しで参照しているようです。

// POST時
if (filter_input(INPUT_SERVER, 'REQUEST_METHOD') == 'POST') {
//$hobby = $_POST["hobby"];

投稿 2017/11/29 22:00

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/11/29 22:51

    ありがとうございます。
    解決いたしましたが、また別の問題が発生してしまったので
    まあ改めてご質問させていただきます。

    キャンセル

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

ただいまの回答率

91.36%

関連した質問

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

  • PHP

    15181questions

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