データベースの作成、テーブルの作成、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」、３行目emailが「100」
　「デフォルト値」が上から６行目のstateが「ユーザー定義」「0」
　「属性」は上から１行目のIDが「UNSIGNED」
　「インデックス」は1行目のIDが「PRIMARY」
　「A_I」は1行目だけチェックを入れる
　4.以下のように表示されていることを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/686519/3480901a-3bdd-ca48-4584-39c230d6c114.png)

#データベースに接続してみよう
 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>
<html>
<head>
<meta charset="utf-8">
<title>完了画面</title>
</head>
<body>
<p>お問い合わせありがとうございます。</p>
</body>
</html>
```

Google Chromeを起動し「http://localhost/php_form/form1.php」にアクセスする
フォームに任意のデータを入力して、確認ボタンを押下する
また、確認画面が表示後、送信するボタンを押下しobject(PDO)#1(0){}と表示されていることを確認する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/686519/ee24195b-37f1-c16c-fe6c-c7fe59734eb6.png)

#コード説明
　mysql:dbname=contact_form;host=localhost;charset=utf8は
　mysql:dbname=データベース名;host=ホスト名;charset=utf8と設定する
　new PDO($dsn,$user,$password);は、PDOクラスをインスタンス化しているコード
　$dbh=null;でデータベースと切断している
　***クラスとインスタンス***
　PDOクラスはPHPとデータベースサーバーを接続するクラスです。
　プロパティ、メソッドを設計する。
　また、クラスから生まれたモノをインスタンスという
　クラスの中には、コンストラクタという特殊なメソｄッドが定義されており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」の表示をクリックしてフォームで入力したデータが入っていることを確認する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/686519/dd398e94-7c27-670a-f3d0-4806976f2ab5.png)

　
#セッションの破棄
　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がはいったクッキーファイルを削除している。
　

#以上