// セッション開始 session_start(); $db['host'] = "localhost"; // DBサーバのURL $db['user'] = "root"; // ユーザー名 $db['pass'] = ""; // ユーザー名のパスワード $db['dbname'] = "test"; // データベース名 // エラーメッセージ、登録完了メッセージの初期化 $errorMessage = ""; $signUpMessage = ""; // ログインボタンが押された場合 if (isset($_POST["signUp"])) { // 1. ユーザIDの入力チェック if (empty($_POST["username"])) { // 値が空のとき $errorMessage = 'ユーザーIDが未入力です。'; } else if (empty($_POST["mail"])) { $errorMessage = 'メールアドレスが未入力です。'; } else if (empty($_POST["password"])) { $errorMessage = 'パスワードが未入力です。'; } else if (empty($_POST["password2"])) { $errorMessage = 'パスワードが未入力です。'; } if (!empty($_POST["username"]) && !empty($_POST["mail"]) && !empty($_POST["password"]) && !empty($_POST["password2"]) && $_POST["password"] === $_POST["password2"]) { // 入力したユーザIDとパスワードを格納 $username = $_POST["username"]; $mail = $_POST["mail"]; $password = $_POST["password"]; // 2. ユーザIDとパスワードが入力されていたら認証する $dsn = sprintf('mysql: host=%s; dbname=%s; charset=utf8', $db['host'], $db['dbname']); // 3. エラー処理 try { $pdo = new PDO($dsn, $db['user'], $db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION)); $stmt = $pdo->prepare("INSERT INTO sample(name, email, password, created) VALUES (?, ?, ?, now())"); $stmt->execute(array($username, $mail, password_hash($password, PASSWORD_DEFAULT))); // パスワードのハッシュ化を行う(今回は文字列のみなのでbindValue(変数の内容が変わらない)を使用せず、直接excuteに渡しても問題ない) $userid = $pdo->lastinsertid(); // 登録した(DB側でauto_incrementした)IDを$useridに入れる $signUpMessage = '登録が完了しました。あなたの登録IDは '. $userid. ' です。';//パスワードは '. $password. ' です。'; // ログイン時に使用するIDとパスワード } catch (PDOException $e) { $errorMessage = 'データベースエラー'; // $e->getMessage() でエラー内容を参照可能(デバッグ時のみ表示) //echo $e->getMessage(); } } else if($_POST["password"] != $_POST["password2"]) { $errorMessage = 'パスワードに誤りがあります。'; } }
// セッション開始 session_start(); $db['host'] = "localhost"; // DBサーバのURL $db['user'] = "root"; // ユーザー名 $db['pass'] = ""; // ユーザー名のパスワード $db['dbname'] = "test"; // データベース名 // エラーメッセージの初期化 $errorMessage = ""; // ログインボタンが押された場合 if (isset($_POST["login"])) { // 1. ユーザIDの入力チェック if (empty($_POST["userid"])) { // emptyは値が空のとき $errorMessage = 'ユーザーIDが未入力です。'; } else if (empty($_POST["password"])) { $errorMessage = 'パスワードが未入力です。'; } if (!empty($_POST["userid"]) && !empty($_POST["password"])) { // 入力したユーザIDを格納 $userid = $_POST["userid"]; // 2. ユーザIDとパスワードが入力されていたら認証する $dsn = sprintf('mysql: host=%s; dbname=%s; charset=utf8', $db['host'], $db['dbname']); // 3. エラー処理 try { $pdo = new PDO($dsn, $db['user'], $db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION)); $stmt = $pdo->prepare('SELECT * FROM sample WHERE name = ?'); $stmt->execute(array($userid)); $password = $_POST["password"]; if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { if (password_verify($password, $row['password'])) { session_regenerate_id(true); // 入力したIDのユーザー名を取得 $id = $row['id']; $sql = "SELECT * FROM sample WHERE id = $id"; //入力したIDからユーザー名を取得 $stmt = $pdo->query($sql); foreach ($stmt as $row) { $row['name']; // ユーザー名 } $_SESSION["NAME"] = $row['name']; header("Location: Main.php"); // メイン画面へ遷移 exit(); // 処理終了 } else { // 認証失敗 $errorMessage = 'ユーザーIDあるいはパスワードに誤りがあります。'; } } else { // 4. 認証成功なら、セッションIDを新規に発行する // 該当データなし $errorMessage = 'ユーザーIDあるいはパスワードに誤りがあります。'; } } catch (PDOException $e) { $errorMessage = 'データベースエラー'; //$errorMessage = $sql; // $e->getMessage() でエラー内容を参照可能(デバッグ時のみ表示) // echo $e->getMessage(); } } }
session_start(); // ログイン状態チェック if (!isset($_SESSION["NAME"])) { header("Location: Logout.php"); exit; }
session_start(); if (isset($_SESSION["NAME"])) { $errorMessage = "ログアウトしました。"; } else { $errorMessage = "セッションがタイムアウトしました。"; } // セッションの変数のクリア $_SESSION = array(); // セッションクリア @session_destroy();