2回目の投稿です。
ローカル開発環境で簡単なログイン機能をサイトを参考にしながら作成しました。
上記の様なイメージでログアウトしても前の入力した値を取得し、
Sign In!ボタンを押すだけでログインできるような機能を作成したいです。
プログラマーとしてまだまだ駆け出しなので、何が必要かなども
よくわかっていません。
iphoneで上記の件を実行したいと考えてます。
ご教授のほどよろしくお願いいたします。
SingUp.php
PHP
1<?php 2 3function h($s){ 4 return htmlspecialchars($s, ENT_QUOTES, 'utf-8'); 5} 6 7session_start(); 8//ログイン済みの場合 9if (isset($_SESSION['EMAIL'])) { 10 echo 'ようこそ' . h($_SESSION['EMAIL']) . "さん<br>"; 11 echo "<a href='/logout.php'>ログアウトはこちら。</a>"; 12 exit; 13} 14 15 ?> 16 17<!DOCTYPE html> 18<html lang="ja"> 19 <head> 20 <meta charset="utf-8"> 21 <title>Login</title> 22 </head> 23 <body> 24 <h1>ようこそ、ログインしてください。</h1> 25 <form action="login.php" method="post"> 26 <label for="email">email</label> 27 <input type="email" name="email"> 28 <label for="password">password</label> 29 <input type="password" name="password"> 30 <button type="submit">Sign In!</button> 31 </form> 32 <h1>初めての方はこちら</h1> 33 <form action="signUp.php" method="post"> 34 <label for="email">email</label> 35 <input type="email" name="email"> 36 <label for="password">password</label> 37 <input type="password" name="password"> 38 <button type="submit">Sign Up!</button> 39 <p>※パスワードは半角英数字をそれぞれ1文字以上含んだ、8文字以上で設定してください。</p> 40 </form> 41 42<?php 43//データベースへ接続、テーブルがない場合は作成 44try { 45 $pdo = new PDO(DSN, DB_USER, DB_PASS); 46 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 47 $pdo->exec("create table if not exists userDeta( 48 id int not null auto_increment primary key, 49 email varchar(255), 50 password varchar(255), 51 created timestamp not null default current_timestamp 52 )"); 53} catch (Exception $e) { 54 echo $e->getMessage() . PHP_EOL; 55} 56//POSTのValidate。 57if (!$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { 58 echo '入力された値が不正です。'; 59 return false; 60} 61//パスワードの正規表現 62if (preg_match('/\A(?=.*?[a-z])(?=.*?\d)[a-z\d]{8,100}+\z/i', $_POST['password'])) { 63 $password = password_hash($_POST['password'], PASSWORD_DEFAULT); 64} else { 65 echo 'パスワードは半角英数字をそれぞれ1文字以上含んだ8文字以上で設定してください。'; 66 return false;› 67} 68//登録処理 69try { 70 $stmt = $pdo->prepare("insert into userDeta(email, password) value(?, ?)"); 71 $stmt->execute([$email, $password]); 72 echo '登録完了'; 73} catch (\Exception $e) { 74 echo '登録済みのメールアドレスです。'; 75} 76 77?> 78 79 </body> 80</html> 81
login.php
php
1<?php 2 3session_start(); 4//POSTのvalidate 5if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { 6 echo '入力された値が不正です。'; 7 return false; 8} 9//DB内でPOSTされたメールアドレスを検索 10try { 11 $pdo = new PDO(DSN, DB_USER, DB_PASS); 12 $stmt = $pdo->prepare('select * from userDeta where email = ?'); 13 $stmt->execute([$_POST['email']]); 14 $row = $stmt->fetch(PDO::FETCH_ASSOC); 15} catch (\Exception $e) { 16 echo $e->getMessage() . PHP_EOL; 17} 18//emailがDB内に存在しているか確認 19if (!isset($row['email'])) { 20 echo 'メールアドレス又はパスワードが間違っています。bbbb'; 21 return false; 22} 23//パスワード確認後sessionにメールアドレスを渡す 24if (password_verify($_POST['password'], $row['password'])) { 25 session_regenerate_id(true); //session_idを新しく生成し、置き換える 26 $_SESSION['EMAIL'] = $row['email']; 27 echo 'ログインしました'; 28} else { 29 echo 'メールアドレス又はパスワードが間違っています。aaaa'; 30 return false; 31} 32 33?>
logout.php
php
1<?php 2session_start(); 3 4if (isset($_SESSION["EMAIL"])) { 5 echo 'Logoutしました。'; 6} else { 7 echo 'SessionがTimeoutしました。'; 8} 9//セッション変数のクリア 10$_SESSION = array(); 11//セッションクッキーも削除 12if (ini_get("session.use_cookies")) { 13 $params = session_get_cookie_params(); 14 setcookie(session_name(), '', time() - 42000, 15 $params["path"], $params["domain"], 16 $params["secure"], $params["httponly"] 17 ); 18} 19//セッションクリア 20@session_destroy(); 21
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/30 02:58
退会済みユーザー
2018/07/30 03:18
2018/07/30 03:39
退会済みユーザー
2018/07/30 03:42
2018/07/30 03:48
退会済みユーザー
2018/07/30 06:34
2018/07/30 06:44