PHPのデータベース追加完了画面を表示させたい

実現したいこと

〇〇を追加しました。
「戻る」

という画面に移動したい。

前提

「気づけばプロ並みphp 改訂版」という教材で、商品登録ページを作成しています。

発生している問題・エラーメッセージ

教材通りに入力しているが、catch (Exception $e)側の以下の表示が出てしまう。

ただいま障害により大変ご迷惑をお掛けしております。

該当のソースコード

追加完了ページ

pro_add_done.php

1<!DOCTYPE html> 2<html> 3<head> 4<meta charset="UTF-8"> 5<title> ろくまる農園 </title> 6</head> 7<body> 8 9<?php 10 11try 12{ 13 14$pro_name = $_POST['name']; 15$pro_price = $_POST['price']; 16 17$pro_name = htmlspecialchars($pro_name,ENT_QUOTES,'UTF-8'); 18$pro_price = htmlspecialchars($pro_price,ENT_QUOTES,'UTF-8'); 19 20$dsn = 'mysql:dbname=shop;host=localhost;charset=utf8'; 21$user = 'root'; 22$password = ''; 23$dbh = new PDO($dsn, $user, $password); 24$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 25 26$sql = 'INSERT INTO mst_product(name,price) VALUES (?,?)'; 27$stmt = $dbh->prepare($sql); 28$data[] = $pro_name; 29$data[] = $pro_price; 30$stmt->execute($data); 31 32$dbh = null; 33 34print $pro_name; 35print 'を追加しました。<br/>'; 36 37} 38catch (Exception $e) 39{ 40print'ただいま障害により大変ご迷惑をお掛けしております。'; 41exit(); 42} 43 44?> 45 46<a href="pro_list.php"> 戻る </a> 47 48</body> 49</html> 50

経緯・試したこと

上記は「商品登録」ですが、
ファイル名もproの部分がstaffになっただけの「スタッフ登録」と同じ仕様です。
「スタッフ登録」では上記のコードでもうまく動作したのですが、
「商品登録」の場合はなぜかうまく動作しない

①スタッフ登録(staff)ページを作成
■登録ページ

staff_add.php

1<!DOCTYPE html> 2<html> 3<head> 4<meta charset="UTF-8"> 5<title> ろくまる農園 </title> 6</head> 7<body> 8 スタッフ追加<br/> 9 <br/> 10 <form method="post" action="staff_add_check.php"> 11 スタッフ名を入力れてください。<br/> 12 <input type="text" name="name" style="width: 200px;"><br/> 13 パスワードを入力してください。<br/> 14 <input type="password" name="pass" style="width: 100px;"><br/> 15 パスワードをもう1度入力してください。<br/> 16 <input type="password" name="pass2" style="width: 100px;"><br/> 17 <br/> 18 <input type="button" onclick="history.back()" value="戻る"> 19 <input type="submit" value="OK"> 20 </form> 21</body> 22</html>

■登録確認ページ

staff_add_check.php

1<!DOCTYPE html> 2<html> 3<head> 4<meta charset="UTF-8"> 5<title> ろくまる農園 </title> 6</head> 7<body> 8 9<?php 10 11$staff_name=$_POST['name']; 12$staff_pass=$_POST['pass']; 13$staff_pass2=$_POST['pass2']; 14 15$staff_name= htmlspecialchars($staff_name,ENT_QUOTES,'UTF-8'); 16$staff_pass= htmlspecialchars($staff_pass,ENT_QUOTES,'UTF-8'); 17$staff_pass2= htmlspecialchars($staff_pass2,ENT_QUOTES,'UTF-8'); 18 19if($staff_name=='') 20{ 21 print'スタッフ名が入力されていません。<br />'; 22} 23else 24{ 25print'スタッフ名:'; 26print $staff_name; 27print'<br />'; 28} 29 30if($staff_pass=='') 31{ 32print'パスワードが入力されていません。<br />'; 33} 34 35if($staff_pass!=$staff_pass2) 36{ 37print'パスワードが一致しません。<br />'; 38} 39 40if($staff_name==''||$staff_pass==''||$staff_pass!=$staff_pass2) 41{ 42print'<form>'; 43print'<input type="button" onclick="history.back()" value="戻る">'; 44print'</form>'; 45} 46else 47{ 48$staff_pass=md5($staff_pass); 49print'<form method="post" action="staff_add_done.php">'; 50print'<input type="hidden" name="name" value="'.$staff_name.'">'; 51print'<input type="hidden" name="pass" value="'.$staff_pass.'">'; 52print'<br />'; 53print'<input type="button" onclick="history.back()" value="戻る">'; 54print'<input type="submit" value="OK">'; 55print'</form>'; 56} 57 58?> 59 60</body> 61</html>

■登録完了ページ

staff_add_done.php

1<!DOCTYPE html> 2<html> 3<head> 4<meta charset="UTF-8"> 5<title> ろくまる農園 </title> 6</head> 7<body> 8 9<?php 10 11try 12{ 13 14$staff_name = $_POST['name']; 15$staff_pass = $_POST['pass']; 16 17$staff_name = htmlspecialchars($staff_name,ENT_QUOTES,'UTF-8'); 18$staff_pass = htmlspecialchars($staff_pass,ENT_QUOTES,'UTF-8'); 19 20$dsn = 'mysql:dbname=shop;host=localhost;charset=utf8'; 21$user = 'root'; 22$password = ''; 23$dbh = new PDO($dsn, $user, $password); 24$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 25 26$sql = 'INSERT INTO mst_staff(name,password) VALUES (?,?)'; 27$stmt = $dbh->prepare($sql); 28$data[] = $staff_name; 29$data[] = $staff_pass; 30$stmt->execute($data); 31 32$dbh = null; 33 34print $staff_name; 35print 'さんを追加しました。<br/>'; 36 37} 38catch (Exception $e) 39{ 40print'ただいま障害により大変ご迷惑をお掛けしております。'; 41exit(); 42} 43 44?> 45 46<a href="staff_list.php">戻る</a> 47 48</body> 49</html>

②上記の応用で商品(pro)登録ページを作成
■登録ページ

pro_add.php

1<!DOCTYPE html> 2<html> 3<head> 4<meta charset="UTF-8"> 5<title> ろくまる農園 </title> 6</head> 7<body> 8 9 商品追加<br/> 10 <br/> 11 <form method="post" action="pro_add_check.php"> 12 商品名を入力れてください。<br/> 13 <input type="text" name="name" style="width: 200px;"><br/> 14 価格を入力してください。<br/> 15 <input type="text" name="price" style="width: 50px;"><br/> 16 <br/> 17 <input type="button" onclick="history.back()" value="戻る"> 18 <input type="submit" value="OK"> 19 </form> 20 21</body> 22</html>

■追加確認ページ

pro_add_check.php

1<!DOCTYPE html> 2<html> 3<head> 4<meta charset="UTF-8"> 5<title> ろくまる農園 </title> 6</head> 7<body> 8 9<?php 10 11$pro_name=$_POST['name']; 12$pro_price=$_POST['price']; 13 14$pro_name= htmlspecialchars($pro_name,ENT_QUOTES,'UTF-8'); 15$pro_price= htmlspecialchars($pro_price,ENT_QUOTES,'UTF-8'); 16 17if($pro_name=='') 18{ 19 print'商品名が入力されていません。<br />'; 20} 21else 22{ 23 print'商品名:'; 24 print $pro_name; 25 print'<br />'; 26} 27 28if(preg_match('/\A[0-9]+\z/',$pro_price)==0) 29{ 30 print'価格をきちんと入力してください。<br />'; 31} 32else 33{ 34 print'価格:'; 35 print $pro_price; 36 print'円 <br />'; 37} 38 39if($pro_name==''||preg_match('/\A[0-9]+\z/',$pro_price)==0) 40{ 41 print'<form>'; 42 print'<input type="button" onclick="history.back()" value="戻る">'; 43 print'</form>'; 44} 45else 46{ 47 print'上記の商品を追加します。<br/>'; 48 print'<form method="post" action="pro_add_done.php">'; 49 print'<input type="hidden" name="name" value="'.$pro_name.'">'; 50 print'<input type="hidden" name="price" value="'.$pro_price.'">'; 51 print'<br />'; 52 print'<input type="button" onclick="history.back()" value="戻る">'; 53 print'<input type="submit" value="OK">'; 54 print'</form>'; 55} 56 57?> 58 59</body> 60</html>

入力ミスがないか何度も確認したのですが、
間違いも見当たりませんでした。

プログラムは同じはずなのに、
なぜ「商品登録」だけうまく動作しないのでしょうか。

補足情報(FW/ツールのバージョンなど)

PC:M1Mac
サーバー:XAMPP for OS X 8.2.4

追記

イメージ説明

コメントを投稿

0 コメント