//tips
//基本情報理解
キャズム理論は新商品やサービウスに対する消費者の行動を5つの区別に分類したイノベータ理論を前提としており、イノベータ、アーリーアダプタ、アーリーマジョリティ、レイトマジョリティ、ラガードの分けられる。
その中でもアーリーアダプタからアーリーマジョリティの移行の間には大きな溝であるとされている。
技術のSカーブとは進歩過程を示したもので、最初は成果が上がらず、その後急速な進歩を見せ、成熟段階になると停滞するというもの。
フィルタバブルとは、webやsnsなどのネット利用で、個別にパーソナライズされた情報が提供され、それがフィルタの役目となり、自分好みの情報しか見えなくなるもの。
//pitch
今日はSquareのピッチを確認。既存の競合商品となるcardとの違いを示すvalue to userでの強みの強調や訴求ターゲットとそのように訴求していくが簡潔になっている。同業他社または今後参入が予測される企業との差別化を行い、なぜ今追加資金が必要なのかも明確にしている。
参考にすべき良作だった。
//unity/shopify
以前作成にしたphpカートのプロジェクトを引っ張り出して動作を確認していく。
Htmlで作成した名前とpassのフォームに入力したものをstaff_login_check.phpに飛ばす。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ログイン</title>
</head>
<body>
スタッフログイン<br/>
<form method="post" action="staff_login_check.php">
スタッフコード<br/>
<input type="text" name="code"><br/>
パスワード<br/>
<input type="password" name="pass"><br/>
<br/>
<input type="submit" value="ログイン"><br/>
</form>
</body>
</html>
staff_login_check.phpでは、postで渡したcodeとpassで入力内容をキャッチ。
staff_code=$post['code'];//codeは数字1,2,3...
$staff_pass=$post['pass'];
$staff_pass=md5($staff_pass);
//var_dump($staff_pass);
$dsn='mysql:dbname=shop;host=localhost;charset=utf8';
$user='root';
$password='';
$dbh=new PDO($dsn,$user,$password);
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$sql='SELECT name FROM mst_staff WHERE code =? AND password =?';
$stmt=$dbh->prepare($sql);
$data[]=$staff_code;
$data[]=$staff_pass;
$stmt->execute($data);
$dbh=null;
$rec=$stmt->fetch(PDO::FETCH_ASSOC);
ここでスタッフ名とパスワードが一致するものを抽出している。抽出したものがあればheader('Location:staff_top.php’);へ飛ぶように指示している。
if($rec==false)
{
print 'スタッフコードかパスワードが間違っています。<br />';
print '<a href="staff_login.html"> 戻る</a>';
}else{
session_start();
$_SESSION['login']=1;
$_SESSION['staff_code']=$staff_code;
$_SESSION['staff_name']=$rec['name'];
header('Location:staff_top.php');
exit();
}
}catch(Exception $e){
print'ただいま障害により大変ご迷惑をおかけします';
}
?>
これを参考にし、データベース接続を切った後に$rec=$stmt->fetch(PDO::FETCH_ASSOC);を行うことで$recに入力状態が維持されるようになった。
$dbh=null;
$rec=$stmt->fetch(PDO::FETCH_ASSOC);
$demo_time=$rec['install_date'];
print $demo_time;
if($rec==true)
{
print'再ログインです。<br/>';
}
ただ、このままだとsessionが何の意味もないので、データベースの中に今回のトークンと一致するものがあった場合には、
if($rec==true)
{
session_start();
$_SESSION['login']=1;
$_SESSION['shop_url']=$rec['shop_url'];
header('Location:hello.php');
とし、sessionを設定した上で、別のphpに飛ばす。
飛ばし先のhello.phpも変更し、
<?php
session_start();
session_regenerate_id(true);
if(isset($_SESSION['login'])==false)
{
print'NG';
}else
{
print $_SESSION['shop_url'];
print 'に再ログイン<br/>';
}
?>
<html>
<head>
<title>PHP Test</title>
</head>
<body>
<?php echo '<p>Hello World</p>'; ?>
</body>
</html>
のようにしておく。
なぜか
NG
Hello World
と表示されてしまう。
$_SESSION['login']=1;は事前に渡しているので、if(isset($_SESSION['login'])==false)はtrueになるはずだが。
アプリを通さない形で判定するために
<?php
session_start();
$_SESSION['login']=1;
$_SESSION['shop_url’]=‘abc’;
header('Location:hello.php');
exit();
?>
で別途スクリプトを作成。
これを実行するときちんと
abcに再ログイン
Hello World
と表示される。
アプリの方のindex.phpをhe.phpへ飛ぶように変更し、sessionが機能するかの様子を見る。
やはりアプリとしてのスクリプト実行ではsessionを活用できないことがわかった。
ということはsessionを使用しないやり方を考える必要があるのか。