では
健全な形に直しますよ(md5はよくないんだが一応それは残す感じで)
auth.phpをauth2.phpにリネーム
index2.phpの呼び出し先もauth2.phpに変更
またエラーですよ
エラーどんとこいや
Parse error: syntax error, unexpected ')', expecting ']' in C:\xampp\htdocs\php\makino\auth\auth2.php on line 15
→かっこの最初か最後がない
$pass = md5($_POST["pass"]);
ここがちゃいましたね
ここまで
--->index2.php
<!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="auth2.php">
<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>
</form>
</div>
</body>
</html>
--->auth2.php
<?php
session_start();
//いつもの
$user="root";
$dbpass="";
$host="localhost";
$dbname="auth";
$dsn="mysql:host={$host};dbname={$dbname};charset=utf8";
$pdo=new PDO($dsn, $user, $dbpass);
//指定したニックネームと一致するu_idとpassをもってこいや
$sql="SELECT nickname FROM users WHERE u_id=:u_id AND pass=:pass";
$pass = md5($_POST["pass"]);//あらかじめハッシュしておく
//プリコンパイル(構文はコンパイル済み)
$stmt = $pdo->prepare($sql);
//バインド
$stmt->bindValue(":u_id",$_POST["u_id"],PDO::PARAM_STR);
$stmt->bindValue("pass",$pass,PDO::PARAM_STR);//さっきハッシュしておいたので
//実行
$stmt->execute();
//とりだし
$row = $stmt->fetch(PDO::FETCH_ASSOC);//hitするdataは1けんだけのはずなので
if($row["nickname"]){
$_SESSION["login"]=true;
$_SESSION["name"]=$row["nickname"];
header("Location: mypage.php");
}else{
header("Location: index2.php");
}
?>
プリコンパイルされるっちゅうのはフランス語に翻訳するようなもの。
あとから英語(の文法込み)をまぜこんでも、フランス語と英語がまじって翻訳(解釈)されることはないって感じ。
「私はクエが大好き」と解釈させたいとする。
「私は○○が大好き」とフランス語で翻訳しておく(プリコンパイル)
あとから「クエ」をはめこむ。
「私はクエが大好き」
わるいひとが、あとから「クエOR '1'='1'」をかまして翻訳させようとしても、フランス語(機械語)に翻訳された後に条件文は解釈(実行)されないという感じ。
ではテストのための30分クッキング:
あたらしいDBをつくりますよ
db名: goods
table名: dogs カラム2
d_id
d_name
さて以前作ったlunchテーブル
SQLでとりだせ
すべてのfoodsテーブルのデータ
メニュー名と値段とカテゴリ名を
SELECT 列名 FROM テーブル
複数あるときはカンマ区切り
同じ名前のカラムが存在するなら
テーブル名 ドット カラム名でないとできない
複数テーブルを参照するときはWHERE必須
SELECT menu,price,cat FROM foods,cats WHERE foods.c_id=cats.c_id;
ぶんぽう
SELECT 取り出すものカンマ区切りで全部 FROM テーブル名カンマ区切りで全部
WHERE どこテーブルの.なにか=どこテーブルの.なにか
ORDER BY price(昇順)
ORDER BY price DESC (ですく)(降順)
dogsの構造を変えたい
固定長アルファベット7けた
ばーちゃーは可変長文字列
↑
↓
CHAR 文字列固定長
SELECT menu,price,cat FROM foods,cats WHERE foods.c_id=cats.c_id ORDER BY price DESC;
ダンプをとるときはデータベースでとる(テーブルでとらない)
エクスポート
DBには厳しい3つの制約:
主キーがせっていすると同じ値を持つ主キーは設定できない:
一意制約
外部キーは参照できる値でないといけない:
参照制約
プライマリキーとかnullではだめですよとか指定したとこは:
Not Null制約
SELECT menu,price,cat FROM foods,cats WHERE foods.c_id=cats.c_id ORDER BY price DESC;
一意制約
参照制約
Not Null制約
CHAR
SELECT menu,price,cat FROM foods,cats WHERE foods.c_id=cats.c_id ORDER BY price DESC;