Как правильно написал Антон, пора знакомиться с таким понятием, как отладка.
Но дополним его ответ более практическими рекомендациями.
Во-первых, при создании соединения с БД, надо сказать ПДО, чтобы он сообщал об ошибках.
$this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
Во-вторых, временно, на период разработки, включить отображение ошибок РНР. Чтобы тупо увидеть, если произошла какая-то ошибка.
ini_set('display_errors', 1);
И в-третьих, начать собственно отладку.
Для начала убедившись, что РНР код в принципе запускается, и проблема в нем, а не в форме.
Для этого в самом начале action.php пишем большими буквами
die("пхп хотя бы запустился");
И если после нажатия на кнопку мы этот текст не увидели, то начинаем тупить в свою форму - а с чего она вообще должна что-то посылать в файл action.php (и попутно задаваться вопросом - а какое отношение наш вопрос имеет к
php и
sql?)?
Если форма отправляется аяксом, то смотрим ответ пхп в инструментах разработчика, вкладка Сеть.
Если обработку формы мы начали, то заезжаем внутрь условия
die("начали обработку формы");
И так далее, отслеживаем работу своего кода, выполняется ли он вообще, и содержат ли переменные нужные значения.
А в целом, конечно, код очень жестокий.
Вот прямо хочется спросить -
зачем здесь функция test_input?
зачем здесь try {}catch (){echo 'Error : '.$e-getMessage();}?
зачем class Auth extends Database?
почему showMessage - это часть класса Database? Ну вот серьёзно, каким местом вывод сообщения в браузер в виде HTML хоть как-то относится к работе с базой данных?
Чтобы сделать этот код минимально осмысленным, надо
выкинуть класс Database
в класс Auth добавить
public function __construct($pdo){
$this->conn = $pdo;
}
и выкинуть из него require_once 'config.php';
В config.php оставить только соединение с PDO
в action написать
require 'config.php';
$user = new Auth($pdo);
и выкинуть условие при регистрации, оставив только
$user->register($name,$email,$hpass);
$_SESSION['user'] = $email;
И тогда этот код станет минимально осмысленным