データベースの作成、テーブルの作成、PHPからデータベース接続、クラスとインスタンス、SQLのINSERT文、セッションの破棄


データベースの作成

 phpMyadminというデータベースサーバーをGUIで管理できるPHPで作られたツールを使用します
 1.XAMPPのApache、MySQLを起動する。
 2.Google Chromeでアドレス欄に「http://localhost/phpmyadmin」と入力する
 3.「データベース」を押下します。データベース名に「contact_form」、「照合順序」に「utf8_unicode_cl」を選びます。
 その後作成ボタンを押下

テーブルの作成

 1.左側のパネルに「contact_form」が表示するのでそれをクリックする。
 2.「名前」に「inquiries」、「カラム数」に6と入力して、実行ボタンを押下
 3.「名前」に、上から「id」「name」「email」「subject」「body」「state」と入力する
 「データ型」は上から「INT」「VARCHAR」「VARCHAR」「TEXT」「TEXT」「TINYINT」
 「長さ/値」は上から2行目のnameが「30」、3行目emailが「100」
 「デフォルト値」が上から6行目のstateが「ユーザー定義」「0」
 「属性」は上から1行目のIDが「UNSIGNED」
 「インデックス」は1行目のIDが「PRIMARY」
 「A_I」は1行目だけチェックを入れる
 4.以下のように表示されていることを確認

データベースに接続してみよう

1.form3.phpに以下のように編集する
 
```
<?php
session_start();

if(isset($_POST['token'],$_SESSION['token'])&& ($_POST['token'] === $_SESSION['token'])){
unset($_SESSION['token']);
$dsn = 'mysql:dbname=contact_form;host=localhost;charset=utf8';
$user = 'root';
$password ='';

$dbh = new PDO($dsn,$user,$password);
car_dump($dbh);

$dbh =null;

}else{
header('Location:http://localhost/php_form/form1.php');
exit();
}
?>

<!doctype html>



完了画面


お問い合わせありがとうございます。




```

Google Chromeを起動し「http://localhost/php_form/form1.php」にアクセスする
フォームに任意のデータを入力して、確認ボタンを押下する
また、確認画面が表示後、送信するボタンを押下しobject(PDO)#1(0){}と表示されていることを確認する

コード説明

 mysql:dbname=contact_form;host=localhost;charset=utf8は
 mysql:dbname=データベース名;host=ホスト名;charset=utf8と設定する
 new PDO($dsn,$user,$password);は、PDOクラスをインスタンス化しているコード
 $dbh=null;でデータベースと切断している
 クラスとインスタンス
 PDOクラスはPHPとデータベースサーバーを接続するクラスです。
 プロパティ、メソッドを設計する。
 また、クラスから生まれたモノをインスタンスという
 クラスの中には、コンストラクタという特殊なメソdッドが定義されておりnewされるときに
 このメソッドが呼び出される。コンストラクタは、通常インスタンスの初期設定をするコードを
 書きます。
 

SQLのINSERT文

 1.form3.phpに以下のように編集する

<?php
 session_start();

if(isset($_POST['token'],$_SESSION['token'])&& ($_POST['token'] === $_SESSION['token'])){
    unset($_SESSION['token']);

    $name = $_SESSION['name'];
    $email = $_SESSION['email'];
    $subject = $_SESSION['subject'];
    $body = $_SESSION['body'];


    $dsn = 'mysql:dbname=contact_form;host=localhost;charset=utf8';
    $user = 'root';
    $password ='';

    $dbh = new PDO($dsn,$user,$password);
    $dbh->query('SET NAMES ut8');
    $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
    $sql = 'INSERT INTO inquiries (name,email,subject,body) VALUES (?,?,?,?)';
     $stmt = $dbh->prepare($sql);
     $stmt->bindValue(1,$name,PDO::PARAM_STR);
     $stmt->bindValue(2,$email,PDO::PARAM_STR);
     $stmt->bindValue(3,$subject,PDO::PARAM_STR);
     $stmt->bindValue(4,$body,PDO::PARAM_STR);
     $stmt->execute();
    var_dump($dbh);

    $dbh =null;



}else{
    header('Location:http://localhost/php_form/form1.php');
    exit();
}
?>

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>完了画面</title>
</head>
<body>
<p>お問い合わせありがとうございます。</p>
</body>
</html>

google Chromeを起動し「http://localhost/php_form/form1.php」にアクセスする
フォームに任意のデータを入力して、確認ボタンを押下する
また、確認画面が表示後、送信するボタンを押下する
その後「https://localhost/phpmyadmin」と入力後左のパネルに「contact_form」が表示されているのでクリック後テーブル「inquiries」の表示をクリックしてフォームで入力したデータが入っていることを確認する

 

セッションの破棄

 form3.phpを以下のように編集する

<?php
 session_start();

if(isset($_POST['token'],$_SESSION['token'])&& ($_POST['token'] === $_SESSION['token'])){
    unset($_SESSION['token']);

    $name = $_SESSION['name'];
    $email = $_SESSION['email'];
    $subject = $_SESSION['subject'];
    $body = $_SESSION['body'];


    $dsn = 'mysql:dbname=contact_form;host=localhost;charset=utf8';
    $user = 'root';
    $password ='';

    $dbh = new PDO($dsn,$user,$password);
    $dbh->query('SET NAMES ut8');
    $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
    $sql = 'INSERT INTO inquiries (name,email,subject,body) VALUES (?,?,?,?)';
     $stmt = $dbh->prepare($sql);
     $stmt->bindValue(1,$name,PDO::PARAM_STR);
     $stmt->bindValue(2,$email,PDO::PARAM_STR);
     $stmt->bindValue(3,$subject,PDO::PARAM_STR);
     $stmt->bindValue(4,$body,PDO::PARAM_STR);
     $stmt->execute();
    

     $dbh =null;
     $_SESSION = array();
      if(ini_get("session.use_cookies")){
          $paarams = session_get_cookie_params();
          setcookie(session_name(),'',time() - 42000, $params["path"],$params["domain"],$params["secure"],$params["httponly"]);
      }
    session_destroy();


}else{
    header('Location:http://localhost/php_form/form1.php');
    exit();
}
?>

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>完了画面</title>
</head>
<body>
<p>お問い合わせありがとうございます。</p>
</body>
</html>

 セッション破棄はセッションだけでなく、セッションに寒冷するクッキーファイルの削除も必要
 HTTPのサーバ側はクライアントの状態を保持しない通信です。クッキーという仕組みを使うと
 サーバー側にクッキーファイルのデータがリクエストのヘッダ情報としておくられます。
 etcookie(session_name(),'',time() - 42000, のコードでセッションIDがはいったクッキーファイルを削除している。
 

以上