php

input要素にcssを適用させる

CSS応用PHP

フォームで使用するinputやtextareaなどの要素は他の要素に比べて、ブラウザやデバイスのデフォルトのスタイルシートが多く指定されています。
特にこだわりがなければこのまま使用したり、多少手を加えるだけということもありますが、異なるブラウザやデバイスでも同じように表示させたい時にはCSSで多くのリセットが必要になります。
また、ネット上にあるリセットCSSの多くはフォーム周りのリセットがセットになっている物が一般的です。

フォーム周りのリセット

input, button, textarea, select {
  margin: 0;
  padding: 0;
  background: none;
  border: none;
  border-radius: 0;
  outline: none;
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
}


ただ、上記をそのまま使用すると記述した要素全てに適用され、ラジオボタンチェックボックスの枠まで消えるので、注意が必要です。


個別のinput要素

input要素で尚且つtype=”text”の要素にのみスタイルを適用させることで、ラジオボタンや送信ボタンなどにはスタイルは適用されないようにできます。

input[type="text"] {
  background: #999999;
}

www.nxworld.net

フォームのパーツにアニメーションを追加する「pretty checkbox」

PHPwebデザインwebサイト制作

チェックボックスラジオボタンにclassを加えるだけで、さまざまなデザインのチェックボックスラジオボタンが実装できるラリブラリ「pretty checkbox」。
角を丸くしたり、カラーをつけたり、アニメーションをclassを加えるだけで簡単に実装できます。

lokesh-coder.github.io

coliss.com

SEOに適した無限スクロールの制作

JavaScript

SEOに適した無限スクロールの導入

FacebookTwitterPinterestなどのソーシャルメディアサイトが使っている事で一躍有名になった無限スクロール(英: Infinite Scrolling)ですが、今でもシングルページを利用したウェブサイト、特にコンテンツの量が豊富なギャラリー的なサイトではよく見かけます。
しかし、よく見られるjQueryを使ったシンプルな無限スクロールはコンテンツをすべて1つのHTMLファイル上に記述しておいて、スクロールするたびに「display:block」と「display:none」を使って表示させていく、というものです。人が見る分にはこの形でも良いでしょうが、Googlebot に対してとなると話が変わってきます。

ご自身のサイトのニュース フィードやピンボードで、ユーザーの利便性を考えて無限スクロール(英語)を使用している方もいらっしゃるでしょう。しかし、Googlebot に対してとなると話が変わってきます。無限スクロールでは、クローラーがユーザーの行動(スクロールやボタンを押してさらにアイテムを読み込むなど)を常にエミュレートできるとは限らないため、フィードやギャラリー内のすべてのアイテムにアクセスできないことがあります。クローラーがアクセスできないコンテンツは、検索結果に表示されることもないでしょう。

無限スクロール ページからリンクされている個別のアイテムを検索エンジンがクロールできるようにするには、無限スクロールを分割した一連のページ群を生成するようにしましょう。

Google ウェブマスター向け公式ブログ: 検索エンジンとの相性を考慮した無限スクロールのベストプラクティス

pushStateによるブラウザの履歴の更新

pushStateとは?

pushStateとは、HTML5でサポートされるAPIです。
ページを遷移せずHTML(の一部)を変えた場合でもブラウザに履歴を残し、また一意のURLを割り当てることが可能です。

HTMLの中身が変わってもAjaxはページを遷移しないのでURLが同じままです(#以下が入れ替わるだけで一意のURLとして処理しない)。

ブラウザの戻るボタンを押しても前のコンテンツを再び表示させることはできません。
本当に前のページに戻ってしまいます。

なのでGoogleは、クロール・インデックスできるように特殊な仕様をサポートしてくれたわけです。

しかしpushStateを使えば、Ajaxで変化させたそれぞれのコンテンツに対してユニークなURLを割り当てられるのです。

つまり検索エンジンにとってクロール・インデックスしやすくなります。

Googleの記事では、無限スクロールは次々にページを捲っていく事と同じとしている。そのため、無限スクロールで新しいコンテンツが表示される度にブラウザの履歴(URL)を更新しなければいけない。さらにスクロールでページを進んだり戻ったりする度にURLを更新させる必要があります。

さらにJavaScriptが切れている状態でも手動でページ遷移出来るような設定も取り入れ、検索エンジンとの相性を考慮した無限スクロールにカスタマイズしましょう。

www.suzukikenichi.com

digiday.jp

前回の内容を踏まえて、今回は検索エンジンが処理しやすい無限スクロールを作っていきましょう。

今回のポイント
  • ajaxを使ったシームレスなページ遷移
  • HTML5APIを使い、各ページにユニークなURLやタイトルを最適化する事が出来る
  • 無限スクロールページを、JavaScript が無効でもアクセス可能な形にする。
  • 各コンテンツページにはトップページに自動的に戻るリダイレクト機能を実装
  • 相対パスはNGなのでルートパス、もしくは絶対パスを使用すること

– cssシグネチャーは使わない

メリット
  • SEOの向上
  • ページの表示速度の向上

特にページのタイトルの最適化は非常に大事です。通常の無限スクロールは1枚のhtmlファイルに無数のコンテンツが記述されていますが、今回のようにhtmlファイルを細分化する事で、コンテンツに応じたより細かいタイトルやURLの設定が可能になります。

github.com

<script>
		$('#container').cleverInfiniteScroll({
			contentsWrapperSelector: '#container',
			contentSelector: '.wrapper',
			nextSelector: '#next',
		});
	</script>

デモページ

http://yachin29.html.xdomain.jp/infini-scroll/

Javascriptによるリダイレクト

今回の無限スクロールはコンテンツページから入ってしまうとページの挙動がおかしくなってしまうので、コンテンツページに直接アクセス出来ないように、コンテンツページに直接アクセスした場合はトップページにリダイレクトする機能を付けます。
今回は前回のように「.htaccess」によるリダイレクトでは無く、Javascriptによるリダイレクトを試してみます。

setTimeout("redirect()", 0);
function redirect(){
    location.href='/infini-scroll/index.html';
}

トップページ


コンテンツページ

xamppでルートパスを使えるようにする

PHP

相対パス絶対パスに対して、3つ目のパスとしてルートパスというものがあります。
ルートパスとはサーバーのルート(一番上の階層)からみてのパスになります。PHPなどでファイルを呼び出すような時にはこのルートパスが非常に便利です。
しかし、ルートパスは通常ローカル環境では使用出来ないのですが、xamppなどの仮想サーバー下ではバーチャルホストの設定をすればローカルでもルートパスが使用可能になります。

バーチャルホスト

バーチャルホストとは1つのサーバーで複数のドメインを運用する技術のことですが、ここでは通常のPHPの授業で使っているlocalhostの設定とは別にルートパス用のバーチャルホストを設定してみます。

[C: /xampp/apache/conf/extra/httpd-vhosts.conf]

に以下の文を追加

<VirtualHost *:80>
DocumentRoot "C:/xampp/htdocs/ルートパスを設定したフォルダ/"
ServerName test
</VirtualHost>
[C: /windows/System32/drivers/etc/hosts]

の一番下に追加

127.0.0.1 test

pecoegg.com

データベースからデータを取得する

PHP

データベースからデータを取得するにはSELECT文を使います。

select フィールド名 from テーブル名 = 値 where 抽出条件;

フィールド名を1つ1つ指定しても良いのですが、全部を指定する場合はアスタリスク*を使います。

テーブルの中身を一括で取得する場合

'SELECT * FROM form WHERE 1';

ID番号で指定する

'SELECT * FROM form WHERE id=1';
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>登録データ一覧</title>
<link href="style.css" rel="stylesheet">
</head>
<body>
<?php
//データベースとの連結
 $dsn = 'mysql:dbname=mydb;host=localhost';
 $user = 'root';
 $password = '';//dbでパスワード設定していない場合はカラ
 $dbh = new PDO($dsn, $user, $password);
 $dbh -> query('SET NAMES UTF8');

//データベースのテーブルからデータを取得
 $sql = 'SELECT * FROM form WHERE 1';
 $stmt = $dbh -> prepare($sql);
 $stmt -> execute();



 //データがあるだけ全部取得
 while(1) {
   $rec = $stmt -> fetch(PDO::FETCH_ASSOC);
 
 //もうデータがなければ「break」でループから抜ける
   if($rec == false) {
        break;
   }

	// stmtから取得したデータを表示
  echo $rec['id'].':&nbsp;';
  echo $rec['name'].':&nbsp;';
  echo $rec['email'].':&nbsp;';
  echo $rec['gender'].':&nbsp;';
  echo $rec['message'];
  echo '<br>';
	}

 $dbh = null;
?>

</body>
</html>

PHPでの配列

PHP

配列はJavascriptでも出て来ましたが、まずは配列の特性を復習しましょう。
通常、変数は1つの値しか入れる事が出来ず、新しい値を入れると上書きされてしまいます。

一方、配列ではひとつの箱に複数の値を入れることができます。データベースと連動させる事の多いPHPではこの配列の使い方が非常に重要になってきます。

arrayを使った配列
<?php
$color = array('red', 'blue', 'green');
echo $color[0];
?>
arrayを使わないやり方
<?php
$color[0] = 'red';
$color[1] = 'blue';
$color[2] = 'green';
echo $color[1];
?>

配列に入っている値をすべて表示させる

配列に入っている値をすべて表示させたい場合、1つ1つ「echo文」で表示させる事は可能ですが、プログラム的には正しくありません。
配列の値を「あるだけすべて表示させたい」場合、便利なのが「foreach文」です。
foreach文は、配列の要素がある分だけ繰り返し処理するという内容の文です。

しかしforeach文の場合、1つ注意が必要です。

配列内の値を全て出力させる場合、配列名「$color」のままではダメなので「$value」という変数名に置き換える必要があります。

<?php
$color = array('red', 'blue', 'green');
foreach($color as $value){
echo $value . “<br>”;
?>

count関数

count関数を使っても、同じ事が出来ます。count関数を使うと、配列に入っている値の数が$countに代入されます。

<?php
$color = array('red', 'blue', 'green');
$count = count($color);

for ($i = 0; $i < $count; $i++) {
  echo "$color[$i]<br>";
}
?>

連想配列

配列には、変数の箱の中身に 0,1,2……と背番号のように番号を振り、その番号を指定することでデータを指定するという性質がありましたが、連想配列では、番号のかわりに名前をつけて管理することができます。
簡単に言うと配列は背番号(ID)でしか管理出来ないのに比べて、連想配列は好きに名前を付けて管理出来る利点があります。

配列変数名 = array( キー=>値1, キー=>値2, キー=>値3・・・);
<?php
$color = array('red' => '真っ赤', 'blue' => '真っ青', 'green' => '新緑');
echo $color['blue'];
?>
<?php

  $present = array ( '長崎' => 'チャンポン', '名古屋' => '手羽先', '沖縄' => '泡盛' );

  // キーを指定して、値を取得します
  echo $present['長崎'];
  echo '<br>';
  
  // キーを指定して、値を取得します
  echo $present['名古屋'];
  echo '<br>';
  
  // キーを指定して、値を取得します
  echo $present['沖縄'];
  echo '<br>';

配列を使う事でフォームのチェックボックスのように複数の解答があるような場合にも対応が出来ます。

<form action="sample.php" method="post">
    <p>好きな色(複数回答可): 
        <input type="checkbox" name="color[]" value="黒">黒
        <input type="checkbox" name="color[]" value="赤">赤
        <input type="checkbox" name="color[]" value="青">青
        <input type="checkbox" name="color[]" value="緑">緑
    </p>
    <p><input type="submit" value="送信"></p>
</form>

データを受け取る側のPHP

<?php
echo '<p>好きな色: ';
foreach( $_POST['color'] as $value ){
    echo "{$value} ";
}
echo '</p>';
?>

データをフォームからデータベースに保存する

PHP

今回はブラウザー上のフォームで入力したデータをデータベースに自動保存出来るようにします。

まずはXAMPPに新しいデータベース「form-0315」を作ります。
その次に以下の内容でテーブルを作成。

f:id:yachin29:20161219233236j:plain

カラムを作る際には、そのカラムのデータ型に注意しましょう。

・主なデータ型
INT型:数値。データ番号やIDなどの時。
VARCHAR型:文字数を指定。文字列の長さは変動。
TEXT型:巨大なテキストデータを保存する。
DATETIME型:日付。 投稿日時、最終更新日時など。

今回は500字以内のテキストデータを保存したかったので、VARCHAR型を選択。

データベースがちゃんと機能しているか、まずはSQLを使って手動で確認してみましょう。

INSERT INTO mytable (name, email, message) VALUES ('山田太郎', 'yamada@gmail.com', 'はじめまして。')


続いて、PHPファイルでフォームを作ります。

入力画面(input.php)
確認画面(confirm.php
登録画面(submit.php

session

セッションは、個々のユーザーのデータを格納する仕組みで、 個々のユーザーに対してセッション ID を用意します。 これを用いて、複数ページにまたがるリクエストの間で状態の情報を永続させることができます。 Cookie(クッキー)の仕組みととても似ていますが、Cookieはブラウザ側、セッションはサーバー側と、それぞれデータの保存場所が異なります。

// セッションの開始
session_start();


// 入力値をセッション変数に格納
$_SESSION['name'] = $name;
$_SESSION['email'] = $email;
$_SESSION['message'] = $message;

PDOでデータベースに接続し、SQLを実行する

PDO PHP Data Object

データベースでの実行は、「データベースに接続」して「データベースを捜査する許可を得る」必要があります
そのために「PDO」という命令を使って、「ユーザー名」と「パスワード」を設定します
通常のオブジェクトと同様、このオブジェクトの中には「データベースへの接続」や「SQLの実行」「実行結果の取得」などデータベースを使ったアプリケーション開発に必要な命令がそろっています。

データベースに接続する為に必要な情報

データベースサーバー:MySQL
サーバーコンピューター:localhost(XAMPPの場合)
使用するデータベース名:mydb
ユーザー名:root
パスワード:root (MAMPの場合)

// 接続設定
  $user = 'root';
  $pass = '';

  // データベースに接続
 $dsn = 'mysql:host=localhost;dbname=form-0315;charset=utf8';
 $conn = new PDO($dsn, $user, $pass); //「$conn」は、任意のオブジェクト名
  
  // データの追加
 $sql = 'INSERT INTO mytable(name, email, message) VALUES("'.$name.'","'.$email.'","'.$message.'")';
 $stmt = $conn -> prepare($sql);
 $stmt -> execute();

入力画面に戻る

何か入力ミスをして、入力画面に戻った際に入力内容が全て消えていると、また最初から記入する必要があります。入力画面に戻った際に入力したデータが保持されていれば、訂正したい箇所だけ直してまた送信する事が出来ます。細かい事ですが、この設定をするとしないではフォームの離脱率に非常に影響が出るので、設定しましょう。
今回は簡単なJavascriptを使った方法で、データを保持したまま入力画面に戻る機能をつけましょう。

Webデザイナーになって理想のキャリアを実現しませんか?

buttonタグの場合

<button type="button" onclick="history.back()">戻る</button>


inputタグの場合

<input value="前に戻る" onclick="history.back();" type="button">

input.php

<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>DBに接続しているフォーム|入力画面</title>
<link rel="stylesheet" href="css/form.css">
</head>

<body>
<div class="container">
<h1>入力画面</h1>
<form action="confirm.php" method="post">
<dl>
<dt>お名前</dt><dd><input type="text" name="name" required placeholder="山田 太郎"></dd>
<dt>メールアドレス</dt><dd><input type="email" name="email" required></dd>

<dt>性別</dt>
<dd>
<input type="radio" name="gender" value="男性" checked id="man"><label for="man">男性</label>
<input type="radio" name="gender" value="女性" id="woman"><label for="woman">女性</label>
</dd>


<dt>お問い合わせ内容</dt><dd><textarea name="message" required cols="40" rows="5"></textarea></dd> 
</dl>
<p><input type="submit" value="確認画面へ"></p>
</form>
</div>
</body>
</html>


confirm.php

<?php
if(!(isset($_POST['name']))){
//$_POST["name"]の値が空だったらLocationで指定しているファイルに強制移動(リダイレクト)させる
 header('Location:input.php');
 exit;
}

$name = htmlspecialchars($_POST["name"], ENT_QUOTES);
$email = htmlspecialchars($_POST["email"], ENT_QUOTES);
$gender = $_POST["gender"];
$message = htmlspecialchars($_POST["message"], ENT_QUOTES);

session_start();
$_SESSION['name'] = $name;
$_SESSION['email'] = $email;
$_SESSION['gender'] = $gender;
$_SESSION['message'] = $message;
?>
<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>DBに接続しているフォーム|確認画面</title>
<link rel="stylesheet" href="css/form.css">
</head>

<body>
<div class="container">
<h1>確認画面</h1>
<form action="submit.php" method="post">
<dl>
<dt>お名前</dt><dd><?php echo $name ?></dd>
<dt>メールアドレス</dt><dd><?php echo $email ?></dd>
<dt>性別</dt><dd><?php echo $gender ?></dd>
<dt>お問い合わせ内容</dt><dd><?php echo $message ?></dd> 
</dl>
<p>
<input type="submit" value="送信">
<input type="button" value="戻る" onclick="history.back();">
</p>
</form>
</div>
</body>
</html>


submit.php

<?php
// セッションの開始
session_start();

$name = $_SESSION['name'];
$email = $_SESSION['email'];
$gender = $_SESSION['gender'];
$message = $_SESSION['message'];
//サーバーに保存されているsessionデータを変数に代入
?>
<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>DBに接続しているフォーム|送信画面</title>
</head>

<body>
<div class="container">
<h1>完了しました。</h1>
<p>お問い合わせありがとうございました。</p>
<?php
// DB接続設定
$user = 'root';//DBユーザー名
$pass = '';//DBパスワード

 //DBに接続
 $dsn = 'mysql:host=localhost;dbname=form-0315;charset=utf8';
$conn = new PDO($dsn, $user, $pass);
//「$conn」は、任意のオブジェクト名

// データの追加
 $sql = 'INSERT INTO mytable(name, email, gender, message) VALUES("'.$name.'","'.$email.'","'.$gender.'","'.$message.'")';

$stmt = $conn -> prepare($sql);
$stmt -> execute();

//最後にセッション情報を破棄
session_destroy();
?>
</div>
</body>
</html>
Webデザイナーになって理想のキャリアを実現しましょう!!

PHPでのセッション

PHP

セッション(session)とは

セッションとは、コンピュータのサーバー側に一時的にデータを保存する仕組みのことです。たとえば、あるECサイトへのログイン情報やユーザー情報など、ユーザーに直接紐づくようなデータをセッションに格納して使ったりします。
以前、授業で使ったCookie(クッキー)の仕組みと似ていますが、Cookieはブラウザ側、セッションはサーバー側と、それぞれデータの保存場所が異なります。サーバーにデータを保存するセッションのほうがよりセキュリティ的に安全だと言われています。


セッションの使い方

セッションを使う場合、まず最初にsession_start関数 を使い、スタートさせてからその下に諸々を書いていきます。

session_start();


次にセッションを使ってデータを保存したい場合は、セッション用のグローバル変数を使用します。

<?php
session_start();

$name = 'yajima';

$_SESSION['name'] = $name;

echo $_SESSION['name'];
?>

この時点で、サーバー(XAMPP)にセッションデータが保存されているので、確認してみましょう。XAMPPの場合だとhtdocsフォルダと同じ階層のtmpフォルダに作成されているので確認してみましょう。


セッションのデータの中身を削除
<?php
session_start();

$name = 'yajima';

$_SESSION['name'] = $name;

echo $_SESSION['name'];

unset($_SESSION['name'] );
?>
セッションごと削除
<?php
session_start();

$name = 'yajima';

$_SESSION['name'] = $name;

echo $_SESSION['name'];

session_destroy();
?>

メールフォーム(データベースに接続してないバージョン)

PHP

メールフォーム(データベースに接続してないバージョン)

今回のメールフォームは非常にシンプルでデータベースには接続せず、フォームを記入してくれた人とフォームの管理者(自分)に、フォームに記入された内容がメールで届くようになっています。


mb_send_mail 関数

メールを実際に送るには mb_send_mail 関数を使用します。mb_send_mail 関数を使用する場合、文字コードに注意が必要です。PHPのお問い合わせフォームを制作して、文字化けしてしまったメールを送信してしまう、といったケースが良くあるので注意が必要です。

// メール本文の文字コード設定
mb_language("Japanese");
mb_internal_encoding("UTF-8");


//差出人の設定
"From:".mb_encode_mimeheader("管理者もしくは店舗名");

必要なファイルは
input.php(フォーム入力画面)
comfirm.php(フォーム内容確認画面)
submit.php(完了画面)

の3つです。

input.phpは以前制作したものでOK

comfirm.phpではポイントは2つ

入力項目に不備がある場合「onClick=”history.back()」を使ってinput.phpに戻るよう設定
comfirm.phpから入れないようにリダイレクトの設定

入力画面の作成

<h1>入力画面</h1>
<form method="post" action="comfirm.php">
<dl>
<dt>お名前</dt>
<dd>
<input type="text" name="name" required>
</dd>
<dt>メールアドレス</dt>
<dd>
<input type="email" name="email" required>
</dd>
<dt class="txt-box">お問い合わせ内容</dt>
<dd class="txt-box">
<textarea name="message" rows="10" cols="40" required>
</textarea>
</dd>
</dl>
<p>
<input type="submit" value="確認画面へ">
<input type="reset" value="リセット">
</p>
</form>

確認画面の作成

<?php
if( !(isset($_POST['name']))  ){
	header('Location:input.php');
	 exit;
}
$name = htmlspecialchars($_POST["name"], ENT_QUOTES);
$email = htmlspecialchars($_POST["email"], ENT_QUOTES);
$message = htmlspecialchars($_POST["message"], ENT_QUOTES);


// セッションの開始
session_start();
// 入力値をセッション変数に格納
$_SESSION['name'] = $name;
$_SESSION['email'] = $email;
$_SESSION['message'] = $message;

?>
<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>確認画面</title>
<link rel="stylesheet" href="css/style.css">
</head>

<body>
<h1>確認画面</h1>
<form method="post" action="#">
<p>入力内容に間違いがなければ「送信ボタン」を、<br>間違いがあれば「入力画面に戻るボタン」をクリックして下さい。</p>
<dl>
<dt>お名前</dt>
<dd><?php echo $name;?></dd>
<dt>メールアドレス</dt>
<dd><?php echo $email;?></dd>
<dt class="txt-box">お問い合わせ内容</dt>
<dd class="txt-box"><?php echo $message;?></dd>
</dl>
<p>
<input type="button" value="入力画面に戻る" onclick="history.back();" >
<input type="submit" value="送信">
</p>

</form>

完了画面の作成

submit.phpでのポイントはヒアドキュメントを使う事。ヒアドキュメントを使うと、改行など自由に使ってテキストを出力させる事が出来る。
今回はこのヒアドキュメントをお礼メールの内容の部分に使ったので、お礼メールの文章などを好きに、簡単に、自分なりにアレンジ出来る。
また、今回はcomfirm.phpからsubmit.phpへはsessionでデータを送る。

Webデザイナーになって理想のキャリアを実現しませんか?

mb_language(“Japanese”);
mb_internal_encoding(“UTF-8“);

“From:”.mb_encode_mimeheader(“管理者もしくは店舗名”);

submit.php
<?php
// セッションの開始
session_start();

$name = $_SESSION['name'];
$email = $_SESSION['email'];
$message = $_SESSION['message'];

?>
<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>send_mail関数を実行</title>
</head>

<body>
<p>お問い合わせありがとうございました。</p>
<?php
// メール本文の文字コード設定
mb_language("Japanese");
mb_internal_encoding("UTF-8");


$to = "{$email}";
$title = "【お問い合わせメールフォームより】";

//差出人の設定
$headers = "From:".mb_encode_mimeheader("管理者もしくは店舗名");
$headers.="\n";
$headers.="Bcc: example000.com";//管理者のメールにBCCで送信


$body =  <<<EOM
------------------------------------------------------
【お問い合せ内容の確認】

お名前:{$name}
メールアドレス:{$email}
メッセージ:{$message}


{$name}様、お問い合わせ、誠にありがとうございました。
後ほど、担当の者よりご連絡いたしますので、お待ちください。

-------------------------------------------------------
EOM;

// メール送信の実行
$rc = mb_send_mail($to, $title, $body, $headers);

if (!$rc) {
    exit;
} else {
    $_SESSION = NULL;
}



//セッション情報を破棄
session_destroy();
?>
</body>
</html>

phpでのヒアドキュメント

PHP

PHPで何行にも渡る長い文章を出力する場合、ヒアドキュメントを使うと改行など自由に使ってテキストを出力させる事が出来ます。
また、長い文字列を変数に代入する際にも使用します。

未経験でもWEB業界に挑戦したい!

ヒアドキュメントの場合

<?php

$purpose = 'フォーム';

echo <<< EOM
PHPとは、HTMLへの埋め込み型プログラミング言語です。<br>
正式名称は「PHP: Hypertext Preprocessor」です。<br>
PHPは{$purpose}などで利用されます。<br>
最新バージョンは7.4.0です。
EOM;
?>

ヒアドキュメントを変数に代入した形

<?php

$purpose = 'フォーム';

$str = <<<EOM
PHPとは、HTMLへの埋め込み型プログラミング言語です。<br />
正式名称は「PHP: Hypertext Preprocessor」です。<br />
PHPは{$purpose}などで利用されます。<br>
最新バージョンは7.4.0です。
EOM;

echo $str;
?>