PHP

Webから取得したデータでサービスを作ってみる(Part2)

JavaScriptで要ログインサイトのデータ収集サービスを作ってみるでデータ収集の機構を作ったので、それを用いたサイトを作ることにしました。(某音ゲーのスコアツールです。)

(作ったサイトはここになります)

やることリスト

  • 取得したデータを管理するDBに入れる
  • DBに入れたデータを見せる
  • ユーザ登録・ログイン・ログアウトをしてユーザごとに管理する

ユーザ登録

  • ログイン済みユーザはログイン後のメインページに遷移させる
  • ユーザ・パスワードを登録させる
    • パスワードはハッシュ化して登録(password_hashする)
    • 重複ユーザを許さない
addUser.php
<?php
session_start();
// 既にログインしている場合にはメインページに遷移
if (isset($_SESSION['XXXX'])) {
    header('Location: ShowData.php');
    exit;
}

$error = '';
// ログインボタンが押されたら
if (isset($_POST['signUp'])) {
    // user欄確認
    if (empty($_POST['username'])) {
        $error = 'ユーザーIDが未入力です。';
    }else if (empty($_POST['password'])) {  //パスワード確認
        $error = 'パスワードが未入力です。';
    }
    // どっちも入っている場合
    if (!empty($_POST['username']) && !empty($_POST['password'])) {
        $username = $_POST['username'];
        $password = $_POST['password'];
        $OuterREF = intval($_POST['OuterREF']);
        $pdo = CreatePDO();
        try{
            //------- DB確認----------
            // 登録作業+重複確認
            $res = SetUserData($pdo,$username,$password,$OuterREF);
            if($res == FALSE){
                $error = 'ユーザ名が重複しています';
            }else{
                $_SESSION['XXXX'] = $res;
                echo '<script>
                alert("登録が完了しました。");
                location.href="ShowData.php";
                </script>';
            }
        } catch(Exception $e){
            $error = $e->getMessage();
        }
    }
 }

// 登録+重複確認
function SetUserData($pdo,$userName,$password,$OuterREF){
    // 重複ユーザー名確認
    $SQL = '登録予定のユーザネームを含む件数のSQL';
    if($res = $pdo->query($SQL)){
        if($res->fetchColumn() > 0){
            // 同じ名前のユーザがいる
            return FALSE;
        }
    }
    // ユーザ数確認
    $SQL = 'SELECT COUNT(*) FROM  tableName';
    $allUser = 0;
    if($res = $pdo->query($SQL)){
        $allUser = $res->fetchColumn();
    }


    // ユーザ登録
    $stmt = $pdo->prepare('登録SQL');
    $stmt->bindParam(':UserName', $userName, PDO::PARAM_STR);
    // パスワードをハッシュ化して登録
    $stmt->bindParam(':pass',password_hash($password, PASSWORD_DEFAULT) , PDO::PARAM_STR);
    $stmt->execute();

    // UserID返却
    return sprintf('MSC%04d',$allUser);
}
?>
<!-- HTML省略(自身にPOSTするようなフォーム) -->

 次回

ログイン関連書きます