MySQLとphpを使って以下のコードで出来ます。
indexphp
1 <?php
2 // セッション開始
3 session_start();
4
5 $db['host'] = "localhost"; // DBサーバのURL
6 $db['user'] = "user"; // ユーザー名
7 $db['pass'] = "password"; // ユーザー名のパスワード
8 $db['dbname'] = "dbname"; // データベース名
9
10 // エラーメッセージの初期化
11 $errorMessage = "";
12
13 // ログインボタンが押された場合
14 if (isset($_POST["login"])) {
15 // 1. ユーザIDの入力チェック
16 if (empty($_POST["userid"])) { // emptyは値が空のとき
17 $errorMessage = 'ユーザーIDが未入力です。';
18 } else if (empty($_POST["password"])) {
19 $errorMessage = 'パスワードが未入力です。';
20 }
21
22 if (!empty($_POST["userid"]) && !empty($_POST["password"])) {
23 // 入力したユーザIDを格納
24 $userid = $_POST["userid"];
25
26 // 2. ユーザIDとパスワードが入力されていたら認証する
27 $dsn = sprintf('mysql: host=%s; dbname=%s; charset=utf8', $db['host'], $db['dbname']);
28
29 // 3. エラー処理
30 try {
31 $pdo = new PDO($dsn, $db['user'], $db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
32
33 $stmt = $pdo->prepare('SELECT * FROM userData WHERE name = ?');
34 $stmt->execute(array($userid));
35
36 $password = $_POST["password"];
37
38 if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
39 //ここ間違ってました。すみません。
40 if ($password == $row['password']) {
41 session_regenerate_id(true);
42
43 // 入力したIDのユーザー名を取得
44 $id = $row['id'];
45 $sql = "SELECT * FROM userData WHERE id = $id"; //入力したIDからユーザー名を取得
46 $stmt = $pdo->query($sql);
47 foreach ($stmt as $row) {
48 $row['name']; // ユーザー名
49 $row['link'];
50 }
51 $_SESSION["NAME"] = $row['name'];
52 //スペルミスをしていました。'rink'ではなく、'link'です。
53 header("Location:".$row['link']);
54 exit(); // 処理終了
55 } else {
56 // 認証失敗
57 $errorMessage = 'ユーザーIDあるいはパスワードに誤りがあります。';
58 }
59 } else {
60 // 4. 認証成功なら、セッションIDを新規に発行する
61 // 該当データなし
62 $errorMessage = 'ユーザーIDあるいはパスワードに誤りがあります。';
63 }
64 } catch (PDOException $e) {
65 $errorMessage = 'データベースエラー';
66 //$errorMessage = $sql;
67 // $e->getMessage() でエラー内容を参照可能(デバッグ時のみ表示)
68 // echo $e->getMessage();
69 }
70 }
71 }
72 ?>
73
74 <!doctype html>
75 <html>
76 <head>
77 <meta charset="UTF-8">
78 <title>ログイン</title>
79 </head>
80 <body>
81
82 <h1>ログイン画面</h1>
83 <form id="loginForm" name="loginForm" action="" method="POST">
84 <fieldset>
85 <legend>ログインフォーム</legend>
86 <div><font color="#ff0000"><?php echo htmlspecialchars($errorMessage, ENT_QUOTES); ?></font></div>
87 <label for="userid">ユーザーID</label><input type="text" id="userid" name="userid" placeholder="ユーザーIDを入力" value="<?php if (!empty($_POST["userid"])) {echo htmlspecialchars($_POST["userid"], ENT_QUOTES);} ?>">
88 <br>
89 <label for="password">パスワード</label><input type="password" id="password" name="password" value="" placeholder="パスワードを入力">
90 <br>
91 <input type="submit" id="login" name="login" value="ログイン">
92 </fieldset>
93 </form>
94
95 </body>
96 </html>
sinki.php
1 <?php
2 // セッション開始
3 session_start();
4
5 $db['host'] = "localhost"; // DBサーバのURL
6 $db['user'] = "hogeUser"; // ユーザー名
7 $db['pass'] = "hogehoge"; // ユーザー名のパスワード
8 $db['dbname'] = "loginManagement"; // データベース名
9
10 // エラーメッセージ、登録完了メッセージの初期化
11 $errorMessage = "";
12 $signUpMessage = "";
13
14 // ログインボタンが押された場合
15 if (isset($_POST["signUp"])) {
16 // 1. ユーザIDの入力チェック
17 if (empty($_POST["username"])) { // 値が空のとき
18 $errorMessage = 'ユーザーIDが未入力です。';
19 } else if (empty($_POST["password"])) {
20 $errorMessage = 'パスワードが未入力です。';
21 } else if (empty($_POST["URL"])) {
22 $errorMessage = 'URLが未入力です。';
23 }
24
25 if (!empty($_POST["username"]) && !empty($_POST["password"]) && !empty($_POST["URL"])) {
26 // 入力したユーザIDとパスワードを格納
27 $username = $_POST["username"];
28 $password = $_POST["password"];
29 $URL = $_POST["URL"];
30
31 // 2. ユーザIDとパスワードが入力されていたら認証する
32 $dsn = sprintf('mysql: host=%s; dbname=%s; charset=utf8', $db['host'], $db['dbname']);
33
34 // 3. エラー処理
35 try {
36 $pdo = new PDO($dsn, $db['user'], $db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
37
38 $stmt = $pdo->prepare("INSERT INTO userData(name, password, link) VALUES (?, ?, ?)");
39
40 $stmt->execute(array($username, $password, $URL));
41 $userid = $pdo->lastinsertid(); // 登録した(DB側でauto_incrementした)IDを$useridに入れる
42
43 $signUpMessage = '登録が完了しました。あなたの登録IDは '. $userid. ' です。パスワードは '. $password. ' です。'; // ログイン時に使用するIDとパスワード
44 } catch (PDOException $e) {
45 $errorMessage = 'データベースエラー';
46 // $e->getMessage() でエラー内容を参照可能(デバッグ時のみ表示)
47 // echo $e->getMessage();
48 }
49 }
50 }
51 ?>
52
53 <!doctype html>
54 <html>
55 <head>
56 <meta charset="UTF-8">
57 <title>新規登録</title>
58 </head>
59 <body>
60 <h1>新規登録画面</h1>
61 <form id="loginForm" name="loginForm" action="" method="POST">
62 <fieldset>
63 <legend>新規登録フォーム</legend>
64 <div><font color="#ff0000"><?php echo htmlspecialchars($errorMessage, ENT_QUOTES); ?></font></div>
65 <div><font color="#0000ff"><?php echo htmlspecialchars($signUpMessage, ENT_QUOTES); ?></font></div>
66 <label for="username">ユーザー名</label><input type="text" id="username" name="username" placeholder="ユーザー名を入力" value="<?php if (!empty($_POST["username"])) {echo htmlspecialchars($_POST["username"], ENT_QUOTES);} ?>">
67 <br>
68 <label for="password">パスワード</label><input type="password" id="password" name="password" value="" placeholder="パスワードを入力">
69 <br>
70 <label for="URL">URL</label><input type="text" id="URL" name="URL" value="" placeholder="URLを入力">
71 <br>
72 <input type="submit" id="signUp" name="signUp" value="新規登録">
73 </fieldset>
74 </form>
75
76 </body>
77 </html>