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するようなフォーム) -->
次回
ログイン関連書きます