プログラミング覚え書き

WEB製作覚え書き

ノート代わりに勉強した内容をまとめています。

PHP+MariaDB:ユーザがレコードを登録した後の表示ページ

 

<?php
$debug = true;

// ▼▼h関数の読み込み▼▼
require_once dirname(__FILE__. '/functions.php';

// ▼▼POST形式で受け取った値(新規登録する商品情報)を各変数に代入▼▼
$item = isset($_POST['item']) ? $_POST['item'] : NULL;
$price = isset($_POST['price']) ? $_POST['price'] : NULL;
$stock = isset($_POST['stock']) ? $_POST['stock'] : NULL;
$keyword = isset($_POST['keyword']) ? $_POST['keyword'] : NULL;
$maker = isset($_POST['maker']) ? $_POST['maker'] : NULL;
// 参考演算子を使って値が届いているか確認
// 届いている:届いた値を変数に代入
// 届いていない:NULLを変数に代入

// ▼▼上記で定義した変数からユーザが登録し得るスペースを削除▼▼
$item = trim($item);
$price = trim($price);
$stock = trim($stock);
$keyword = trim($keyword);
$maker = trim($maker);
// trim関数:引数に指定した文字列の、先頭及び末尾にあるホワイトスペースを取り除き、
// その結果を値として返す
// ホワイトスペースとは:半角スペース、タブ、改行
// 本来、引数には文字列型を設定しなければならないが、NULLは''に置き換える
// trim関数では全角スペースは削除できない
// 全角スペースも対応させるには、文字の置き換え用関数にて''に置き換える
// もしくは、trim関数の前で、mb_convert_kana関数により全角スペースを半角に変換しておく

// ▼▼各変数に空文字を代入▼▼
$sql = ''//sql文を管理
$message = ''//実行結果を出力
$btn = ''//次のページに移動するリンクボタン



// ▼▼メッセージ用、リンクボタン用 の変数を定義▼▼
if ($item == '' or $maker == '') {
  // 条件式:入力必須項目である商品名かメーカーが定義されていない
  // ⇒入力・選択されていない
  $message = '必須項目を入力してください';
  $btn = '<a href="entry.php" onclick="history.back(); return false;">
          フォームに戻る
          </a>';
else {
  // ▼▼DB接続と準備▼▼
  $dbobj = mysqli_connect('localhost''Tanaka''Manager')
    or die(mysqli_error($dbobj));
  mysqli_select_db($dbobj'practice');
  mysqli_set_charset($dbobj'utf8');

  // ▼▼セキュリティ処理▼▼
  $item = mysqli_real_escape_string($dbobj$item);
  $price = mysqli_real_escape_string($dbobjmb_convert_kana($price'n'));
  $stock = mysqli_real_escape_string($dbobjmb_convert_kana($stock'n'));
  $keyword = mysqli_real_escape_string($dbobj$keyword);
  $maker = mysqli_real_escape_string($dbobjmb_convert_kana($maker'n'));
  // mysqli_real_escape_string関数:
  // セキュリティ用関数
  // SQLインジェクション攻撃に対する対応
  // SQL文で意味を持つ記号をエスケープする
  // 「"」「'」をエスケープして「\"」「\'」
  // 第一引数:接続許可証※DB接続後しか使えない
  // 第二引数:エスケープ対象文字列

  // mb_convert_kana関数
  // 対象文字列を一定のルールに基づいて変換する
  // 全角・半角を変換する
  // mb_convert_kana($price, 'n')
  // 第一引数:変換対象の値
  // 第二引数:文字列で変換ルールを指定
  // n:全角数字を半角にする


  // ユーザ入力値でSQL文を作成する際は、セキュリティ上の理由から文字列連結を使わない

  // ▼▼INSERT文を生成し【$sql】に代入▼▼
  $sql = sprintf(
    'INSERT INTO stationery SET
          item="%s", price=%d, stock=%d, keyword="%s",maker=%d',
    $item,
    $price,
    $stock,
    $keyword,
    $maker
  );
  // ↑↑sprintf関数:文字列を書式のルールに則ってフォーマットする関数
  // 第一引数:基準となる文字列(変換指定子を含む)
  // ※変換指定子:「%d(整数)」「%s(文字列)」など
  // 「%d(整数)」を指定された所に違うデータ型が入った場合、「0」に変換される
  // 第二引数以降:変換指定子に当てはめる値
  // 戻り値:基準となる文字列の変換指定子に、第二引数以降に指定した値を入れ込んだ文字列

  // ▼▼上記で生成したINSERT文【$sql】でDBへのレコード挿入を実行▼▼
  mysqli_query($dbobj$sql) or die(mysqli_error($dbobj));

  // ▼▼メッセージ用変数▼▼
  $message = '新規登録しました';

  // ▼▼一覧表示に戻る用変数▼▼
  $btn = '<a href="index.php">一覧表示に戻る</a>';
}
?>

<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
  <link href="style.css" type="text/css" rel="stylesheet">
  <title>商品管理システム</title>
</head>

<body>
  <?php if ($debug) : ?>
    <div class="debug">
      <p>デバッグ</p>
      <p>$sql : <?php print $sql?></p>
      <pre>$_POST : <?php var_dump($_POST); ?></pre>
    </div>
  <?php endif?>
  <div id="container">
    <div id="head">
      <h1>新規登録</h1>
    </div>
    <div id="content">
      <p><?php echo $message?></p>
      <p><?php echo $btn?></p>
      <!--#content-->
    </div>
    <!--#container-->
  </div>
</body>

</html>

  ↓ ↓ ↓

f:id:midori_x:20200213121656p:plain