2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PHPでデータベースを使ってみるための備忘録

Last updated at Posted at 2020-03-26

##はじめに
LAMP環境を整えてPHP使っておきながらPHP内でのデータベースの使い方がわからなかったので、忘れないようにまとめておきます。

簡単なスタッフの追加ページぽい何かとスタッフ一覧ページぽいものを作りながら簡単にまとめておきます。

###準備
phpMyAdminを使ってデータベースに簡単なスタッフ管理を想定したテーブルを作ります。
カラムは3つで「code,name.password」のカラムを作ります。このうちcodeを主キーにします。
データの方などは以下の画像を参照してください
Screenshot from 2020-03-26 10-00-20.png

##作ってみる
####スタッフ追加ページ
まずはスタッフ追加ページを作ります。
スタッフ名とパスワード・確認用パスワードを入力する欄をHTMLで用意します。

staff_add.html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    スタッフ追加<br/>
    <br/>
    <form method="post" action="add_confirm.php">
        スタッフ名を入力してください<br/>
        <input type="text" name="name" style="width:200px"><br/>
        パスワードを入力してください<br/>
        <input type="password" name="pass" style="width:100px"><br/>
        パスワードをもう一度入力してください<br/>
        <input type="password" name="pass2" style="width:100px"><br/>
        <br/>
        <input type="submit" value="登録">
    </form>
</body>.
</html>

Screenshot from 2020-03-26 22-50-34.png

ここまでは大丈夫…
問題のデータベースは次から…

####データベースに接続
何度もデータベース接続のコードを書くのが面倒なので、使いまわし用の関数を入れたphpファイルを作ります。

connect.php
<?php
// データベースに接続
function connectDB() {
    $dsn = 'mysql:dbname=データベース名;host=localhost;charset=utf8'; //データベース名とホスト名
    $user='root';   //データベースのユーザー名
    $password='****';    //データベースのパスワード
    try {
        $dbh = new PDO($dsn, $user,$password);
        $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
        return $dbh;

    } catch (PDOException $e) {         //  データベースに接続出来なかった場合の処理
        print'エラー';      //  エラーメッセージを表示して終了
        exit();
    }
}
?>

PDOオブジェクトを使ってデータベースに接続しています。
使い方はこちら(PDOを使ったPHPでのデータベース基本操作)を参考にさせていただきました。

####入力データの確認
スタッフ追加ページのstaff_add.htmlで入力されたスタッフ名とパスワードの確認ページを作ります。
スタッフ名の未入力やパスワードと確認用パスワードが一致していない場合の処理も作っていきます。

add_confirm.php
<?php


    //staff_add.htmlからデータ受取
    $staff_name=$_POST['name'];
    $staff_password=$_POST['pass'];
    $staff_password2=$_POST['pass2'];

    //エスケープ処理
    $staff_name=htmlspecialchars($staff_name,ENT_QUOTES,'UTF-8');
    $staff_password=htmlspecialchars($staff_password,ENT_QUOTES,'UTF-8');
    $staff_password2=htmlspecialchars($staff_password2,ENT_QUOTES,'UTF-8');

    //以下、入力内容確認処理

    if($staff_name==''){
        print'スタッフ名が入力されていません。<br/>';
    }else{
        print'スタッフ名:';
        print $staff_name;
        print'<br/>';
    }
    
    if($staff_password!=$staff_password2){
        print'パスワードが一致しません。<br/>';

    }
    
    if($staff_name==''||$staff_password==''||$staff_password!=$staff_password2){
        //入力内容に問題があれば戻るボタンのみ表示
        ?>
        <form>
          <input type="button" onclick="history.back()" value="戻る">
        </form>
        <?php
    }else{
        //MD5方式でパスワードをハッシュ化
        $staff_password=md5($staff_password);
        ?>
        <form method="post" action="add_done.php">
          <input type="hidden" name="name" value="<?php print $staff_name;?>">
          <input type="hidden" name="pass" value="<?php print $staff_password;?>"><br/>
          <input type="button" onclick="history.back()" value="戻る">
          <input type="submit" value="登録">
        <form>
        <?php
       
    }
?>

エスケープ処理については以下を参考にしました。
PHPでエスケープが必要な時と方法を最短理解!
「何故htmlspecialcharsを通すのか?」を一言でどうぞ

####データベースにレコードを追加
次は、前の画面で確認したスタッフ名とハッシュ化したパスワードを受け取って、データベースに追加する処理を作ります。

add_done.php
<?php

require_once 'connect.php';
$dbh = connectDB();

try {

    $staff_name=$_POST['name'];
    $staff_password=$_POST['pass'];
    //エスケープ処理
    $staff_name=htmlspecialchars($staff_name,ENT_QUOTES,'UTF-8');
    $staff_password=htmlspecialchars($staff_password,ENT_QUOTES,'UTF-8');
    
    $sql='INSERT INTO テーブル名(name,password) VALUES (?,?)';   //SQL命令文 入れたいデータは「?」
    $stmt=$dbh->prepare($sql);    //準備する命令
    $data[]=$staff_name;          //「?」にセットしたいデータを順番に書き出し
    $data[]=$staff_password;
    $stmt->execute($data);        //クエリの実行

    $dbh=null;      //データベース切断

    print $staff_name;
    print 'さんを追加しました。<br/>';

}catch(Exception $e){
    print'エラー';
    exit();
}

?>
<a href="staff_list.php">戻る</a>

これでどこかミスってなければデータベースにユーザー名とパスワードのレコードが追加されてるはず。
(passwordには「test」をハッシュ化したものが入ってます)
Screenshot from 2020-03-26 23-22-07.png

####スタッフ一覧
せっかくなのでデータベースに追加したスタッフの一覧を表示させるページも作ります。

staff_list.php
<?php
require_once 'connect.php';
$dbh = connectDB();

try{
    $sql='SELECT name FROM テーブル名 WHERE 1'; 
    $stmt=$dbh->prepare($sql);
    $stmt->execute();

    $dbh=null;

    print'スタッフ一覧<br/>';
    while(true){
        $rec=$stmt->fetch(PDO::FETCH_ASSOC);
        if($rec==false){
            break;
        }
        print $rec['name'];
        print '<br/>';
    }

}catch(Exception $e){
    print 'エラー';
    exit();
}

?>
<br/>
<input type="button" onclick="location.href='./staff_add.html'" value="スタッフ追加">

最後に、最初に作ったスタッフ追加ページに飛ぶ飛ぶスタッフ追加ボタンもつけておきます。

Screenshot from 2020-03-26 23-28-00.png
出来た出来た。追加と表示しかしてないけどとりあえず出来た。

2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?