魁小野の塾

魁!小野の塾 PHPで簡単なプログラムを作ってみようの巻 第4話


PHPで簡単なプログラムを作ってみよう 第4話

初心者向け、PHPプログラム構築講座です。
初心者といっても、PHPの勉強を少し行い、LAMP環境が自分で構築できるレベルを対象とします。
まったくの初心者の場合は、わからない部分が出てくると思います。
できるだけ細かく説明は入れていきますが、説明がわからない場合は、PHPやMySQLの初心者講座をご覧ください。

対象のスキルレベル

  • LAMP環境の構築
  • PHP言語が読める
  • HTML, CSS, Javascriptが少しわかる
  • Bootstrapのドキュメントをみて、HTMLが書ける
  • CDNを理解している

構築環境

  • Windows10
  • XAMPP(PHP7.3.2, MariaDB 10.1.38)

Form

入力フォームの内容を作成していきたいと思います。
入力項目は2つで、名前と内容になります。

BootstrapForms 部分を見ていきます。

デフォルトの表示では、ラベルの後に入力フィールドが表示されます。
入力フィールドには、class=”form-control” をつけるだけです。

ちなみに、formでサーバ側へ送信できるタグは、INPUT要素, SELECT要素, TEXTAREA要素だけです。

Horizontal form

今回は、名前をINPUT要素, 内容をTEXTAREA要素で作成していきます。
項目名の横に入力フォームが表示されるように、Horizontal form を利用します。

HEADER要素の下に、MAIN要素を追加し、containerクラスを付加したあと、Formsの内容を少しコピーして作成していきます。

Form部分の追加(抜粋)
<main class="container">
	<form>
		<div class="form-group row">
			<label for="author" class="col-sm-2 col-form-label">名前</label>
			<div class="col-sm-10">
				<input type="text" name="author" class="form-control" id="author" placeholder="名前" autofocus>
			</div>
		</div>
		<div class="form-group row">
			<label for="content" class="col-sm-2 col-form-label">内容</label>
			<div class="col-sm-10">
				<textarea name="content" class="form-control" id="content" rows="10" placeholder="内容を入力してください"></textarea>
			</div>
		</div>
		<div class="form-group row">
			<div class="offset-sm-2 col-sm-10">
				<button type="submit" class="btn btn-primary"><i class="fas fa-paper-plane"></i> 送信</button>
			</div>
		</div>
	</form>
</main>

コピー後に編集した内容を記載します。

  • 送信するINPUT要素, TEXTAREA要素には、name属性を入れておきます。
  • LABEL要素のfor属性は、INPUT要素及びTEXTAREA要素のid属性に一致させておきます。
    この設定を正しく行うと、項目ラベルをクリックした際に、入力フィールドにフォーカスが当たるようになります。
  • placefolder属性は、未入力時にグレーの文字で代替えテキストを表示してくれます。
  • 初期表示時にフォーカスが名前の入力フィールドにあたるように、autofocus属性を付加しておきます。
  • TEXTAREA要素は、行を指定できるので、10行分の表示としてrow属性を指定します。
  • ボタンの「送信」文字部分にアイコンを追加します。
  • ボタンの配置は、項目表示分ずらしたいので、offset-*のクラスを指定します。

Validation

入力チェック時に便利なクラスがあります。
※参考 Validation

入力フィールドにエラーがある場合は、is-invalid
入力フィールドにエラーがない場合は、is-valid
をつけると表示が赤枠(is-invalid)や緑枠(is-valid)に変わります。

入力エラーなどを表示する場合、invalid-feedbackを利用すると、is-invalidクラスが付加された兄弟要素の場合に表示されます。
兄弟要素に、is-invalid や is-valid がない場合は、表示されません。

Validation追加(抜粋)
<main class="container">
	<form>
		<div class="form-group row">
			<label for="author" class="col-sm-2 col-form-label">名前</label>
			<div class="col-sm-10">
				<input type="text" name="author" class="form-control is-valid" id="author" placeholder="名前" autofocus>
				<div class="valid-feedback">
					名前の入力は正しいです。
				</div>
				<div class="invalid-feedback">
					名前を正しく入力してください。
				</div>
			</div>
		</div>
		<div class="form-group row">
			<label for="content" class="col-sm-2 col-form-label">内容</label>
			<div class="col-sm-10">
				<textarea name="content" class="form-control is-invalid" id="content" rows="10" placeholder="内容を入力してください"></textarea>
				<div class="valid-feedback">
					内容の入力は正しいです。
				</div>
				<div class="invalid-feedback">
					内容を正しく入力してください。
				</div>
			</div>
		</div>
		<div class="form-group row">
			<div class="offset-sm-2 col-sm-10">
				<button type="submit" class="btn btn-primary"><i class="fas fa-paper-plane"></i> 送信</button>
			</div>
		</div>
	</form>
</main>

6行目, 18行目に指定している、is-valid, is-invalid を外したり、付け替えたりして、どのように表示されるかを確認してください。
今回は、is-invalidのみ利用しますが、invalid-feedbackは利用しない予定です。
アラートとして、メッセージ自体を表示する仕様にしているためです。

現時点の最新HTML
<!DOCTYPE html>
<html lang="ja">
	<head>
		<!-- Required meta tags -->
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

		<!-- Bootstrap CSS -->
		<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css"
			integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
		<!-- Font Awesome CSS -->
		<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.1.0/css/all.css"
			integrity="sha384-lKuwvrZot6UHsBSfcMvOkWwlCMgc0TaWr+30HWe3a4ltaBwTZhyTEggF5tJv8tbt" crossorigin="anonymous">
		<!-- Animate.css CSS -->
		<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css" />
		<!-- Sawarabi Gothic -->
		<link href="https://fonts.googleapis.com/css?family=Sawarabi+Gothic" rel="stylesheet">

		<link rel="stylesheet" href="assets/css/style.css" />

		<title>掲示板 | tech.pjin.jp</title>
	</head>
	<body>
		<header>
			<nav class="navbar navbar-expand-lg navbar-dark bg-info fixed-top">
				<section class="container">
					<a class="navbar-brand" href="#">
						<h1 class="animate__animated animate__backInRight"><i class="far fa-clipboard"></i> 掲示板</h1>
					</a>
					<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarText" aria-controls="navbarText" aria-expanded="false" aria-label="Toggle navigation">
						<span class="navbar-toggler-icon"></span>
					</button>
					<div class="collapse navbar-collapse" id="navbarText">
						<span class="navbar-text animate__animated animate__bounce animate__delay-3s">
							<i class="fas fa-heart"></i> 好きなこと書いて生きよう!
						</span>
					</div>
				</section>
			</nav>
		</header>
		<main class="container">
			<form>
				<div class="form-group row">
					<label for="author" class="col-sm-2 col-form-label">名前</label>
					<div class="col-sm-10">
						<input type="text" name="author" class="form-control" id="author" placeholder="名前" autofocus>
					</div>
				</div>
				<div class="form-group row">
					<label for="content" class="col-sm-2 col-form-label">内容</label>
					<div class="col-sm-10">
						<textarea name="content" class="form-control" id="content" rows="10" placeholder="内容を入力してください"></textarea>
					</div>
				</div>
				<div class="form-group row">
					<div class="offset-sm-2 col-sm-10">
						<button type="submit" class="btn btn-primary"><i class="fas fa-paper-plane"></i> 送信</button>
					</div>
				</div>
			</form>
		</main>
		<!-- Optional JavaScript -->
		<!-- jQuery first, then Popper.js, then Bootstrap JS -->
		<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"
			integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
		<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"
			integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
		<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"
			integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script>
	</body>
</html>

魁!小野の塾 PHPで簡単なプログラムを作ってみようの巻

  • このエントリーをはてなブックマークに追加

PAGE TOP