phpでログイン機能を作ってみようと思います。
最初は会員登録ページからです。
データベースのカラムは
ID | passwd | |
ただのID | メールアドレス | パスワード |
データベース接続にはPDOを使用します。
登録ページのhtmlは
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>会員登録</title>
</head>
<body>
<p>会員登録ページ</p>
<form action="./comp.php" method="POST">
<div>
<label>
<input type="text" name="name">ニックネーム
</label>
</div>
<div>
<label>
<input type="text" name="passwd">パスワード
</label>
</div>
<input type="submit" value="登録する">
</forn>
</body>
</html>
情報は全てPOSTで送信します。
htmlなのでデータベースには保存されません。
<?php
include_once('./config.php');
if(isset($_POST['mail'], $_POST['passwd'], $_POST['name'])){
$mail = $_POST['mail'];
$passwd = $_POST['passwd'];
$passwdhash = password_hash($passwd, PASSWORD_DEFAULT);
$pdo = new PDO('mysql:dbname=' . $databasename . ';host=' . $host . ';' , $user, $password);
$sql = "INSERT INTO user (mail, passwd) VALUES (:mail, :passwd)";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':mail', $mail);
$stmt->bindValue(':passwd', $passwdhash);
$comp = $stmt->execute();
if($comp){
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>登録完了</title>
</head>
<body>
<p>アカウントを登録に成功しました。</p>
<p><a href="./login.php">ログイン</a>する</p>
</body>
</html>
<?php
}else{
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>登録失敗</title>
</head>
<body>
<p>登録に失敗しました。</p>
<p>最初からやり直してください。</p>
</body>
</html>
<?php
}
}else{
http_response_code(400);
}
ちょっとした解説
$_POST['mail']
phpは$_POSTでPOSTで送信された情報を受け取ります。
password_hashでパスワードを暗号化します。
パスワードを平文で保存するのもいいですがデータベースを抜き取られると平文なのですぐにバレますが暗号文なのでバレる確率は減ります。
データベースを扱うのでプレースホルダは必須です。
もし
$sql = "INSERT INTO user (mail, passwd) VALUES ($mail, $passwd)";
のように変数でセットするとSQLインジェクションが発生します。
絶対に変数でセットしないでください。
config.php内には
$host = '';
$databasename = '';
$user = '';
$password = '';
データベースに接続するための情報が格納しています。
コメントを残す