前提・実現したいこと
ユーザの新規登録を実装したい
PHPで自作アプリを作成しています。
そこで、ユーザの新規登録を実装したいのですが、エラーが出て行き詰まっています。
発生している問題・エラーメッセージ
Fatal error: Uncaught Error: Call to a member function prepare() on null in /Applications/MAMP/htdocs/アプリ名/Models/Company.php:17 Stack trace: #0 /Applications/MAMP/htdocs/アプリ名ス/Views/Companies/register/signup_form.php(48): Company::createCompany('\xE6\xA0\xAA\xE5\xBC\x8F\xE4\xBC\x9A\xE7\xA4\xBE\xE3\x83\xA9...') #1 /Applications/MAMP/htdocs/アプリ名/public/index.php(8): require_once('/Applications/M...') #2 {main} thrown in /Applications/MAMP/htdocs/アプリ名/Models/Company.php on line 17
該当のソースコード
データベース接続(Db.php)
<?php require_once(ROOT_PATH .'/env.php'); ini_set('display_errors', "On"); // 接続チェックOK function connect() { $host = DB_HOST; $db = DB_NAME; $user = DB_USER; $pass = DB_PASS; $dsn = "mysql:host=$host;dbname=$db;charset=utf8mb4"; try { $pdo = new PDO($dsn, $user, $pass, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ]); } catch(PDOException $e) { echo "接続失敗です!". $e->getMessage(); exit(); } }
ユーザーの登録ロジック(Company.php)
<?php require_once(ROOT_PATH .'/Models/Db.php'); class Company { /** * ユーザの登録 * @param array $userDate * @return bool $result */ public static function createCompany($company_name) { $result = false; $sql = 'INSERT INTO companies (company_name) VALUES (:company_name)'; try { $stmt = connect()->prepare($sql);←エラーで指摘されている17行目 $stmt->bindValue(':company_name', $company_name, PDO::PARAM_STR); $result = $stmt->execute(); return $result; } catch(\Exception $e) { return $result; } } }
signup_form.php(新規登録画面)
会社新規登録画面 <a href="register.php">新規登録完了</a> <?php require_once(ROOT_PATH .'/Models/Company.php'); ini_set('display_errors', "On"); $err = []; if($_SERVER['REQUEST_METHOD'] === 'POST'){ $company_name = filter_input(INPUT_POST, 'company_name'); $company_url = filter_input(INPUT_POST, 'company_url'); $company_tel = filter_input(INPUT_POST, 'company_tel'); $company_postal = filter_input(INPUT_POST, 'company_postal'); $company_adress = filter_input(INPUT_POST, 'company_adress'); $company_email = filter_input(INPUT_POST, 'company_email'); $company_pass = filter_input(INPUT_POST, 'company_pass'); $company_passconf = filter_input(INPUT_POST, 'company_passconf'); if(empty($company_name)) { $err[] = "会社名は必須です。"; } // if(empty($company_url)) { // $err[] = "会社のURLは必須です"; // } // if(empty($company_tel) || !preg_match("/^[0-9]+$/", $company_tel)) { // $err[] = "会社の電話番号は必須です。また半角数字で入力してください。"; // } // if(empty($company_postal) || !preg_match("/^[0-9]+$/", $company_postal)) { // $err[] = "会社の郵便番号は必須です。また半角数字で入力してください。"; // } // if(empty($company_adress)) { // $err[] = "会社の住所は必須です"; // } // if(empty($company_email) || !filter_var($company_email, FILTER_VALIDATE_EMAIL)) { // $err[] = "メールアドレスは必須です。また正しいメールアドレスで入力してください。"; // } // if(!preg_match("/^(?=.*?[a-z])(?=.*?\d)[a-z\d]{8,20}$/i", $company_pass)) { // $err[] = "パスワードは半角英数字8文字以上20文字以内で入力して下さい。"; // } // if($company_pass !== $company_passconf) { // $err[] = "パスワードが一致しません。もう一度確認してください。"; // } if(count($err) === 0) { // ユーザを登録する処理 $hasCreated = Company::createCompany($company_name); header('Location: ../register.php'); if(!$hasCreated) { $err[] = "登録に失敗しました!"; } } }
試したこと
データベースの接続確認→OK
スペル確認→問題なさそう
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/04/12 15:06