こんにちは、
現在、まだPHP初級者ですが、勉強を兼ねてスタッフ登録フォームを作成使用としています。
スタッフ修正画面から、データベースに登録するという段階で下記のようなエラーが出ちゃって、修正画面から、定義済み変数$_POST[]で送られるはずなのですが、なぜ変数が定義されていませんというエラーが出るのが悩まして原因が見つからない。
ここでどなた方にご教示お願いしたくてご連絡致します。
ご存知の方がお手数をおかけいたしますが、教えてお願いいたします。
補足:セッションで変数に代入して見るときちゃんと登録ができるですが、セッション使わない場合、原因が知りたかったです。
エラー内容:
Notice: Undefined index: name in /home/ubuntu/workspace/staff_edit_done.php on line 25 Call Stack: 0.0011 239976 1. {main}() /home/ubuntu/workspace/staff_edit_done.php:0 Notice: Undefined index: pass in /home/ubuntu/workspace/staff_edit_done.php on line 26 Call Stack: 0.0011 239976 1. {main}() /home/ubuntu/workspace/staff_edit_done.php:0 /home/ubuntu/workspace/staff_edit_done.php:27: string(0) "" 修正しました。
ソースコードは下記の通りです。
まず、staff_edit_check.php
<?php ini_set("display_errors", On); error_reporting(E_ALL); require 'lib/functions.php'; session_start(); //変数初期化 $name = ""; $pass = ""; $pass2 = ""; $token = ""; if($_SERVER["REQUEST_METHOD"] == "POST"){ //トークンをcheck if(isset($_POST['token']) && isset($_SESSION['token'])){ $token = $_POST['token']; if($token != $_SESSION['token']){ die('不正アクセスですが発生!'); } }else{ die('操作が間違っています。最初からやり直してください。'); } //変数にpostされたデータを代入 $staffcode = isset($_POST['staffcode']) ? $_POST['staffcode'] : ''; $name = isset($_POST['name']) ? $_POST['name'] : ''; $pass = isset($_POST['pass']) ? $_POST['pass'] : ''; $pass2 = isset($_POST['pass2']) ? $_POST['pass2'] : ''; $error = []; //nameチェック if(trim($name) == ''){ $error[] = 'スタッフ名を入力してください'; }elseif(mb_strlen($name) > 100){ $error[] = 'スタッフ名を100文字以内にご入力ください。'; } //passチェック if(trim($pass) == ''){ $error[] = 'パスワードを入力してください。'; }elseif($pass != $pass2){ $error[] = 'パスワードが一致しません。'; } //postされたデータ&エラーメッセージをセッションに保存 $_SESSION['error'] = $error; //error数の確認 if(count($error) > 0){ header('HTTP/1.1 303 See Other'); header('Location: ./staff_edit.php'); //確認画面を表示 }else{ require 'header.php'; ?> <div class="staff_add"> <p>スタッフ追加</p> <form action="staff_edit_done.php" method="post"> <p>スタッフ名</p> <p><?php echo h($name); ?></p> <p>パスワード</p> <p><?php echo md5(h($pass)); ?></p> <p>パスワード確認</p> <p><?php echo md5(h($pass2)); ?></p> <div> <input type="button" onclick="history.back()" value="戻る"> <input type="hidden" name="staffcode" value="<?php echo h($staffcode); ?>"> <input type="hidden" name="token" value="<?php echo h($token); ?>"> <input type="submit" value="確認"> </div> </form> </div> <?php } } require 'footer.php';
次、staff_edit_done.php
<?php ini_set("display_errors", On); error_reporting(E_ALL); require 'lib/functions.php'; session_start(); require 'header.php'; //トークンをcheck if(isset($_POST['token']) && isset($_SESSION['token'])){ $token = $_POST['token']; if($token != $_SESSION['token']){ die('不正アクセスですが発生!'); } }else{ die('操作が間違っています。最初からやり直してください。'); } //DBへ接続 try{ //変数にsession変数を代入します if($_SERVER["REQUEST_METHOD"] == "POST"){ $staffcode = $_POST['staffcode']; $name = $_POST['name']; $pass = $_POST['pass']; var_dump($staffcode); } $pdo = new PDO('mysql:host=localhost;dbname=shop;charset=utf8', 'root', ''); $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); $sql = 'update mst_staff set name=?,password=? where code=?'; $staff = $pdo->prepare($sql); // $staff->bindValue(1, $name); // $staff->bindValue(2, $pass); // $staff->bindValue(3, $staffcode); $data[] = $name; $data[] = $pass; $data[] = $staffcode; $staff->execute($data); $pdo = null; echo $name . '修正しました。'; }catch(Exception $e){ die('接続エラー:' . $e->getMessage()); } require 'footer.php';
何卒、よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー