前提・実現したいこと
教本みながら登録画面作ってます。Notice: Undefined variable: error in のエラーが出てしまいます。
エラーにかかわりそうなところをnullにしたら、次の画面へ進まなくなってしまいました。
どうしたらよいか教えていただけると幸いです。
■■な機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
Undefined index: name in が88,89行に Undefined index: email in が97,100行に Undefined index: password in が108,111行に出ます。 パスワードの入力画面にも「・・・・・・・・・・・・・・・・・・・・」とあるのでエラーが出ていると思われます。
php
<?php require('../dbconnect.php'); session_start(); $error['name'] = ''; $error['email'] = ''; $error['password'] = ''; $error['password'] = ''; $_POST['name'] = ''; $_POST['email'] = ''; $_POST['password'] = ''; if (!empty($_POST)){ if ($_POST['name'] == '') { $error['name'] = 'blank'; } if ($_POST['email'] == '') { $error['email'] = 'blank'; } if (strlen($_POST['password']) < 4) { $error['password'] = 'length'; } if ($_POST['password'] == '') { $error['password'] = 'blank'; } //---------- Check for duplicate accounts -------------------------------------------------// if(empty($error)) { $member = $db->prepare('SELECT COUNT(*) AS cnt FROM members WHERE email=?'); $member->execute(array($_POST['email'])); $record = $member->fetch(); if ($record['cnt'] > 0) { $error['email'] = 'duplicate'; } if(empty($error)) { $_SESSION['join'] = $_POST; header('Location: check.php'); exit(); } } if($_REQUEST['action'] == 'rewrite') { $_POST = $_SESSION['join']; $error['rewrite'] = true; } } ?> <!-----------end------------------------------------------------> <meta charset="UTF-8"> <title></title> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="format-detection" content="email=no,telephone=no,address=no"> <link href="../font/css/open-iconic-bootstrap.css" rel="stylesheet"> <!-- BootstrapのCSS読み込み --> <link href="../css/bootstrap.min.css" rel="stylesheet"> <!-- jQuery読み込み --> <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" ></script> <!-- BootstrapのJS読み込み --> <script src="../js/bootstrap.min.js"></script> <!---css-------> <link rel="stylesheet" href="../css/join.css"> <link rel="stylesheet" href="../css/common.css"> <!---Google Material Icons-------> <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> </head> <body> <header class="text-center mt-3"> <img class="head_rogo ml-md-5" src="../images/SVG/rogo.svg"> <div class="float-right mr-md-3"> <img class="head_icon mr-2" src="../images/SVG/head_login.svg"> <img class="head_icon mr-2 mt-1" src="../images/SVG/head_favorite.svg"> <img class="head_icon mr-2" src="../images/SVG/head_bag.svg"> </div> <div class="border-bottom ml-3 mr-3"></div> </header> <main> <!-----------contents-------------------------------------------------------------------------------------------------> <div class="container"> <div class="border-pink f-darkpink mt-4"><img class="title_icon mr-2 mb-2" src="../images/SVG/head_login.svg">アカウント作成</div> <form class="f-white" action="" method="post" > <div class="form-group w-25 formwidth"> <label for="inputname">name<span class="required ml-2 fs-8 f-darkpink">必須</span></label> <input type="text" name="name" class="form-control" id="inputname" value="<?php echo htmlspecialchars($_POST['name'],ENT_QUOTES); ?>"/> <?php if ($error['name'] == 'blank'): ?> <p class="error">*名前を入力してください。</p> <?php endif; ?> </div> <div class="form-group w-50 formwidth"> <label for="exampleInputEmail1">email<span class="required ml-2 fs-8 f-darkpink">必須</span></label> <input type="text" name="email" class="form-control" id="exampleInputEmail1" value="<?php echo htmlspecialchars($_POST['email'], ENT_QUOTES); ?>"/> <?php if ($error['email'] == 'blank'): ?> <p class="error">*メールアドレスを入力して下さい</p> <?php endif; ?> <?php if ($error['email'] == 'duplicate'): ?> <p class="error">*指定されたメールアドレスは既に登録されています</p> <?php endif; ?> </div> <div class="form-group w-50 formwidth"> <label for="exampleInputPassword1">password<span class="required ml-2 fs-8 f-darkpink">必須</span></label> <input type="password" name="password" class="form-control" id="exampleInputPassword1" value="<?php echo htmlspecialchars($_POST['password'],ENT_QUOTES); ?>"/> <?php if ($error['password'] == 'blank'): ?> <p class="error">*パスワードを入力してください</p> <?php endif; ?> <?php if ($error['password'] == 'length'): ?> <p class="error">*パスワードは4文字以上で入力してください</p> <?php endif; ?> </div> <div class="text-center pt-5"> <input type="submit" class="btn bg-pink f-white" value="アカウント作成"> </div> </form>
したはアドバイスをいただいて変更したものです。
php
<head> <!-----------Confirmation of input items------------------------------------------------> <?php require('../dbconnect.php'); session_start(); $error =[]; if (!empty($_POST)){ if (array_key_exists($_POST['name']) && $_POST['name'] == '') { $error['name'] = 'blank'; } if (array_key_exists($_POST['email']) && $_POST['email'] == '') { $error['email'] = 'blank'; } if (array_key_exists($_POST['password']) && strlen($_POST['password']) < 4) { $error['password'] = 'length'; } if (array_key_exists($_POST['password']) && $_POST['password'] == '') { $error['password'] = 'blank'; } //---------- Check for duplicate accounts -------------------------------------------------// if(empty($error)) { $member = $db->prepare('SELECT COUNT(*) AS cnt FROM members WHERE email=?'); $member->execute(array($_POST['email'])); $record = $member->fetch(); if ($record['cnt'] > 0) { $error['email'] = 'duplicate'; } $_SESSION['join'] = $_POST; header('Location: check.php'); exit(); } if($_REQUEST['action'] == 'rewrite') { $_POST = $_SESSION['join']; $error['rewrite'] = true; } } ?> <!-----------end------------------------------------------------> <meta charset="UTF-8"> <title></title> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="format-detection" content="email=no,telephone=no,address=no"> <link href="../font/css/open-iconic-bootstrap.css" rel="stylesheet"> <!-- BootstrapのCSS読み込み --> <link href="../css/bootstrap.min.css" rel="stylesheet"> <!-- jQuery読み込み --> <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" ></script> <!-- BootstrapのJS読み込み --> <script src="../js/bootstrap.min.js"></script> <!---css-------> <link rel="stylesheet" href="../css/join.css"> <link rel="stylesheet" href="../css/common.css"> <!---Google Material Icons-------> <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> </head> <body> <header class="text-center mt-3"> <img class="head_rogo ml-md-5" src="../images/SVG/rogo.svg"> <div class="float-right mr-md-3"> <img class="head_icon mr-2" src="../images/SVG/head_login.svg"> <img class="head_icon mr-2 mt-1" src="../images/SVG/head_favorite.svg"> <img class="head_icon mr-2" src="../images/SVG/head_bag.svg"> </div> <div class="border-bottom ml-3 mr-3"></div> </header> <main> <!-----------contents-------------------------------------------------------------------------------------------------> <div class="container"> <div class="border-pink f-darkpink mt-4"><img class="title_icon mr-2 mb-2" src="../images/SVG/head_login.svg">アカウント作成</div> <form class="f-white" action="" method="post" > <div class="form-group w-25 formwidth"> <label for="inputname">name<span class="required ml-2 fs-8 f-darkpink">必須</span></label> <input type="text" name="name" class="form-control" id="inputname" value="<?php echo htmlspecialchars($_POST['name'],ENT_QUOTES); ?>"/> <?php if ($error['name'] == 'blank' ): ?> <p class="error">*名前を入力してください。</p> <?php endif; ?> </div> <div class="form-group w-50 formwidth"> <label for="exampleInputEmail1">email<span class="required ml-2 fs-8 f-darkpink">必須</span></label> <input type="text" name="email" class="form-control" id="exampleInputEmail1" value="<?php echo htmlspecialchars($_POST['email'], ENT_QUOTES); ?>"/> <?php if ($error['email'] == 'blank'): ?> <p class="error">*メールアドレスを入力して下さい</p> <?php endif; ?> <?php if ($error['email'] == 'duplicate'): ?> <p class="error">*指定されたメールアドレスは既に登録されています</p> <?php endif; ?> </div> <div class="form-group w-50 formwidth"> <label for="exampleInputPassword1">password<span class="required ml-2 fs-8 f-darkpink">必須</span></label> <input type="password" name="password" class="form-control" id="exampleInputPassword1" value="<?php echo htmlspecialchars($_POST['password'],ENT_QUOTES); ?>"/> <?php if ($error['password'] == 'blank'): ?> <p class="error">*パスワードを入力してください</p> <?php endif; ?> <?php if ($error['password'] == 'length'): ?> <p class="error">*パスワードは4文字以上で入力してください</p> <?php endif; ?> </div> <div class="text-center pt-5"> <input type="submit" class="btn bg-pink f-white" value="アカウント作成"> </div> </form>
試したこと
エラーにかかわりそうなところnullにしてみた。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
エラーメッセージには、行数なども記載されていると思いますので、途中で省略などはしないでそのまま記載していただけないでしょうか?
( ディレクトリやファイル名に個人名などが含まれていて名前などを隠したい場合は、隠したい部分の文字だけを置き換えてください。)
89、90、97、98、101、109、112の行でエラーが出ていました。行数書かないとエラー部分わからないですよね><
質問の仕方が良くなかったですね。教えてくださりありがとうございます!
質問編集して追記してください
教本に書いてあるコードを写経してこれなら、その本は廃棄してください
遅くなりすみません。編集しました!
ネットでおすすめされていたのを買ったのですがあまりよくない本だったのでしょうか?><
皆さんのアドバイス見ているとわからないことばかりなのでもう少し踏み込んだ内容のありそうな教科書見たほうがいいように思えてきました。
書籍ではなくPHPマニュアルを。
マニュアルみつつ、勉強しないとだめだと思いました。教えていただきありがとうございます。
回答2件
あなたの回答
tips
プレビュー