LoginSignup
0
0

More than 3 years have passed since last update.

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

Posted at

データベースの作成

 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.以下のように表示されていることを確認
image.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>



完了画面


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




```

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

コード説明

 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」の表示をクリックしてフォームで入力したデータが入っていることを確認する
image.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がはいったクッキーファイルを削除している。
 

以上

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0