24JZ / 2026年度前期 / 詳細版

クラウドシステム まとめHTML

用語を覚えるだけでなく、コードを読んで処理の流れを説明できるように、授業範囲を具体例と注意点付きで整理しました。

1. Webシステムの全体像

Webシステムでは、画面を作る技術と、サーバーで処理する技術、データを保存する技術が連携します。

ブラウザ(HTML / CSS / JavaScript) ⇄ HTTP通信 ⇄ PHP ⇄ PDO / SQL ⇄ MySQL
技術担当
HTML内容と構造見出し、表、フォーム
CSS見た目色、余白、配置
JavaScriptブラウザ内の動きクリック処理、入力確認、非同期通信
PHPサーバー側の処理フォーム受信、DB操作、JSON生成
MySQLデータの保存・検索SELECT、INSERT、UPDATE、DELETE
試験では「どこで動くか」を区別します。JavaScriptは主にブラウザ、PHPとMySQLはサーバー側です。

2. HTML - ページの構造

<!doctype html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>ページタイトル</title>
</head>
<body>
  <h1>見出し</h1>
  <p>本文です。</p>
</body>
</html>
タグ役割覚える属性
aリンクhref
img画像srcalt
table / tr / th / td行とセルの関係
ul / ol / li箇条書き・番号付きリストリスト項目はli
form入力値を送信methodaction
input入力欄typenamevalue

フォームの重要点

<form method="post" action="save.php">
  <label>名前 <input type="text" name="name"></label>
  <button type="submit">送信</button>
</form>

name属性がPHP側の配列キーになります。上の例は$_POST['name']で受け取ります。

3. CSS - 見た目と配置

セレクタ

p { color: black; }          /* タグセレクタ */
.notice { color: blue; }    /* classセレクタ */
#main { width: 800px; }      /* idセレクタ */

ボックスモデル

content → padding(内側余白)→ border(枠線)→ margin(外側余白)
プロパティ意味
width / height幅・高さ
display表示形式。block、inline、flex、gridなど
position配置方法。relative、absolute、fixed、stickyなど
flex要素を一方向に並べる
grid行と列で配置する
@media画面幅などに応じてスタイルを変更

4. JavaScript・jQuery - ブラウザの動き

変数・条件分岐・繰り返し

const colors = ['red', 'blue', 'green'];
for (const color of colors) {
  if (color === 'red') {
    console.log('赤です');
  }
}

DOMとイベント

document.querySelector('#button').addEventListener('click', () => {
  document.querySelector('#result').textContent = 'クリックされました';
});

// jQueryの場合
$('#button').on('click', function () {
  $('#result').text('クリックされました');
});
jQueryメソッド役割
.text()文字列を取得・設定
.html()HTMLを取得・設定
.val()フォーム値を取得・設定
.append()末尾へ要素を追加
.on('click', ...)クリックイベントを登録

5. PHP - サーバー側の基本

<?php
$name = '山田';              // 変数
$colors = ['red', 'blue'];   // 配列

foreach ($colors as $color) {
    echo $color;
}

function greet($name) {
    return 'こんにちは、' . $name;
}
?>

連想配列

$student = [
    'id' => 1,
    'name' => '山田'
];
echo $student['name'];

PDOのPDO::FETCH_ASSOCで取得する1行も、列名をキーにした連想配列です。

HTMLへ安全に表示

echo htmlspecialchars($name, ENT_QUOTES, 'UTF-8');

入力された文字をそのままHTMLへ出すと、スクリプトを埋め込まれる危険があります。出力時に変換します。

6. フォーム・GET・POST・Cookie・Session

GETとPOST

項目GETPOST
データの場所URLのクエリ文字列リクエスト本文
URL表示されるされない
ブックマーク条件ごと保存できるできない
主な用途検索・絞り込み・参照登録・更新・ログイン
POSTはURLに出ないだけで、暗号化ではありません。機密情報の通信にはHTTPSが必要です。

Null合体演算子

$name = $_POST['name'] ?? '';

$_POST['name']が存在し、nullでなければその値、そうでなければ空文字になります。送信前のUndefined array key警告を避けられます。空文字や0は存在する値なので、そのまま返されます。

CookieとSession

CookieSession
保存場所ブラウザサーバー
設定・開始setcookie()session_start()
読み取り$_COOKIE$_SESSION
用途設定保存などログイン状態など

7. SQL・データベースの基本

テーブル作成と制約

CREATE TABLE students (
  id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(100) NOT NULL,
  email VARCHAR(255) UNIQUE,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
制約意味
PRIMARY KEY行を一意に識別する主キー
AUTO_INCREMENT番号を自動で増やす
NOT NULLNULLを禁止
UNIQUE重複を禁止
DEFAULT省略時の初期値
FOREIGN KEY別テーブルのキーとの関係を保つ

CRUD

INSERT INTO students (name) VALUES ('山田');
SELECT id, name FROM students ORDER BY id;
UPDATE students SET name = '田中' WHERE id = 1;
DELETE FROM students WHERE id = 1;

Create INSERT、Read SELECT、Update UPDATE、Delete DELETEです。

8. PDO接続とCRUDの詳しい流れ

接続

$dsn = 'mysql:host=localhost;dbname=sample;charset=utf8mb4';
$user = 'root';
$password = '';

try {
    $dbh = new PDO($dsn, $user, $password);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    exit('データベース接続に失敗しました');
}

SELECT - 一覧表示

$stmt = $dbh->query('SELECT ID, NAME FROM colors');
$list = $stmt->fetchAll(PDO::FETCH_ASSOC);

foreach ($list as $rec) {
    echo htmlspecialchars($rec['NAME'], ENT_QUOTES, 'UTF-8');
}
query() → fetchAll() → foreach

INSERT - 追加

$name = $_POST['name'] ?? '';
$sql = 'INSERT INTO colors (NAME) VALUES (:name)';
$stmt = $dbh->prepare($sql);
$stmt->bindValue(':name', $name, PDO::PARAM_STR);
$stmt->execute();
$lines = $stmt->rowCount();

UPDATE - 更新

$sql = 'UPDATE colors SET NAME = :name WHERE ID = :id';
$stmt = $dbh->prepare($sql);
$stmt->bindValue(':name', $name, PDO::PARAM_STR);
$stmt->bindValue(':id', $id, PDO::PARAM_INT);
$stmt->execute();

DELETE - 削除

$sql = 'DELETE FROM colors WHERE ID = :id';
$stmt = $dbh->prepare($sql);
$stmt->bindValue(':id', $id, PDO::PARAM_INT);
$stmt->execute();
UPDATEとDELETEはWHEREを忘れると全行が対象になります。対象IDを確認してから実行します。

PDOの用語集

命令役割ポイント
query()SQLを直接実行外部入力を含まない固定SQL
prepare()SQLを実行前に準備プレースホルダを使用
bindValue()値と型を結び付ける文字列はPARAM_STR、整数はPARAM_INT
execute()準備したSQLを実行成功時はtrue
fetch()結果を1行取得whileで1件ずつ処理できる
fetchAll()結果を全行取得foreachで一覧表示
rowCount()影響行数INSERT・UPDATE・DELETE向け
SELECT件数を知る場合は、$list = $stmt->fetchAll(...)の後にcount($list)を使います。

10. Ajax・JSON

Ajaxはページ全体を再読み込みせず、JavaScriptからサーバーと通信する方法です。JSONはそのデータ交換によく使われます。

イベント発生 → AjaxでPHPを呼ぶ → PHPがDB検索 → JSONを返す → JavaScriptがDOM更新

PHP側

$stmt = $dbh->query('SELECT ID, NAME FROM colors');
$colors = $stmt->fetchAll(PDO::FETCH_ASSOC);
header('Content-Type: application/json; charset=UTF-8');
echo json_encode($colors);

JavaScript側

fetch('colors.php')
  .then(response => response.json())
  .then(colors => {
    colors.forEach(color => {
      console.log(color.NAME);
    });
  })
  .catch(error => console.error(error));
命令変換
json_encode()PHPの配列・値 → JSON文字列
json_decode()JSON文字列 → PHPの値
JSON.parse()JSON文字列 → JavaScriptの値
JSON.stringify()JavaScriptの値 → JSON文字列

11. 画像アップロード

通常のフォーム

<form method="post" enctype="multipart/form-data">
  <input type="file" name="upload" accept="image/*">
  <button type="submit">送信</button>
</form>
$file = $_FILES['upload'];
if ($file['error'] === UPLOAD_ERR_OK && is_uploaded_file($file['tmp_name'])) {
    move_uploaded_file($file['tmp_name'], $savePath);
}
$_FILESのキー内容
name元のファイル名
tmp_name一時保存先
sizeバイト数
typeブラウザ申告のMIMEタイプ
errorアップロードエラー番号

FileReaderとBase64

JavaScriptのFileReader.readAsDataURL()はファイルをData URLとして読み、プレビューなどに利用できます。Base64はバイナリデータを文字列で表す方式ですが、元データよりサイズが増えます。

12. メール送信・QRコード

メール

SMTPはメール送信に使うプロトコルです。PHPMailerではSMTPサーバー、認証情報、暗号化方式(TLS)、ポート(例:587)、送信元、宛先、件名、本文を設定します。

$raw = file_get_contents('php://input');
$data = json_decode($raw, true);

if (!filter_var($data['email'] ?? '', FILTER_VALIDATE_EMAIL)) {
    exit('メールアドレスが不正です');
}

QRコード

入力文字列やURLをQR生成処理へ渡します。URLのパラメータとして値を渡す場合はurlencode()で安全な形式に変換します。

SMTPパスワード、DBパスワード、秘密鍵などは、HTMLやソースコードへ直接書かず、安全な設定場所で管理します。

13. セキュリティ対策

危険内容基本対策
SQLインジェクション入力値でSQLを不正操作prepare()bindValue()
XSS入力されたスクリプトを画面で実行htmlspecialchars()
不正アップロード危険なファイルや巨大ファイルを送信サイズ・MIME・拡張子・保存先を検証
認証情報の漏えいパスワードや秘密鍵の公開ソースや共有Driveへ置かない
不正な入力形式外のメール・数値などfilter_var()や型・範囲の検証
「入力時に検証」「DBにはプレースホルダ」「HTML出力時にエスケープ」を分けて覚えます。

14. 試験前の最終確認

  • HTML・CSS・JavaScript・PHP・MySQLの役割を説明できる。
  • GETとPOST、CookieとSessionの違いを説明できる。
  • $_POST['name'] ?? ''の意味を説明できる。
  • 固定SELECTのquery → fetchAll → foreachを書ける。
  • 入力値ありのprepare → bindValue → executeを書ける。
  • INSERT・SELECT・UPDATE・DELETEのSQLを書ける。
  • rowCount()を使う場面とSELECTでの注意を説明できる。
  • LIKEの%の位置による違いを説明できる。
  • INNER JOINとLEFT JOINの違いを説明できる。
  • PHP配列とJSON、JavaScriptの間の変換を説明できる。
  • 画像アップロードのフォーム設定と$_FILESを説明できる。
  • SQLインジェクションとXSSの対策を書ける。
まず流れを覚える → コードを読む → 何も見ずに書く → テストHTMLで確認