[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
確認しておいた方がいい点がすっごくある。ノートを取ったりエラーで頭が固まってるあいだに説明があったんだろうが、構造がわかってないところが多すぎる。
あと何と馬鹿にされようとコードにコメントは付けるように。その時わかっても後でわからないんじゃ意味がない。
index.php
<?php
session_start();
$msg="";
//初めて開く場合と認証しようと思って開く場合と2種
if(!empty($_POST["u_id"]) && !empty($_POST["pass"])){ //postされたu_idもpassもemptyでない
if(!empty($_POST["ticket"]) && $_POST["ticket"]==$_SESSION["ticket"]){ //このページ内でhiddenで発行されたticketを持っている、かつpostされたticketとsession変数のticketが一致する
//認証開始
$user="root";
$dbpass="";
$host="localhost";
$dbname="auth";
$dsn="mysql:host={$host};dbname={$dbname};charset=utf8";
$pdo=new PDO($dsn, $user, $dbpass);
$sql = "SELECT * FROM users WHERE u_id=:u_id"; //dbのu_idと、"あるもの"が一致するものをひっぱってほしい。あるものについては追って連絡するから。
$stmt = $pdo->prepare($sql);
$stmt->bindValue(":u_id",$_POST["u_id"],PDO::PARAM_STR); //"あるもの"とはユーザーが入力しpostされた$_POST["u_id"]である。
//$stmt->bindValue(":pass",$_POST["pass"],PDO::PARAM_STR);
$stmt->execute();
$row=$stmt->fetch(PDO::FETCH_ASSOC);
if(password_verify($_POST["pass"],$row["pass"])){
//ログイン成功
//$name=$row["nickname"];
$_SESSION["login"]=true;
$_SESSION["name"]=$row["nickname"];
header("Location: mypage.php");
exit();
}else{
//ログイン失敗
$msg="ログインできませんよ";
$_SESSION["login"]=false;
}
}
}
$ran=rand(100,999);
$salt="tekitounamoji";
$ticket=md5($salt . $ran);
$_SESSION["ticket"] = $ticket;
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ログイン認証</title>
<link rel="stylesheet" href="auth.css">
</head>
<body>
<div id="container">
<form method="post" action=""> //このpost先はこのページ本体でよいのか?
<table>
<tr>
<th><label for="u_id">ユーザー名</th>
<td><input type="text" name="u_id" id="u_id"></td>
</tr>
<tr>
<th><label for="pass">パスワード</label></th>
<td><input type="password" name="pass" id="pass"></td>
</tr>
</table>
<p><button type="submit">認証</button></p>
<input type="hidden" name="ticket" value="<?php echo $ticket; ?>">
</form>
<p><?php echo $msg; ?></p>
</div>
</body>
</html>
mypage.php
<?php
session_start();
if(empty($_SESSION["login"])){
header("Location:index.php"); //ログイン画面に強制移動
exit();
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>マイページ</title>
<link rel="stylesheet" href="auth.css">
</head>
<body>
<div id="container">
<h1 class="hoge"><p>ようこそ<?php echo $_SESSION["name"]; ?>さん!</p></h1>
<p>会員じゃないとみられないクエの絵</p>
<p>あぶらぼうず</p>
<p>たこ</p>
</div>
</body>
</html>
auth.css
body{
background:#eff;
background-image:url("../img/fish_kue2.png");
background-repeat:no-repeat;
background-position: right;
}
#container{
width: 80%;
margin: auto;
}
table{
border: solid 1px #333;
border collapse: collapse;
background:#fff;
}
th,td{
padding: 0.2rem 0.5rem;
text-align: left;
border: solid 1px #333;
}
th{
background:#cff;
}
.hoge{
background-color:#fff;
}