recordsテーブルは、studentsとtestsテーブルを見に行く仕様
→recordsテーブルから入力することはできない。SQL文が正しくても入らない
not null制約
一意制約
参照制約
の3つがある
参照できない値を入れることはできない
別表を入れてからでないといれない(順番があるよ)
たとえばデータが破損してリストアしないといけないときなども、
リストアする順番を考えないとできない
この場合、studentsテーブルかtestsテーブルからリストアしないと
recordsテーブルをリストアすることは制約が働いてできないらしく、盲点になるらしい
studentsテーブルにデータを登録する画面を作りましょう
students_form.phpを作ります
formはactionとmethodが必要
処理プログラムのパス(送り先)がactionの中身
<form action="insert_s.php" method="post">
バリデーションのチャンスは2回ある
送る前にチェックして「あかんな。入力不足やな」
サーバー側でチェックして「あかんな。以下略」
→
①両方でやるのがよろしい(二段階でする)
②どっちかしかできなかったらサーバー側でやる
なぜか
PHPのエラーがでてしまうと、攻撃者が「ああこういう構造なんだな」という格好の餌を与えてしまう
サーバー側をオフにすることはできないが、クライアント側のバリデーションはオフにされちゃうかもしれないし
inputにはtypeのほかにname属性とid属性両方つけるとよろしい
<p><input type="text" name="s_name" id="s_name"></p>
カラム名とこのidとnameは全部記述をそろえましょう。
名前はきれいに統一しておくように
labelやinputはインライン要素なので、<p>や<div>でくくっておくのが望ましい
そういうわけで、
schoolフォルダのなかに、
students_form.php、insert_s.phpと、cssフォルダとjsフォルダをつくり、
各フォルダには各々style.cssとform.jsをおいておく
--->students_form.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>生徒登録</title>
<link rel="stylesheet" href="css/style.css">
<script src="../jquery-3.4.1.min.js"></script>
</head>
<body>
<div id="container">
<h1>新規生徒の登録</h1>
<form action="insert_s.php" method="post">
<p>
<label for="s_name">生徒氏名</label>
<input type="text" name="s_name" id="s_name"></p>
</p>
<p><button type="submit">送信</button></p>
</form>
<p id="msg"></p>
</div>
<script src="js/form.js"></script>
</body>
</html>
--->insert_s.php
<?php
echo "<meta charset='utf-8'>";
echo "ok";
?>
--->style.css
body{
background: #eff;
}
--->form.js
$(function(){
console.log("hoge");
});
このinsert_s.phpは英語しか書けない。キャラクタセットされてないので。
したかったら、
<?php
//echo "<meta charset='utf-8'>";
echo "ok";
?>
こうは記述しないらしいよ。ふつうに<!DOCTYPE html>から記述するのが一般的らしい