忍者ブログ

からすまる日誌 mySQL

授業ノートのまとめ

応用(2) ログインしたらマイページ

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

応用(2) ログインしたらマイページ

CTRL+Hでキャッシュ削除

まちがってたところはセレクト文:
$sql = "SELECT * FROM users WHERE u_id=:u_id";

この*が違っていた。

1.userテーブルの全部を選択してひっぱってくる
2.dbにあるu_idと、ユーザーが入力しpostされてくる$_POST["u_id"]が
一致すればいいんだが、
$_POST["u_id"]は「人間が入力してくる」ものだからそのままでは触れない。
よってプレースホルダにしておき、あとで中身を説明する。
 


WHERE句:
>SELECT構文を使って特定のレコードを検索するには、WHERE句を使います。WHEREの後に条件式を指定することにより、その条件にマッチしたレコードだけを選択することができます。

>SELECT * FROM customer WHERE id_c = 1;
 
全レコードの中からid_cが1のものをひっぱってこいは分かる。

u_idが:u_id"のものをひっぱってこいとはどういう意味だ? 
:u_idを定義してるのはどこなんだ。

次の授業までにかみ砕けないなら先生にちゃんと聞いて理解するほうがいいと思う。

根本的に理解できてなかった。
ユーザーの入れて来る文字列はタグがあったり何があるか分からないから、
いわば「:保留するぜ」という記述。:u_idとは。
だからこの時点で定義もへったくれもない。
変数名が同じだと大変混乱するといういつもの癖が出た。
「:保留するぜを後解説してるのがbindValue。(のはずだ)


 
プレースホルダについて
https://webukatu.com/wordpress/blog/1638

sqlインジェクションについて
https://lets.postgresql.jp/documents/tutorial/with_php/against_sql_injection/placeholder/pg_xxxx/1

 


さてログイン出来たらマイページに飛ばす
しかしページ遷移すると$nameが残らないですね?

①postする。めんどい
②sessionする かしこい

よって、ログイン出来たとき:
  //$name=$row["nickname"];
  $_SESSION["name"]=$row["nickname"];

先頭にも

<?php
session_start();
$name="";

を記述


ログインしてからはどのページもセッションをつけましょう

しかしこれだとログインしてなくてもURLを直打ちしたら見れてしまう
セッションデータがあるかないかで振り分ける必要がある

indexの方に追加

  //ログイン成功
  //$name=$row["nickname"];
  $_SESSION["login"]=true;//これを追加!
  $_SESSION["name"]=$row["nickname"];
  header("Location: mypage.php");
  exit();

mypageの方

<?php
session_start();
if(empty($_SESSION["login"])){ //値がないかfalseのとき
 //ログインページに戻す
 header("Location:index.php");
 exit();
}
?>


セッションを消すにはブラウザ終了
クッキーを消してもだめ
戻る進むを押すとまれにセッションが切れることもある

同じ人の、同一アクセスが続いているかどうかがセッション情報


このままだと何回でもチャレンジできてしまう。
そういうのをブルートフォースアタックという
 
 

PR

コメント

ただいまコメントを受けつけておりません。

プロフィール

HN:
karasumaru
性別:
非公開

P R