クロピグログ

職業訓練で学んだことまとめ

【DB授業十日目】MariaDB+PHP(続き6)

作業手順おさらい

1.DB構築

・DB構築は必ずスクリプトファイルを作成・実行

 

2.システム専用ユーザの作成

GRANT ALL
ON データベース領域名.*
TO ユーザ名@localhost
IDENTIFIED BY 'パスワード';

スクリプトファイルを作成・実行を推奨

・ユーザの作成はシステムユーザでは行われない

※システムユーザはユーザ作成権限なしの場合が多いので

#SELECT user, host FROM mysql.user; ユーザ確認用
#SHOW GRANTS FOR ユーザ名@localhost; ユーザ詳細確認用

 

3.システムユーザでテーブルの確認

SHOW TABLES; テーブルの確認
SELECT * FROM テーブル名; レコード確認

 

 ---------------------------------上記までDB作業--------------------------------------

 

4.functions.phpを作成

・よく使う自作関数を定義

・h関数:XSS対策「echo時に呼び出す」

function h($var)
{
  if (is_array($var)) {
    //配列で受け取った時の処理
    return array_map('h'$var);
    //array_map:配列内の各部屋に第1引数で指定した関数を実行する
    //今回はh関数自身を読み込んでる
  } else {
    //配列じゃない時の処理
    return htmlspecialchars($var, ENT_QUOTES, 'UTF-8');
  }
}

・v関数(関数名なんでもOK):デバック用関数

function v($val)
{
  echo '<pre>';
  var_dump($val);
  echo '</pre>';
}

・DB接続用関数:

// MySQL(MariaDB)に接続する関数
function connectPractice()
{
  $dbobj = mysqli_connect('localhost''Tanaka''Manager') or die("DB接続できませんでした");
  mysqli_select_db($dbobj'practice');
  mysqli_set_charset($dbobj'utf8');
  return $dbobj;
  //関数内と関数外は別世界(スコープが別)
  //関数内で取得した「接続許可証(オブジェクト)」をreturnを使用して関数外に渡す
}

 

5.各ページの作成

・DBを操作する場合はSQL

※まずはシェルでSQL文を実行して望んだ結果が得られることを確認してPHPに持っていく

・ユーザ入力値を使ってSQL文を作成する場合

 1.値をとりあえず入れてシェルでSQL文実行確認

 2.PHPでユーザ入力値を使ってSQL文作成

  SQLインジェクション対策

  ・sprintf関数:データ型の確認

  ・mysqli_real_escape_string:クォートのエスケープ

 3.SQL文を確認するため出力して確認

  ※シェルで作成したSQL文「1」と「3」で出力してSQL文を比較して問題ないことを確認(DBのミスなのか?PHPのミスなのか?判断するため)

 4.DBにSQL文を渡して処理を記述

  mysqli_query関数:SQL文を実行

  ※もしSELECT文だったら情報を変数に代入

  1.戻り値のテーブル情報を変数に代入

  2.テーブル情報を連想配列に変換(mysql_fetch_assoc関数)

  3.必要な個所で値を出力(h関数をかけて出力)

 

◆値の受け渡し

「入力画面」>「確認画面」>「実行画面」

◇ユーザ入力値の受け渡し

 フォームを使ってPOSTでの受け渡し(たまにGET)

 送信側:HTMLフォーム

 受信側:PHPの$_POST($_GET)を使用

◇DBで対象レコードを絞り込むid番号などの識別値

 クエリ文字列でのGETでの受け渡し

 送信側:リンクに「?値の名前=値&値の名前一覧」

 受信側:$_GETを使用

◇確認画面からの実行画面に値を受け渡し

 セッションを使って受け渡し

 送信側:$_SESSION['部屋の名前'] = 渡したい値

 受信側:$変数 = $_SESSION[' 部屋の名前 ']