出力されないとのことですが、
そもそもこのコードのエラー発生時の意図を質問者さんはどう理解しているのでしょうか。
なにかエラーが発生すると、
セッション変数に手がかりを残して、
即header()関数にてリダイレクト。
これじゃリダイレクトされたあと、
新規会員登録、ユーザー、パスワードの入力画面になるはず。
だけど、肝心のセッション変数の中身をチェックする箇所がどこにもないので、
どうやってデバッグするんでしょうね。
やっていただきたいことを列挙します。
1)
PHPのエラー表示設定について - Qiita
を参考に、display_errors=On と error_reporting=E_ALL を設定。
2)
そもそもデータベース接続が成功しているのかすら試していないのでは?
php
1<!DOCTYPE html>
2<html>
3<head>
4<meta charset="UTF-8">
5<title>データベース接続</title>
6</head>
7<body>
8<?php
9 /* データベース接続 */
10 try {
11 $dsn = 'mysql:dbname=' . DB_NAME . ';host=' . DB_HOST . ';charset=utf8mb4;port=8889';
12 $pdo = new PDO($dsn, DB_USER, DB_PASS);
13 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // SILENTじゃなく例外をスローできるようにしないと意味がない
14 echo "成功.";
15 } catch (PDOException $e) {
16 echo $e->getMessage();
17 //$_SESSION['register_message'] = 'データベース接続に失敗しました';
18 //header('Location:'.$_SERVER['PHP_SELF']);
19 //exit;
20 }
みたいなサンプルコードを実行して、成功.って表示されるかどうか。
PDO::ATTR_ERRMODE の指定は PDO::ERRMODE_EXCEPTION にして、
データベース処理は常にtry~catchで括ってください。
もしもなにかのコードのコピペだとすると、
このコードは大変粗悪です。
データベース処理で例外を捕まえられないということはデバッグすることを困難にします。
また、仮に自分のパソコンで動かしているとして、
実行環境でmysqlが動いているのでしょうか。
初期データベースの構築は終わっているのでしょうか。
動作環境についての説明が一切ないので、
サポートにつながるアドバイスもコレ以上できません。
(WindowsでXAMPP、MacでMAMPを使っている、などの具体的な実行環境の話を聞きたい。)
3)
POST送信があることの確認をしたあと、usernameやpasswordの存在チェックをしていない。
html出力しているフォームの通りに常にデータ受信できると思わず、
不正なデータが送り込まれる前提で設計してください。
なので、面倒でも if(!isset($_POST['username'])) { ~ }
などとして
データが送られてこない場合を想定したコードを書きます。