<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Web制作 &#8211; Party-Hearty</title>
	<atom:link href="https://creator-kid.com/tag/web%E5%88%B6%E4%BD%9C/feed/" rel="self" type="application/rss+xml" />
	<link>https://creator-kid.com</link>
	<description>人生なんて死ぬまでの暇つぶし。</description>
	<lastBuildDate>Thu, 17 Apr 2025 02:09:55 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://creator-kid.com/wp-content/uploads/2022/06/favicon_pink.ico</url>
	<title>Web制作 &#8211; Party-Hearty</title>
	<link>https://creator-kid.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Webデザイナーとコーダーで違う？覚えておきたいフリーランスの請求書と源泉徴収</title>
		<link>https://creator-kid.com/code/webdesign_invoice/</link>
		
		<dc:creator><![CDATA[Ryuji]]></dc:creator>
		<pubDate>Wed, 03 Aug 2022 15:41:59 +0000</pubDate>
				<category><![CDATA[CODE]]></category>
		<category><![CDATA[Web制作]]></category>
		<category><![CDATA[お金]]></category>
		<category><![CDATA[フリーランス]]></category>
		<category><![CDATA[税金]]></category>
		<guid isPermaLink="false">https://creator-kid.com/?p=4802</guid>

					<description><![CDATA[Webデザイナーとコーダーで違う？覚えておきたいフリーランスの請求書と源泉徴収 Web制作会社で働き始める前に外注として請け負った案件について請求書を作っていたのだが、ググってサンプルをいくつか見ていたら源泉徴収税を含ん...]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Webデザイナーとコーダーで違う？覚えておきたいフリーランスの請求書と源泉徴収</h2>



<p>Web制作会社で働き始める前に外注として請け負った案件について請求書を作っていたのだが、ググってサンプルをいくつか見ていたら源泉徴収税を含んでいるのと含んでいないのとまちまちでした。</p>



<p>調べてみると、同じWeb制作に携わるデザイナーとコーダーとでは請求書の中身が変わってくることがわかりました。</p>



<p>正直フリーランスだと源泉徴収なんて無縁なのかと思い込んでいたから、良い機会ということでまとめておきます。</p>



<h3 class="wp-block-heading">フリーランスが源泉徴収される場合</h3>



<p>フリーランスが報酬の支払いを受ける際、源泉徴収の対象になるものはたくさんあるみたいですが、そのなかに<strong>デザイン料</strong>には源泉徴収がかかります！</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>（デザインとその施工の対価を一括して支払う場合）</p><p><strong>204－8　</strong>ネオンサイン、広告塔、ショーウインドー、陳列棚、商品展示会場又は庭園等のデザインとその施工とを併せて請け負った者にその対価を一括して支払うような場合には、その対価の総額をデザインの報酬又は料金と施工の対価とに区分し、デザインの報酬又は料金について源泉徴収を行うべきであるが、そのデザインの報酬又は料金の部分が極めて少額であると認められるときは、源泉徴収をしなくて差し支えない。</p><cite>国税庁HP参照 <a href="https://www.nta.go.jp/law/tsutatsu/kihon/shotoku/36/02.htm" target="_blank" rel="noopener">https://www.nta.go.jp/law/tsutatsu/kihon/shotoku/36/02.htm</a></cite></blockquote>



<p>基本的に、デザインとコーディングは一括で請求書を発行すると思いますが、公式にはデザイン業務とコーディング業務の報酬は区分して、デザイン料には源泉徴収がかかりコーディング料には源泉徴収がかからないことになります。</p>



<p>ただし、デザインの報酬が極めて少額であると認められる時は源泉徴収を差し支えなくてよいとされているみたいです。</p>



<h3 class="wp-block-heading">源泉徴収の計算方法</h3>



<p>源泉徴収の金額は、100万円を規準に計算式が変わります。</p>



<h4 class="wp-block-heading">報酬額100万円以下の場合</h4>



<div class="wp-block-stk-plugin-cbox-notitle cbox is-style-site_color type_normal"><div class="cboxcomment">
<p>支払金額×10.21%＝源泉徴収税額</p>
</div></div>



<p>なので、報酬額が100万円の場合は</p>



<p>100万円×10.21%＝10万2,100円</p>



<p>となります。</p>



<h4 class="wp-block-heading">報酬額が100万円超える場合</h4>



<div class="wp-block-stk-plugin-cbox-notitle cbox is-style-site_color type_normal"><div class="cboxcomment">
<p>（支払金額－100万円）×20.42%＋10万2,100円＝源泉徴収税額</p>
</div></div>



<p>報酬金額が200万円の場合だと</p>



<p>（200万円－100万円）×20.42%＋10万2,100円＝30万6,300円</p>



<p>となります。</p>



<p>100万円を規準に、源泉徴収の金額は計算式が変わります。税率のうち0.21％（100万円以上は0.42％）は復興特別所得税が含まれています。</p>



<h3 class="wp-block-heading">まとめ</h3>



<p>同じWeb制作の仕事をしているデザイナーとコーダー・プログラマーでは報酬にかかってくる税金が変わってくるなんて知りませんでした。</p>



<div class="wp-block-stk-plugin-cbox-notitle cbox is-style-site_color type_normal"><div class="cboxcomment">
<ul class="wp-block-list"><li>デザイナー：報酬額＋消費税＋源泉徴収</li><li>コーダー・プログラマー：報酬額＋消費税</li></ul>
</div></div>



<p>こういう知識はしっかりと身につけていきたいですね。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【PHP】$_POSTと$_SESSIONを使ってフォームの値を送信する方法を解説</title>
		<link>https://creator-kid.com/code/php-post_session/</link>
		
		<dc:creator><![CDATA[Ryuji]]></dc:creator>
		<pubDate>Mon, 14 Feb 2022 14:52:55 +0000</pubDate>
				<category><![CDATA[CODE]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web制作]]></category>
		<category><![CDATA[職業訓練]]></category>
		<guid isPermaLink="false">https://creator-kid.com/?p=4419</guid>

					<description><![CDATA[$_POSTと$_SESSIONを使用して値を送る仕組み 今回用意された問題は、「ロジック」と「ビュー（HTML）」を別ファイル管理しています。実際の現場でもこのスタイルで仕事を進めていくことが多いそうです。 PHPはH...]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading" id="postと-sessionを使用して値を送る仕組み">$_POSTと$_SESSIONを使用して値を送る仕組み</h2>



<p>今回用意された問題は、「ロジック」と「ビュー（HTML）」を別ファイル管理しています。実際の現場でもこのスタイルで仕事を進めていくことが多いそうです。</p>



<p>PHPはHTML内にプログラミングを書き込める利便性がある反面、ソースコードが複雑になりがちです。しかし、ファイルの読み込みを使用することでデザインとプログラムを分離することができます。</p>



<p>「ロジック」と「ビュー（HTML）」を別ファイル管理するメリットは、「ロジック担当者（プログラマー）」と「ビュー担当者（コーダー）」で作業内容が違うので、両者とも自分が担当している作業を分業しながらWebシステムを作成することができます。</p>



<p>デメリットは、画面に表示する値（変数）を「ロジック担当者」と「ビュー担当者」で共有しておかなければなりません。</p>



<div class="wp-block-stk-plugin-cbox-notitle cbox is-style-site_color type_normal"><div class="cboxcomment">
<ul class="wp-block-list"><li>ロジック担当者（プログラマー）：ロジック部分作成</li><li>ビュー担当者（コーダー）：各パーツをコーディング</li></ul>
</div></div>



<h3 class="wp-block-heading" id="ページ遷移図">ページ遷移図</h3>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="768" src="https://creator-kid.com/wp-content/uploads/2022/02/img_2486-1024x768.jpg" alt="" class="wp-image-4454" srcset="https://creator-kid.com/wp-content/uploads/2022/02/img_2486-1024x768.jpg 1024w, https://creator-kid.com/wp-content/uploads/2022/02/img_2486-300x225.jpg 300w, https://creator-kid.com/wp-content/uploads/2022/02/img_2486-768x576.jpg 768w, https://creator-kid.com/wp-content/uploads/2022/02/img_2486-485x364.jpg 485w, https://creator-kid.com/wp-content/uploads/2022/02/img_2486.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>この遷移図は理解しているとすごくわかりやすいのですが、理解できてないとチンプンカンプンだと思います。</p>



<p>この遷移図は、ユーザ入力画面からユーザ情報をフォーム（$_POST）と$_SESSIONで値を受け渡し、DB（データベース）に登録するまでの流れを表しています。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="768" src="https://creator-kid.com/wp-content/uploads/2022/02/img_2485-1024x768.jpg" alt="" class="wp-image-4453" srcset="https://creator-kid.com/wp-content/uploads/2022/02/img_2485-1024x768.jpg 1024w, https://creator-kid.com/wp-content/uploads/2022/02/img_2485-300x225.jpg 300w, https://creator-kid.com/wp-content/uploads/2022/02/img_2485-768x576.jpg 768w, https://creator-kid.com/wp-content/uploads/2022/02/img_2485-485x364.jpg 485w, https://creator-kid.com/wp-content/uploads/2022/02/img_2485.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div class="wp-block-stk-plugin-cbox cbox intitle is-style-site_color type_normal"><div class="box_title"><span class="span__box_title">ポイント</span></div><div class="cboxcomment">
<ul class="wp-block-list"><li>$_POSTと$_SESSIONの使い所</li><li>$_SESSIONの動向</li></ul>
</div></div>



<h3 class="wp-block-heading" id="functions-php">functions.php</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-file="functions.php" data-lang="PHP"><code>&lt;?php
function h($val)
{
  return htmlspecialchars($val, ENT_QUOTES, &#39;UTF-8&#39;);
}
function v($val)
{
  echo &#39;&lt;pre&gt;&#39;;
  var_dump($val);
  echo &#39;&lt;/pre&gt;&#39;;
}</code></pre></div>



<p>functions.phpによく使う関数を共通関数として登録しておく。</p>



<h4 class="wp-block-heading" id="h関数-サニタイジング用関数を定義">h関数：サニタイジング用関数を定義</h4>



<p>ユーザーが入力した値を使用する場合は注意（セキュリティ対策）が必要です。なぜならば、悪意があるユーザーが悪意ある値を入力してくる場合があるからです。不正なJavaScriptコードを使用して他のサイト訪問者に攻撃を仕掛けることを<strong>クロスサイトスクリプティング(XSS)</strong>と呼びます。</p>



<p>こういったトラブルを防ぐには、htmlspecialchars()関数でHTMLで意味をもつ記号をエスケープします。</p>



<p><strong>htmlspecialchars()関数：HTMLタグを無効化する関数</strong></p>



<p>第１引数($val)：string変換対象文字列<br>第２引数(ENT_QUOTES)：ENT_QUOTES→シングルクォートとダブルクォートを共に変換<br>第３引数(&#8216;UTF-8&#8217;)：stringエンコード</p>



<p>htmlspecialchars()関数を実行すると、HTMLで意味を持つ記号を実体参照に置き換えてくれます。(ex. 「&lt;」 → 「&amp;lt;」,「&amp;」→「&amp;amp;」)</p>



<p>このようなエスケープ操作のことをサニタイジングや無害化と呼びます。</p>



<h4 class="wp-block-heading" id="v関数-デバッグ用関数を定義">v関数：デバッグ用関数を定義</h4>



<p>デバック時に使用するvar_dump()関数をpreタグで囲んだ関数を定義しておく。preタグで囲むことでvar_dump()関数を表示した際に見えやすくしている。</p>



<h3 class="wp-block-heading" id="form1-php">form1.php</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-file="form1.php" data-lang="PHP"><code>&lt;?php
session_start();
session_regenerate_id(TRUE);

require_once __DIR__ . &#39;/functions.php&#39;;


v($_SESSION);
$name    = isset($_SESSION[&#39;name&#39;])    ? $_SESSION[&#39;name&#39;]    : NULL;
$subject = isset($_SESSION[&#39;subject&#39;]) ? $_SESSION[&#39;subject&#39;] : NULL;
$body    = isset($_SESSION[&#39;body&#39;])    ? $_SESSION[&#39;body&#39;]    : NULL;

require &#39;form1_view.php&#39;;</code></pre></div>



<h4 class="wp-block-heading" id="session-start-関数-セッション変数利用開始する関数">session_start()関数：セッション変数利用開始する関数</h4>



<p>session_start()関数を呼び出すことで、サーバ側に値を保存するセッション変数「$_SESSION」を使用できるようになります。他のページと値を共有したいときに使用します。</p>



<p>セッションは、クッキーを使ってユーザを認識し必要なデータをサーバ側に保存して使用します。データがサーバ側に保存されるため、悪意あるユーザにデータを改ざんされる心配がありません。クッキーに比べて安全性が高く、データ量の制限も実質ありません。</p>



<h4 class="wp-block-heading" id="session-regenerate-id-関数-セッションidを再発行する関数">session_regenerate_id()関数：セッションIDを再発行する関数</h4>



<p>セッションハイジャック対策でPHPSESSIDの値を変更する。引数は常に「<strong>TRUE</strong>」を指定し、古いセッションファイルを削除する。ログイン時やセッション開始ページ、一定時間経過したときにセッションIDを新たに設定することで、セッションハイジャックの危険性を減らすことができます。</p>



<p>複数ページで処理する場合は、始点となるファイルでPHPSESSIDの値を変更することが多い。</p>



<h4 class="wp-block-heading" id="require-once-dir-functions-php-共通関数の読み込み">require_once <strong>DIR</strong> . &#8216;/functions.php&#8217;：共通関数の読み込み</h4>



<p>functions.phpに登録した共通関数のh関数とv関数を使用できるように、共通関数ファイルを読み込む。</p>



<h4 class="wp-block-heading" id="三項方程式">三項方程式</h4>



<p>今回ビューファイルで必要な値「名前」「件名」「本文」をロジックで用意している。</p>



<p>$name = isset($_SESSION[&#8216;name&#8217;]) ? $_SESSION[&#8216;name&#8217;] : NULL;</p>



<p>三項方程式を使用し、 isset($_SESSION[&#8216;name&#8217;])は「$_SESSION[&#8216;name&#8217;]」が存在するか調べます。初回アクセス時はまだ「$_SESSION[&#8216;name&#8217;]」は存在しないので、変数にはfalseの「NULL」を代入します。</p>



<h4 class="wp-block-heading" id="require-form1-view-php">require &#8216;form1_view.php&#8217;;</h4>



<p>reqiuireを使ってパーツ化したコンテンツを読み込みます。</p>



<p>form1.phpでは「form1_view.php」ファイルを読み込みます。</p>



<h3 class="wp-block-heading" id="form1-view-php">form1_view.php</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-file="form1_view.php" data-lang="PHP"><code>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ja&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;title&gt;入力画面｜フォーム&lt;/title&gt;
  &lt;link rel=&quot;stylesheet&quot; href=&quot;css/style.css&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;div class=&quot;header&quot;&gt;
    &lt;div class=&quot;inner&quot;&gt;
      &lt;h1&gt;入力画面&lt;/h1&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  &lt;div class=&quot;content&quot;&gt;
    &lt;div class=&quot;inner&quot;&gt;
      &lt;?php if (isset($error)) : ?&gt;
      &lt;div class=&quot;error&quot;&gt;
        &lt;ul&gt;
          &lt;?php foreach ($error as $val) : ?&gt;
          &lt;li&gt;&lt;?php echo $val; ?&gt;&lt;/li&gt;
          &lt;?php endforeach; ?&gt;
        &lt;/ul&gt;
      &lt;/div&gt;
      &lt;?php endif; ?&gt;

      &lt;form action=&quot;form2.php&quot; method=&quot;post&quot;&gt;
        &lt;dl&gt;
          &lt;dt&gt;名前&lt;/dt&gt;
          &lt;dd&gt;
            &lt;input type=&quot;text&quot; name=&quot;name&quot; value=&quot;&lt;?php echo h($name); ?&gt;&quot; size=&quot;50&quot;&gt;
          &lt;/dd&gt;
          &lt;dt&gt;件名&lt;/dt&gt;
          &lt;dd&gt;
            &lt;input type=&quot;text&quot; name=&quot;subject&quot; value=&quot;&lt;?php echo h($subject); ?&gt;&quot; size=&quot;50&quot;&gt;
          &lt;/dd&gt;
          &lt;dt&gt;内容&lt;/dt&gt;
          &lt;dd&gt;
            &lt;textarea name=&quot;body&quot; cols=&quot;50&quot; rows=&quot;10&quot;&gt;&lt;?php echo h($body); ?&gt;&lt;/textarea&gt;
          &lt;/dd&gt;
        &lt;/dl&gt;
        &lt;p&gt;
          &lt;input class=&quot;btn&quot; type=&quot;submit&quot; value=&quot;確認画面へ&quot;&gt;
        &lt;/p&gt;
      &lt;/form&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  &lt;div class=&quot;footer&quot;&gt;
    &lt;div class=&quot;inner&quot;&gt;
      &lt;p class=&quot;copyright&quot;&gt;© フォーム&lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>      &lt;?php if (isset($error)) : ?&gt;
      &lt;div class=&quot;error&quot;&gt;
        &lt;ul&gt;
          &lt;?php foreach ($error as $val) : ?&gt;
          &lt;li&gt;&lt;?php echo $val; ?&gt;&lt;/li&gt;
          &lt;?php endforeach; ?&gt;
        &lt;/ul&gt;
      &lt;/div&gt;
      &lt;?php endif; ?&gt;</code></pre></div>



<p>form1.phpでは$errorが存在しないので、エラー表示部分の利用はありません。<br>しかし、後々出てくる「form2.php」で活躍します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>      &lt;form action=&quot;form2.php&quot; method=&quot;post&quot;&gt;
        &lt;dl&gt;
          &lt;dt&gt;名前&lt;/dt&gt;
          &lt;dd&gt;
            &lt;input type=&quot;text&quot; name=&quot;name&quot; value=&quot;&lt;?php echo h($name); ?&gt;&quot; size=&quot;50&quot;&gt;
          &lt;/dd&gt;
          &lt;dt&gt;件名&lt;/dt&gt;
          &lt;dd&gt;
            &lt;input type=&quot;text&quot; name=&quot;subject&quot; value=&quot;&lt;?php echo h($subject); ?&gt;&quot; size=&quot;50&quot;&gt;
          &lt;/dd&gt;
          &lt;dt&gt;内容&lt;/dt&gt;
          &lt;dd&gt;
            &lt;textarea name=&quot;body&quot; cols=&quot;50&quot; rows=&quot;10&quot;&gt;&lt;?php echo h($body); ?&gt;&lt;/textarea&gt;
          &lt;/dd&gt;
        &lt;/dl&gt;
        &lt;p&gt;
          &lt;input class=&quot;btn&quot; type=&quot;submit&quot; value=&quot;確認画面へ&quot;&gt;
        &lt;/p&gt;
      &lt;/form&gt;</code></pre></div>



<p>HTMLでフォームを作成します。<br>今回は「form2.php」にPOST形式で値を送るので、action=&#8221;form2.php&#8221; method=&#8221;POST&#8221;となります。</p>



<p class="is-style-supplement-succes">ユーザから情報を得る場合は、基本$_POSTを使用して値を取得します。</p>



<p>inputタグのvalueの部分がユーザ入力値としてform2.phpに送られるので、ユーザ入力値の部分をh関数の<strong>htmlspecialchars()関数</strong>で入力値をサニタイジングします。</p>



<h4 class="wp-block-heading" id="v-session">v($_SESSION);</h4>



<p>ここでセッションをv()関数を使って確認します。</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img decoding="async" width="553" height="416" src="https://creator-kid.com/wp-content/uploads/2022/02/Screen-Shot-2022-02-12-at-2.32.44.jpg" alt="form1.php" class="wp-image-4459" srcset="https://creator-kid.com/wp-content/uploads/2022/02/Screen-Shot-2022-02-12-at-2.32.44.jpg 553w, https://creator-kid.com/wp-content/uploads/2022/02/Screen-Shot-2022-02-12-at-2.32.44-300x226.jpg 300w, https://creator-kid.com/wp-content/uploads/2022/02/Screen-Shot-2022-02-12-at-2.32.44-485x365.jpg 485w" sizes="(max-width: 553px) 100vw, 553px" /><figcaption>form1.php</figcaption></figure></div>



<p>最初のform1.phpではまだ$_SESSIONに値が入ってないことが確認できます。</p>



<h3 class="wp-block-heading" id="form2-php">form2.php</h3>



<p>form1.phpで確認画面へボタンをクリックするとform2.phpへ移ります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-file="form2.php" data-lang="PHP"><code>&lt;?php
session_start();
require_once __DIR__ . &#39;/functions.php&#39;;

v($_POST);

$name    = isset($_POST[&#39;name&#39;])    ? $_POST[&#39;name&#39;]    : NULL;
$subject = isset($_POST[&#39;subject&#39;]) ? $_POST[&#39;subject&#39;] : NULL;
$body    = isset($_POST[&#39;body&#39;])    ? $_POST[&#39;body&#39;]    : NULL;

$name    = trim($name);
$subject = trim($subject);
$body    = trim($body);

$error = [];

if ($name == &#39;&#39;) {
  $error[] = &#39;お名前は必須項目です。&#39;;
} else if (mb_strlen($name) &gt; 20) {
  $error[] = &#39;お名前は20文字以内でお願い致します。&#39;;
}

if ($subject == &#39;&#39;) {
  $error[] = &#39;件名は必須項目です。&#39;;
} else if (mb_strlen($subject) &gt; 50) {
  $error[] = &#39;件名は50文字以内でお願い致します。&#39;;
}

if ($body == &#39;&#39;) {
  $error[] = &#39;内容は必須項目です。&#39;;
} else if (mb_strlen($body) &gt; 500) {
  $error[] = &#39;内容は500文字以内でお願い致します。&#39;;
}

if (count($error) &gt; 0) {
  require &#39;form1_view.php&#39;;
} else {
  $_SESSION[&#39;name&#39;]    = $name;
  $_SESSION[&#39;subject&#39;] = $subject;
  $_SESSION[&#39;body&#39;]    = $body;
  require &#39;form2_view.php&#39;;
}</code></pre></div>



<p>form2.phpではform1.phpから$_POSTで送った値を取得します。</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://creator-kid.com/wp-content/uploads/2022/02/Screen-Shot-2022-02-12-at-2.34.05.jpg" alt="form2.php" class="wp-image-4460" width="728" height="502" srcset="https://creator-kid.com/wp-content/uploads/2022/02/Screen-Shot-2022-02-12-at-2.34.05.jpg 953w, https://creator-kid.com/wp-content/uploads/2022/02/Screen-Shot-2022-02-12-at-2.34.05-300x207.jpg 300w, https://creator-kid.com/wp-content/uploads/2022/02/Screen-Shot-2022-02-12-at-2.34.05-768x530.jpg 768w, https://creator-kid.com/wp-content/uploads/2022/02/Screen-Shot-2022-02-12-at-2.34.05-485x335.jpg 485w" sizes="(max-width: 728px) 100vw, 728px" /><figcaption>form2.php</figcaption></figure>



<p>form1.phpから$_POSTで送られた値はform2.phpに届いていることが確認できますが、この時点でも$_SESSIONにはまだ値がありません。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>$name    = isset($_POST[&#39;name&#39;])    ? $_POST[&#39;name&#39;]    : NULL;
$subject = isset($_POST[&#39;subject&#39;]) ? $_POST[&#39;subject&#39;] : NULL;
$body    = isset($_POST[&#39;body&#39;])    ? $_POST[&#39;body&#39;]    : NULL;

$name    = trim($name);
$subject = trim($subject);
$body    = trim($body);</code></pre></div>



<p>三項方程式でそれぞれ変数にform1.phpから$_POSTで送られた値を代入します。<br>さらにtrim()関数で先頭・末尾にあるホワイトスペースを削除したものを変数へ再代入します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>$error = [];

if ($name == &#39;&#39;) {
  $error[] = &#39;お名前は必須項目です。&#39;;
} else if (mb_strlen($name) &gt; 20) {
  $error[] = &#39;お名前は20文字以内でお願い致します。&#39;;
}

if ($subject == &#39;&#39;) {
  $error[] = &#39;件名は必須項目です。&#39;;
} else if (mb_strlen($subject) &gt; 50) {
  $error[] = &#39;件名は50文字以内でお願い致します。&#39;;
}

if ($body == &#39;&#39;) {
  $error[] = &#39;内容は必須項目です。&#39;;
} else if (mb_strlen($body) &gt; 500) {
  $error[] = &#39;内容は500文字以内でお願い致します。&#39;;
}</code></pre></div>



<p>$error = [];<br>エラー変数を配列化して、エラー時に出力するエラー文を配列管理します。</p>



<p>mb_strlen()関数で変数値の文字列の長さを取得します。<br>if分を使い、未入力時と文字数を超えた場合にエラー変数にエラー文を配列で管理していきます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>if (count($error) &gt; 0) {
  require &#39;form1_view.php&#39;;
} else {
  $_SESSION[&#39;name&#39;]    = $name;
  $_SESSION[&#39;subject&#39;] = $subject;
  $_SESSION[&#39;body&#39;]    = $body;
  require &#39;form2_view.php&#39;;
}</code></pre></div>



<p>エラーがある場合は、「fomr1_view.php」を読み込みます。</p>



<p>エラーがない場合は、$_SESSIONに確定したユーザ入力値を代入し、他のページでも使えるようにします。そして「form2_view.php」を読み込みます。</p>



<h3 class="wp-block-heading" id="form2-view-php">form2_view.php</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-file="form2_view.php" data-lang="PHP"><code>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ja&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;title&gt;確認画面｜フォーム&lt;/title&gt;
  &lt;link rel=&quot;stylesheet&quot; href=&quot;css/style.css&quot;&gt;
&lt;/head&gt;

&lt;body&gt;
  &lt;div class=&quot;header&quot;&gt;
    &lt;div class=&quot;inner&quot;&gt;
      &lt;h1&gt;確認画面&lt;/h1&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  &lt;div class=&quot;content&quot;&gt;
    &lt;div class=&quot;inner&quot;&gt;

      &lt;p&gt;以下の内容でよろしければ送信ボタンを押してください。&lt;/p&gt;

      &lt;dl class=&quot;confirm&quot;&gt;
        &lt;dt&gt;お名前：&lt;/dt&gt;
        &lt;dd&gt;&lt;?php echo h($name); ?&gt;&lt;/dd&gt;
        &lt;dt&gt;件名：&lt;/dt&gt;
        &lt;dd&gt;&lt;?php echo h($subject); ?&gt;&lt;/dd&gt;
        &lt;dt&gt;内容：&lt;/dt&gt;
        &lt;dd&gt;&lt;?php echo nl2br(h($body)); ?&gt;&lt;/dd&gt;
      &lt;/dl&gt;

      &lt;div class=&quot;confirm-btn&quot;&gt;
        &lt;p&gt;&lt;a class=&quot;btn&quot; href=&quot;form1.php&quot;&gt;入力画面に戻る&lt;/a&gt;&lt;/p&gt;
        &lt;p&gt;&lt;a class=&quot;btn&quot; href=&quot;form3.php&quot;&gt;送信する&lt;/a&gt;&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  &lt;div class=&quot;footer&quot;&gt;
    &lt;div class=&quot;inner&quot;&gt;
      &lt;p class=&quot;copyright&quot;&gt;© フォーム&lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>      &lt;dl class=&quot;confirm&quot;&gt;
        &lt;dt&gt;お名前：&lt;/dt&gt;
        &lt;dd&gt;&lt;?php echo h($name); ?&gt;&lt;/dd&gt;
        &lt;dt&gt;件名：&lt;/dt&gt;
        &lt;dd&gt;&lt;?php echo h($subject); ?&gt;&lt;/dd&gt;
        &lt;dt&gt;内容：&lt;/dt&gt;
        &lt;dd&gt;&lt;?php echo nl2br(h($body)); ?&gt;&lt;/dd&gt;
      &lt;/dl&gt;</code></pre></div>



<p>ユーザ入力値を使用するので、h()関数を使ってエスケープします。</p>



<p>記述量が多い「内容」では「nl2br()」を使って見やすく表示します。</p>



<h4 class="wp-block-heading" id="v-session-1">v($_SESSION);</h4>



<p>ここでもセッションをv()関数を使って確認します。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="953" height="658" src="https://creator-kid.com/wp-content/uploads/2022/02/Screen-Shot-2022-02-12-at-2.34.05.jpg" alt="form2.php" class="wp-image-4460" srcset="https://creator-kid.com/wp-content/uploads/2022/02/Screen-Shot-2022-02-12-at-2.34.05.jpg 953w, https://creator-kid.com/wp-content/uploads/2022/02/Screen-Shot-2022-02-12-at-2.34.05-300x207.jpg 300w, https://creator-kid.com/wp-content/uploads/2022/02/Screen-Shot-2022-02-12-at-2.34.05-768x530.jpg 768w, https://creator-kid.com/wp-content/uploads/2022/02/Screen-Shot-2022-02-12-at-2.34.05-485x335.jpg 485w" sizes="(max-width: 953px) 100vw, 953px" /><figcaption>form2.php</figcaption></figure>



<p>上記で記述したように、form1.phpからページ移動してきたので$_POSTには値が入っていますが、$_SESSIONにはまだ値がありません。</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img decoding="async" width="628" height="531" src="https://creator-kid.com/wp-content/uploads/2022/02/Screen-Shot-2022-02-12-at-2.34.25.jpg" alt="form1.php" class="wp-image-4461" srcset="https://creator-kid.com/wp-content/uploads/2022/02/Screen-Shot-2022-02-12-at-2.34.25.jpg 628w, https://creator-kid.com/wp-content/uploads/2022/02/Screen-Shot-2022-02-12-at-2.34.25-300x254.jpg 300w, https://creator-kid.com/wp-content/uploads/2022/02/Screen-Shot-2022-02-12-at-2.34.25-485x410.jpg 485w" sizes="(max-width: 628px) 100vw, 628px" /><figcaption>form1.php</figcaption></figure></div>



<p>その後「入力画面へ戻る」ボタンをクリックしform1.phpのページへ戻ると、最初に値が入ってなかった$_SESSIONに値が入っています。</p>



<p>これはform2.phpでエラーがなかった場合に$_SESSIONに値が代入されるからです。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="950" height="779" src="https://creator-kid.com/wp-content/uploads/2022/02/Screen-Shot-2022-02-12-at-2.34.45.jpg" alt="form2.php" class="wp-image-4462" srcset="https://creator-kid.com/wp-content/uploads/2022/02/Screen-Shot-2022-02-12-at-2.34.45.jpg 950w, https://creator-kid.com/wp-content/uploads/2022/02/Screen-Shot-2022-02-12-at-2.34.45-300x246.jpg 300w, https://creator-kid.com/wp-content/uploads/2022/02/Screen-Shot-2022-02-12-at-2.34.45-768x630.jpg 768w, https://creator-kid.com/wp-content/uploads/2022/02/Screen-Shot-2022-02-12-at-2.34.45-485x398.jpg 485w" sizes="(max-width: 950px) 100vw, 950px" /><figcaption>form2.php</figcaption></figure>



<p>再びform2.phpへ戻るとこちらの$_SESSIONにもちゃんと値が入っていることが確認できます。</p>



<h3 class="wp-block-heading" id="form3-php">form3.php</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-file="form3.php" data-lang="PHP"><code>&lt;?php
session_start();
require_once __DIR__ . &#39;/functions.php&#39;;

$name    = isset($_SESSION[&#39;name&#39;])    ? $_SESSION[&#39;name&#39;]    : NULL;
$subject = isset($_SESSION[&#39;subject&#39;]) ? $_SESSION[&#39;subject&#39;] : NULL;
$body    = isset($_SESSION[&#39;body&#39;])    ? $_SESSION[&#39;body&#39;]    : NULL;

unset($_SESSION[&#39;name&#39;]);
unset($_SESSION[&#39;subject&#39;]);
unset($_SESSION[&#39;body&#39;]);

$error = [];
if ($name === NULL) {
  $error[] = &#39;名前の値なし&#39;;
}

if ($subject === NULL) {
  $error[] = &#39;件名の値なし&#39;;
}

if ($body === NULL) {
  $error[] = &#39;本文の値なし&#39;;
}

受け取った値を使った処理：例）データベースへの登録など

if (count($error) &gt; 0) {
  require &#39;error_view.php&#39;;
} else {
  require &#39;form3_view.php&#39;;
}
</code></pre></div>



<p>form1.phpからform2.phpへ値を送信するときは、$_POSTを使用しましたが、form2.phpからform3.phpへの値の受け渡しは$_SESSIONを使用します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>$name    = isset($_SESSION[&#39;name&#39;])    ? $_SESSION[&#39;name&#39;]    : NULL;
$subject = isset($_SESSION[&#39;subject&#39;]) ? $_SESSION[&#39;subject&#39;] : NULL;
$body    = isset($_SESSION[&#39;body&#39;])    ? $_SESSION[&#39;body&#39;]    : NULL;</code></pre></div>



<p>$_SESSIONから値を取得し、それぞれ変数に値を代入したら$_SESSIONを削除します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>unset($_SESSION[&#39;name&#39;]);
unset($_SESSION[&#39;subject&#39;]);
unset($_SESSION[&#39;body&#39;]);</code></pre></div>



<p>unset()関数：指定した変数の割り当てを解除・配列内の部屋を削除します。セッション変数の部屋は明示的に削除しないとずっと存在してしまうので、使用しなくなった部屋はunset()関数で削除しなければなりません。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>$error = [];
if ($name === NULL) {
  $error[] = &#39;名前の値なし&#39;;
}

if ($subject === NULL) {
  $error[] = &#39;件名の値なし&#39;;
}

if ($body === NULL) {
  $error[] = &#39;本文の値なし&#39;;
}

受け取った値を使った処理：例）データベースへの登録など

if (count($error) &gt; 0) {
  require &#39;error_view.php&#39;;
} else {
  require &#39;form3_view.php&#39;;
}</code></pre></div>



<p>エラーがあれば、エラー変数にエラーメッセージを代入します。</p>



<p>エラーがあるとき、「error_view.php」を読み込みます。<br>エラーがないときは、「form3_view.php」を読み込みます。</p>



<p>実際にデータベースに値を受け渡すには、この時点でロジックを組んでいくみたいです。</p>



<h4 class="wp-block-heading" id="v-session-1">v($_SESSION);</h4>



<p>ここでもセッションをv()関数を使って確認します。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="865" height="624" src="https://creator-kid.com/wp-content/uploads/2022/02/Screen-Shot-2022-02-12-at-2.35.58.jpg" alt="form3.php" class="wp-image-4463" srcset="https://creator-kid.com/wp-content/uploads/2022/02/Screen-Shot-2022-02-12-at-2.35.58.jpg 865w, https://creator-kid.com/wp-content/uploads/2022/02/Screen-Shot-2022-02-12-at-2.35.58-300x216.jpg 300w, https://creator-kid.com/wp-content/uploads/2022/02/Screen-Shot-2022-02-12-at-2.35.58-768x554.jpg 768w, https://creator-kid.com/wp-content/uploads/2022/02/Screen-Shot-2022-02-12-at-2.35.58-485x350.jpg 485w" sizes="(max-width: 865px) 100vw, 865px" /><figcaption>form3.php</figcaption></figure>



<p>unset($_SESSION)の前後でv()関数で$_SESSIONの動向を確認します。</p>



<p>unset前では$_SESSIONに値が入っているのに対し、unset後の$_SESSIONには値が入っていないことが確認できます。</p>



<h3 class="wp-block-heading" id="form3-view-php">form3_view.php</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-file="form3_view.php" data-lang="PHP"><code>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ja&quot;&gt;

&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;title&gt;完了画面｜フォーム&lt;/title&gt;
  &lt;link rel=&quot;stylesheet&quot; href=&quot;css/style.css&quot;&gt;
&lt;/head&gt;

&lt;body&gt;
  &lt;div class=&quot;header&quot;&gt;
    &lt;div class=&quot;inner&quot;&gt;
      &lt;h1&gt;完了画面&lt;/h1&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  &lt;div class=&quot;content&quot;&gt;
    &lt;div class=&quot;inner&quot;&gt;

      &lt;p&gt;以下の値で処理をしました。&lt;/p&gt;

      &lt;dl class=&quot;confirm&quot;&gt;
        &lt;dt&gt;お名前：&lt;/dt&gt;
        &lt;dd&gt;&lt;?php echo h($name); ?&gt;&lt;/dd&gt;
        &lt;dt&gt;件名：&lt;/dt&gt;
        &lt;dd&gt;&lt;?php echo h($subject); ?&gt;&lt;/dd&gt;
        &lt;dt&gt;内容：&lt;/dt&gt;
        &lt;dd&gt;&lt;?php echo nl2br(h($body)); ?&gt;&lt;/dd&gt;
      &lt;/dl&gt;

      &lt;div class=&quot;content-footer&quot;&gt;
        &lt;p&gt;&lt;a href=&quot;form1.php&quot;&gt;入力画面に戻る&lt;/a&gt;&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  &lt;div class=&quot;footer&quot;&gt;
    &lt;div class=&quot;inner&quot;&gt;
      &lt;p class=&quot;copyright&quot;&gt;© フォーム&lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/body&gt;

&lt;/html&gt;</code></pre></div>



<p>ユーザ入力値を表示する際は毎回h()関数でエスケープしておきます。</p>



<h3 class="wp-block-heading" id="error-view-php">error_view.php</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-file="error_view.php" data-lang="PHP"><code>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ja&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;title&gt;エラー｜フォーム&lt;/title&gt;
  &lt;link rel=&quot;stylesheet&quot; href=&quot;css/style.css&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;div class=&quot;header&quot;&gt;
    &lt;div class=&quot;inner&quot;&gt;
      &lt;h1&gt;エラー&lt;/h1&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  &lt;div class=&quot;content&quot;&gt;
    &lt;div class=&quot;inner&quot;&gt;

      &lt;?php /* ?&gt;
      &lt;?php if (isset($error)) : ?&gt;
      &lt;div class=&quot;error&quot;&gt;
        &lt;ul&gt;
          &lt;?php foreach ($error as $val) : ?&gt;
          &lt;li&gt;&lt;?php echo $val; ?&gt;&lt;/li&gt;
          &lt;?php endforeach; ?&gt;
        &lt;/ul&gt;
      &lt;/div&gt;
      &lt;?php endif; ?&gt;
      &lt;?php */ ?&gt;

      &lt;p&gt;セッションが切れました&lt;/p&gt;
      &lt;p&gt;&lt;a href=&quot;form1.php&quot;&gt;もう一度やり直してください。&lt;/a&gt;&lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  &lt;div class=&quot;footer&quot;&gt;
    &lt;div class=&quot;inner&quot;&gt;
      &lt;p class=&quot;copyright&quot;&gt;© フォーム&lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>      &lt;?php /* ?&gt;
      &lt;?php if (isset($error)) : ?&gt;
      &lt;div class=&quot;error&quot;&gt;
        &lt;ul&gt;
          &lt;?php foreach ($error as $val) : ?&gt;
          &lt;li&gt;&lt;?php echo $val; ?&gt;&lt;/li&gt;
          &lt;?php endforeach; ?&gt;
        &lt;/ul&gt;
      &lt;/div&gt;
      &lt;?php endif; ?&gt;
      &lt;?php */ ?&gt;</code></pre></div>



<p>この部分はデバック用なので実際には表示されません。<br>エラーが出たときにどんなエラーが出たのか確認できます。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【PHP】登録フォームで$_POST形式で値を受け取る際のエラーチェックを例題と共に解説</title>
		<link>https://creator-kid.com/code/php-form_post/</link>
		
		<dc:creator><![CDATA[Ryuji]]></dc:creator>
		<pubDate>Tue, 01 Feb 2022 13:48:37 +0000</pubDate>
				<category><![CDATA[CODE]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web制作]]></category>
		<category><![CDATA[職業訓練]]></category>
		<guid isPermaLink="false">https://creator-kid.com/?p=4304</guid>

					<description><![CDATA[私がPHPを学んでいる中で一番理解するのに苦労したのが、「$_POST形式で値を受け取る際のエラーチェック」だったので、その例題と解答方法をまとめました。 なぜ苦労したかというと、アンケートフォームなどでユーザーが普通に...]]></description>
										<content:encoded><![CDATA[
<p>私がPHPを学んでいる中で一番理解するのに苦労したのが、「<strong>$_POST形式で値を受け取る際のエラーチェック</strong>」だったので、その例題と解答方法をまとめました。</p>



<p>なぜ苦労したかというと、アンケートフォームなどでユーザーが普通に入力して起こりうるエラーしか考えつかず、その他起こりうるエラーについて理解するのが困難だったためです。</p>



<h2 class="wp-block-heading" id="post形式の値の送受信の問題">POST形式の値の送受信の問題</h2>



<h3 class="wp-block-heading" id="フォームの作成">フォームの作成</h3>



<p>以下の内容のフォームを作成すること。</p>



<ul class="wp-block-list"><li>名前</li><li>メールアドレス</li><li>性別</li><li>年代</li><li>お問い合わせ内容</li></ul>



<h3 class="wp-block-heading" id="送信について">送信について</h3>



<p>送信先は「comfirm.php」とする。</p>



<p>送信方法は「POST」とする。</p>



<h3 class="wp-block-heading" id="受信について">受信について</h3>



<h4 class="wp-block-heading" id="必須項目">必須項目</h4>



<ul class="wp-block-list"><li>名前</li><li>お問い合わせ内容</li></ul>



<h4 class="wp-block-heading" id="上限値">上限値</h4>



<ul class="wp-block-list"><li>名前：20文字</li><li>メールアドレス：100文字</li><li>お問い合わせ内容：400文字</li></ul>



<h4 class="wp-block-heading" id="画面表示">画面表示</h4>



<p>ユーザー入力値に問題なければ 送られてきた値を表示。</p>



<p>ユーザー入力値に問題があるときは エラーメッセージを表示。</p>



<h3 class="wp-block-heading" id="フォームパーツについて">フォームパーツについて</h3>



<p>名前は入力系パーツを使用しname属性「myname」とする。</p>



<p>メールアドレスは入力系パーツを使用しname属性「mail」とする。</p>



<p>性別は選択系パーツを使用しname属性「gender」とする。<br>送信する値は「選択しない」&gt;「0」、 「男性」&gt;「1」、 「女性」&gt;「2」</p>



<p>年代はセレクトボックスを使用しname属性「age」とする。<br>送信する値は「選択しない」&gt;「空文字」、 「10代」&gt;「1」、 「20代」&gt;「2」、 「30代」&gt;「3」、 「40代」&gt;「4」、 「50代以上」&gt;「5」</p>



<p>お問い合わせ内容はテキストエリアを使用しname属性「body」とする。</p>



<p>「送信ボタン」と「リセットボタン」を下部に配置すること。</p>



<h3 class="wp-block-heading" id="その他のルール">その他のルール</h3>



<p>文章構成（divでグループ化や定義リストを使用する等）は自由に決めて構わない。</p>



<p>時間があればCSSで自由にデザインすること。</p>



<h2 class="wp-block-heading" id="解答例">解答例</h2>



<h3 class="wp-block-heading" id="作成したお問い合わせフォーム">作成したお問い合わせフォーム</h3>



<div class="wp-block-image"><figure class="aligncenter size-full"><img decoding="async" width="680" height="627" src="https://creator-kid.com/wp-content/uploads/2022/01/image-1.jpg" alt="" class="wp-image-4390" srcset="https://creator-kid.com/wp-content/uploads/2022/01/image-1.jpg 680w, https://creator-kid.com/wp-content/uploads/2022/01/image-1-300x277.jpg 300w, https://creator-kid.com/wp-content/uploads/2022/01/image-1-485x447.jpg 485w" sizes="(max-width: 680px) 100vw, 680px" /></figure></div>



<h3 class="wp-block-heading" id="html">HTML</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-html" data-lang="HTML"><code>&lt;h1&gt;問題解答&lt;/h1&gt;
&lt;form action=&quot;comfirm.php&quot; method=&quot;post&quot;&gt;
  &lt;fieldset&gt;
    &lt;legend&gt;お問い合わせフォーム&lt;/legend&gt;
    &lt;dl&gt;
      &lt;dt&gt;名前&lt;/dt&gt;
      &lt;dd&gt;
        &lt;input type=&quot;text&quot; name=&quot;myname&quot; required placeholder=&quot;例）山田 太郎&quot;&gt;
      &lt;/dd&gt;
      &lt;dt&gt;メールアドレス&lt;/dt&gt;
      &lt;dd&gt;
        &lt;input type=&quot;email&quot; name=&quot;mail&quot; placeholder=&quot;例）name@example.com&quot;&gt;
      &lt;/dd&gt;
      &lt;dt&gt;性別&lt;/dt&gt;
      &lt;dd&gt;
        &lt;label&gt;&lt;input type=&quot;radio&quot; name=&quot;gender&quot; value=&quot;0&quot;&gt;未選択&lt;/label&gt;
        &lt;label&gt;&lt;input type=&quot;radio&quot; name=&quot;gender&quot; value=&quot;1&quot;&gt;男性&lt;/label&gt;
        &lt;label&gt;&lt;input type=&quot;radio&quot; name=&quot;gender&quot; value=&quot;2&quot;&gt;女性&lt;/label&gt;
      &lt;/dd&gt;
      &lt;dt&gt;年代&lt;/dt&gt;
      &lt;dd&gt;
        &lt;select name=&quot;age&quot;&gt;
          &lt;option value=&quot;&quot;&gt;選択してください&lt;/option&gt;
          &lt;option value=&quot;0&quot;&gt;未回答&lt;/option&gt;
          &lt;option value=&quot;1&quot;&gt;10代&lt;/option&gt;
          &lt;option value=&quot;2&quot;&gt;20代&lt;/option&gt;
          &lt;option value=&quot;3&quot;&gt;30代&lt;/option&gt;
          &lt;option value=&quot;4&quot;&gt;40代&lt;/option&gt;
          &lt;option value=&quot;5&quot;&gt;50代以上&lt;/option&gt;
        &lt;/select&gt;
      &lt;/dd&gt;
      &lt;dt&gt;お問い合わせ内容&lt;/dt&gt;
      &lt;dd&gt;
        &lt;textarea name=&quot;body&quot; cols=&quot;50&quot; rows=&quot;10&quot; required&gt;&lt;/textarea&gt;
      &lt;/dd&gt;
    &lt;/dl&gt;
    &lt;div class=&quot;button&quot;&gt;
      &lt;input class=&quot;btn&quot; type=&quot;submit&quot; value=&quot;送信&quot;&gt;
      &lt;input class=&quot;btn&quot; type=&quot;reset&quot; value=&quot;リセット&quot;&gt;
    &lt;/div&gt;
  &lt;/fieldset&gt;
&lt;/form&gt;</code></pre></div>



<p>フォームパーツが多い場合は、fieldset要素を使ってグループを作成できる。<br>form要素内に入力パーツが少ない場合は、field要素とlegend要素は省略可能。</p>



<p>name属性はPHPの送受信には必須の属性で、値の送受信用の名前。<br>CSSでのclass属性、JSでのid属性のようなもの。</p>



<p>input要素をlabelタグで囲むと、クリック領域が広がりユーザーが使いやすくなる。</p>



<p>required属性を付与すると、必須項目になる。</p>



<p>placeholderを入力しておくと、名前やメールアドレスなどの入力欄に参考例をあらかじめ入力しておくことができ、ユーザーがわかりやすくなる。</p>



<h3 class="wp-block-heading" id="css">CSS</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>fieldset{
  width: 50%;
  margin: 0 auto;
  background-color: aliceblue;
}

dt{
  background-color: #ccc;
}
dd{
  padding: 1em;
  margin: 0;
}

.btn{
  border-radius: 25px;
  background-color: #ccc;
  color: #000;
}

.button{
  text-align: right;
}
</code></pre></div>



<p>CSSは特に重要ではないですが、一応載せておきます。</p>



<h3 class="wp-block-heading" id="php">PHP</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>&lt;?php
echo &#39;&lt;pre&gt;&#39;;
var_dump($_POST);
echo &#39;&lt;/pre&gt;&#39;;

$error = [];

echo &#39;&lt;pre&gt;&#39;;
var_dump($error);
echo &#39;&lt;/pre&gt;&#39;;

$limit = 20;
if (isset($_POST[&#39;myname&#39;])) {
  $myname = $_POST[&#39;myname&#39;];
  if ($myname === &#39;&#39;) {
    $error[] = &#39;名前は必須項目です&#39;;
  } else if (mb_strlen($myname) &gt; $limit) {
    $error[] = &quot;名前は{$limit}文字以下で入力してください&quot;;
  }
} else {
  $error[] = &#39;名前の値が届いていません&#39;;
}

$limit = 100;
if (isset($_POST[&#39;mail&#39;])) {
  $mail = $_POST[&#39;mail&#39;];
  if (mb_strlen($mail) &gt; $limit) {
    $error[] = &quot;メールアドレスは{$limit}文字以下で入力してください&quot;;
  }
} else {
  $error[] = &#39;メールアドレスの値が届いていません&#39;;
}

$limit = 400;
if (isset($_POST[&#39;body&#39;])) {
  $body = $_POST[&#39;body&#39;];
  if ($body === &#39;&#39;) {
    $error[] = &#39;お問い合わせ内容は必須項目です&#39;;
  } else if (mb_strlen($body) &gt; $limit) {
    $error[] = &quot;お問い合わせ内容は{$limit}文字以下で入力してください&quot;;
  }
} else {
  $error[] = &#39;お問い合わせ内容の値が届いていません&#39;;
}

if (isset($_POST[&#39;gender&#39;])) {
  $gender = $_POST[&#39;gender&#39;];
  if (ctype_digit($gender)) {
    if ($gender &lt; 0 || $gender &gt; 2) {
      $error[] = &#39;性別の値が不正です&#39;;
    }
  } else {
    $error[] = &#39;性別の値が不正です&#39;;
  }
}

if (isset($_POST[&#39;age&#39;])) {
  $age = $_POST[&#39;age&#39;];
  if ($age !== &#39;&#39;) {
    if (ctype_digit($age)) {
      if ($age &lt; 0 || $age &gt; 5) {
        $error[] = &#39;年代の値が不正です:2&#39;;
      }
    } else {
      $error[] = &#39;年代の値が不正です:1&#39;;
    }
  }
} else {
  $error[] = &#39;年代の値が届いていません&#39;;
}

if (count($error) === 0) {
  $genderList = [
    0 =&gt; &#39;選択してない&#39;,
    1 =&gt; &#39;男性&#39;,
    2 =&gt; &#39;女性&#39;,
  ];
  if (isset($gender)) {
    $genderStr = $genderList[$gender];
  } else {
    $genderStr = &#39;選択していない&#39;;
  }

  if ($age === &#39;&#39;) {
    $ageStr = &#39;選択していない&#39;;
  } else if ($age === &#39;0&#39;) {
    $ageStr = &#39;未回答&#39;;
  } else if ($age === &#39;5&#39;) {
    $ageStr = &quot;{$age}0代以上&quot;;
  } else {
    $ageStr = &quot;{$age}0代&quot;;
  }
}
?&gt;

&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ja&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;title&gt;POST形式で送信された値を取得&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;div class=&quot;box&quot;&gt;
    &lt;div class=&quot;inner&quot;&gt;
      &lt;?php if (count($error) &gt; 0) : ?&gt;
        &lt;h1&gt;エラー&lt;/h1&gt;
        &lt;ul class=&quot;error&quot;&gt;
          &lt;?php foreach ($error as $val) : ?&gt;
            &lt;li&gt;&lt;?php echo $val; ?&gt;&lt;/li&gt;
          &lt;?php endforeach; ?&gt;
        &lt;/ul&gt;
      &lt;?php else : ?&gt;
        &lt;h1&gt;確認&lt;/h1&gt;
        &lt;dl&gt;
          &lt;dt&gt;名前&lt;/dt&gt;
          &lt;dd&gt;&lt;?php echo $myname; ?&gt;&lt;/dd&gt;
          &lt;dt&gt;メールアドレス&lt;/dt&gt;
          &lt;dd&gt;&lt;?php echo $mail; ?&gt;&lt;/dd&gt;
          &lt;dt&gt;性別&lt;/dt&gt;
          &lt;dd&gt;&lt;?php echo $genderStr; ?&gt;&lt;/dd&gt;
          &lt;dt&gt;年代&lt;/dt&gt;
          &lt;dd&gt;&lt;?php echo $ageStr; ?&gt;&lt;/dd&gt;
          &lt;dt&gt;お問い合わせ内容&lt;/dt&gt;
          &lt;dd&gt;&lt;?php echo nl2br($body); ?&gt;&lt;/dd&gt;
        &lt;/dl&gt;
      &lt;?php endif; ?&gt;
      &lt;p&gt;
        &lt;a href=&quot;form.html&quot;&gt;フォームに戻る&lt;/a&gt;
      &lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre></div>



<p>これが解答例です。<br>わかりやすいように各パーツごと分解して解説していきます。</p>



<h4 class="wp-block-heading" id="受信した値を確認">受信した値を確認</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>echo &#39;&lt;pre&gt;&#39;;
var_dump($_POST);
echo &#39;&lt;/pre&gt;&#39;;</code></pre></div>



<p>HTMLで作成したフォームからPOST形式で送られてきた値をvar_dumpして確認。</p>



<h4 class="wp-block-heading" id="エラー変数">エラー変数</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>$error = []; </code></pre></div>



<p>$error(変数宣言）して、エラーをこの$errorに配列として溜めていく。</p>



<h4 class="wp-block-heading" id="名前チェック">名前チェック</h4>



<ul class="stk-list-icon--check01 wp-block-list"><li>届いているかチェック</li><li>必須チェック(空文字チェック)</li><li>上限値チェック(20文字)</li></ul>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>$limit = 20;
if (isset($_POST[&#39;myname&#39;])) {
  $myname = $_POST[&#39;myname&#39;];
  if ($myname === &#39;&#39;) {
    ※ 必須エラー
    $error[] = &#39;名前は必須項目です&#39;;
  } else if (mb_strlen($myname) &gt; $limit) {
    ※ 上限値エラー
    $error[] = &quot;名前は{$limit}文字以下で入力してください&quot;;
  } else {
    ※ OK
  }
} else {
  ※ 届いているかエラー
  $error[] = &#39;名前の値が届いていません&#39;;
}</code></pre></div>



<p>if (isset($_POST[&#8216;myname&#8217;]))  → 値が届いているかチェック</p>



<p>if ($myname === &#8221;) → 空文字かチェック</p>



<p>else if (mb_strlen($myname) &gt; $limit) → 文字数上限値(20文字)チェック</p>



<p class="is-style-supplement-border">isset($_調べる変数名)：変数が定義されているか調べられる<br>定義されている場合はtrue、定義されていない場合はfalseを返す<br>値を受け取っていればtrueになる<br>→$_POSTの連想配列に箱があるかないかのチェック<br><br>※実際にフォームから値を送信してそのページに遷移した場合にはエラーは発生しません。しかし、直接そのページ（値を取得するページ）にアクセスした場合には$_POST[&#8216;myname&#8217;]が未定義になるのでエラーが発生します。</p>



<p class="is-style-supplement-border">mb_strlen(引数) ：引数で指定した文字列の文字数を返す<br>[multi byte_strings length]<br>※JSの文字列に対するlengthと同じような感じ</p>



<h4 class="wp-block-heading" id="メールアドレスチェック">メールアドレスチェック</h4>



<ul class="stk-list-icon--check01 wp-block-list"><li>届いているかチェック</li><li>上限値チェック(100文字）</li></ul>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>$limit = 100;
if (isset($_POST[&#39;mail&#39;])) {
  $mail = $_POST[&#39;mail&#39;];
  if (mb_strlen($mail) &gt; $limit) {
    $error[] = &quot;メールアドレスは{$limit}文字以下で入力してください&quot;;
  } else {
    ※ OK
  }
} else {
  $error[] = &#39;メールアドレスの値が届いていません&#39;;
}</code></pre></div>



<p>if (isset($_POST[&#8216;mail&#8217;])) → 値が届いているかチェック</p>



<p>if (mb_strlen($mail) &gt; $limit) → 文字数上限値(100文字)チェック</p>



<p>メールアドレスは必須項目ではないので、空文字チェックはなし</p>



<h4 class="wp-block-heading" id="お問い合わせ内容チェック">お問い合わせ内容チェック</h4>



<ul class="stk-list-icon--check01 wp-block-list"><li>届いているかチェック</li><li>必須チェック(空文字チェック)</li><li>上限値チェック(400文字)</li></ul>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>$limit = 400;
if (isset($_POST[&#39;body&#39;])) {
  $body = $_POST[&#39;body&#39;];
  if ($body === &#39;&#39;) {
    $error[] = &#39;お問い合わせ内容は必須項目です&#39;;
  } else if (mb_strlen($body) &gt; $limit) {
    $error[] = &quot;お問い合わせ内容は{$limit}文字以下で入力してください&quot;;
  } else {
    ※ OK
  }
} else {
  $error[] = &#39;お問い合わせ内容の値が届いていません&#39;;
}</code></pre></div>



<p>if (isset($_POST[&#8216;body&#8217;])) → 値が届いているかチェック</p>



<p>if ($body === &#8221;) → 空文字かチェック</p>



<p>else if (mb_strlen($body) &gt; $limit)→ 文字数上限値(400文字)チェック</p>



<h4 class="wp-block-heading" id="性別チェック">性別チェック</h4>



<p> ◇未選択は値が届かない<br> ◇「0」「1」「2」が届く<br> OKルート:「届いていない」or「範囲内の数字」</p>



<ul class="stk-list-icon--check01 wp-block-list"><li>届いているかチェック → 届いていなくてもエラーにせずOKでチェックぬける</li><li>数字チェック</li><li>範囲チェック</li></ul>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>if (isset($_POST[&#39;gender&#39;])) {
  $gender = $_POST[&#39;gender&#39;];
  if (ctype_digit($gender)) {
    if ($gender &lt; 0 || $gender &gt; 2) {
      $error[] = &#39;性別の値が不正です&#39;;
    } else {
      ※ OK
    }
  } else {
    $error[] = &#39;性別の値が不正です&#39;;
  }
} else {
  ※ OK:値が届いていない（選択していない）
  ※ 表示するときに変数がないので
  　 表示用変数を別途用意しなければならない
}</code></pre></div>



<p>if (isset($_POST[&#8216;gender&#8217;]) → 値が届いているかチェック<br>値が届いていない場合でもOK</p>



<p>if (ctype_digit($gender)) → 値が数字かチェック</p>



<p>if ($gender &lt; 0 || $gender &gt; 2) → 値の範囲チェック</p>



<p class="is-style-supplement-border">ctype_digit(引数)：引数が数字かどうかを調べる関数<br>→ 与えられた文字列textのすべての文字が 数字であるかどうかを調べる<br><br>trueの場合<br>①引数は文字列型<br>②文字列がすべて数字<br>③小数点をNGとして、整数かをチェック<br><br>例）<br>100 = false<br>&#8216;100&#8217; = true<br>0.5 = false<br>&#8216;0.5&#8217; = false</p>



<p>※ 表示するときに変数がないので、表示用変数を別途のちに用意する必要がある</p>



<h4 class="wp-block-heading" id="年代チェック">年代チェック</h4>



<p>◇未選択は空文字<br>◇「0」「1」「2」「3」「4」「5」が届く<br> OKルート:「空文字」or「範囲内の数字」</p>



<ul class="stk-list-icon--check01 wp-block-list"><li>届いているかチェック</li><li>空文字じゃないかチェック → 空文字でもエラーにせずOKでチェックぬける</li><li>数字チェック</li><li>範囲チェック</li></ul>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>if (isset($_POST[&#39;age&#39;])) {
  $age = $_POST[&#39;age&#39;];
  if ($age !== &#39;&#39;) {
    ※ 範囲内数字のチェック
    if (ctype_digit($age)) {
      if ($age &lt; 0 || $age &gt; 5) {
        $error[] = &#39;年代の値が不正です:2&#39;;
      } else {
        ※ OK:範囲内の数字
      }
    } else {
      $error[] = &#39;年代の値が不正です:1&#39;;
    }
  } else {
    ※ OK:空文字の時（選択しなかった時）
  }
} else {
  $error[] = &#39;年代の値が届いていません&#39;;
}</code></pre></div>



<p>if (isset($_POST[&#8216;age&#8217;])) → 値が届いているかチェック</p>



<p>if ($age !== &#8221;) → 空文字じゃないかチェック<br>この場合、空文字のときにfalseとなる</p>



<p>if (ctype_digit($age)) → 値が数字かチェック</p>



<p>if ($age &lt; 0 || $age &gt; 5) → 値の範囲チェック</p>



<h4 class="wp-block-heading" id="性別-年代の表示用変数を準備">性別・年代の表示用変数を準備</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>if (count($error) === 0) {
  ※ エラーがないときは表示変数を整える
  ※ 選択項目表示用
  $genderList = [
    0 =&gt; &#39;選択してない&#39;,
    1 =&gt; &#39;男性&#39;,
    2 =&gt; &#39;女性&#39;,
  ];
  if (isset($gender)) {
    ※ 性別の値が届いたとき
    $genderStr = $genderList[$gender];
  } else {
    ※ 性別の値が届いていないとき
    ※ $genderが存在しないとき
    $genderStr = &#39;選択していない&#39;;
  }

  if ($age === &#39;&#39;) {
    $ageStr = &#39;選択していない&#39;;
  } else if ($age === &#39;0&#39;) {
    $ageStr = &#39;未回答&#39;;
  } else if ($age === &#39;5&#39;) {
    $ageStr = &quot;{$age}0代以上&quot;;
  } else {
    $ageStr = &quot;{$age}0代&quot;;
  }
}</code></pre></div>



<h4 class="wp-block-heading" id="view画面">view画面</h4>



<p>HTMLにPHPを組み込んで、view画面を作成</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>&lt;body&gt;
  &lt;div class=&quot;box&quot;&gt;
    &lt;div class=&quot;inner&quot;&gt;
      &lt;?php if (count($error) &gt; 0) : ?&gt;
        &lt;h1&gt;エラー&lt;/h1&gt;
        &lt;ul class=&quot;error&quot;&gt;
          &lt;?php foreach ($error as $val) : ?&gt;
            &lt;li&gt;&lt;?php echo $val; ?&gt;&lt;/li&gt;
          &lt;?php endforeach; ?&gt;
        &lt;/ul&gt;
      &lt;?php else : ?&gt;
        &lt;h1&gt;確認&lt;/h1&gt;
        &lt;dl&gt;
          &lt;dt&gt;名前&lt;/dt&gt;
          &lt;dd&gt;&lt;?php echo $myname; ?&gt;&lt;/dd&gt;
          &lt;dt&gt;メールアドレス&lt;/dt&gt;
          &lt;dd&gt;&lt;?php echo $mail; ?&gt;&lt;/dd&gt;
          &lt;dt&gt;性別&lt;/dt&gt;
          &lt;dd&gt;&lt;?php echo $genderStr; ?&gt;&lt;/dd&gt;
          &lt;dt&gt;年代&lt;/dt&gt;
          &lt;dd&gt;&lt;?php echo $ageStr; ?&gt;&lt;/dd&gt;
          &lt;dt&gt;お問い合わせ内容&lt;/dt&gt;
          &lt;dd&gt;&lt;?php echo nl2br($body); ?&gt;&lt;/dd&gt;
        &lt;/dl&gt;
      &lt;?php endif; ?&gt;
      &lt;p&gt;
        &lt;a href=&quot;form.html&quot;&gt;フォームに戻る&lt;/a&gt;
      &lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/body&gt;</code></pre></div>



<p>&lt;?php if (count($error) &gt; 0) : ?&gt; → エラーがあればエラー文を表示</p>



<p>&lt;?php else : ?&gt; → エラーがない場合は、フォームからPOST形式で取得した値を各々表示</p>



<p>&lt;?php endif; ?&gt; → PHPのif文終了タグ</p>



<p class="is-style-supplement-border">nl2br関数(new line to br)： 改行コード前にbr要素を挿入してくれる<br>ブラウザ画面上で改行をサポートしてくれる <br>→ テキストエリアの内容を表示する時によく使う</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【職業訓練校】Web制作6ヶ月コースの授業内容やリアルな感想など1ヶ月毎のまとめ</title>
		<link>https://creator-kid.com/code/programming-school/</link>
		
		<dc:creator><![CDATA[Ryuji]]></dc:creator>
		<pubDate>Thu, 09 Dec 2021 16:17:22 +0000</pubDate>
				<category><![CDATA[CODE]]></category>
		<category><![CDATA[Web制作]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[職業訓練]]></category>
		<guid isPermaLink="false">https://creator-kid.com/?p=3351</guid>

					<description><![CDATA[2021年10月1日から職業訓練校でWeb制作を学び始めました。 コロナ渦になった頃から、リモートワークで仕事できるようになにか手に職をつけたいと思って独学でプログラミングを始めてたのですが、仕事をしながらだとなかなか長...]]></description>
										<content:encoded><![CDATA[
<p>2021年10月1日から職業訓練校でWeb制作を学び始めました。</p>



<p>コロナ渦になった頃から、リモートワークで仕事できるようになにか手に職をつけたいと思って独学でプログラミングを始めてたのですが、仕事をしながらだとなかなか長続きせずにいました。</p>



<p>そんなとき2021年の春先に腰を痛めてしまい、これから先も肉体労働を続けていくのが不安になりました。</p>



<p>これまで食品工場の製造→飲食店→冷凍倉庫でフォークリフトとずっと肉体を酷使してきたので、身体にガタがきたのだと思います。</p>



<p>「これを機に肉体労働を卒業してプログラミングの勉強に本腰を入れろ！という神様のお告げなんだ。」と自分に言い聞かせ、３４歳という歳からプログラミングの勉強を始めようと決心しました。</p>



<p class="is-style-p_microcopy"><a href="https://creator-kid.com/life/lifehack/vocational-school/" target="_blank" rel="noreferrer noopener">職業訓練校入学までのロードマップ</a>はこちら</p>


<div class="related_article typesimple"><a class="related_article__link no-icon" href="https://creator-kid.com/life/lifehack/vocational-school/"><figure class="eyecatch of-cover thum"><img decoding="async" width="485" height="255" src="https://creator-kid.com/wp-content/uploads/2022/01/職業訓練校入学-485x255.jpg" class="archives-eyecatch-image attachment-oc-post-thum wp-post-image" alt="" srcset="https://creator-kid.com/wp-content/uploads/2022/01/職業訓練校入学-485x255.jpg 485w, https://creator-kid.com/wp-content/uploads/2022/01/職業訓練校入学-300x158.jpg 300w, https://creator-kid.com/wp-content/uploads/2022/01/職業訓練校入学-1024x538.jpg 1024w, https://creator-kid.com/wp-content/uploads/2022/01/職業訓練校入学-768x403.jpg 768w, https://creator-kid.com/wp-content/uploads/2022/01/職業訓練校入学.jpg 1200w" sizes="(max-width: 485px) 45vw, 485px" /></figure><div class="related_article__meta archives_post__meta inbox"><div class="related_article__ttl ttl"><span class="labeltext">関連記事</span>【2021年】実例とともに詳しく解説！職業訓練校入学までのロードマップ。</div><time class="time__date gf undo">2022.01.09</time></div></a></div>


<p>※この記事は職業訓練校卒業するまで随時更新していきます。</p>



<h2 class="wp-block-heading" id="web制作学習1ヶ月目">Web制作学習１ヶ月目</h2>



<div class="wp-block-stk-plugin-cbox cbox intitle is-style-site_color type_normal"><div class="box_title"><span class="span__box_title">１ヶ月目</span></div><div class="cboxcomment">
<ul class="wp-block-list">
<li>グループワーク（3日間）</li>



<li>Officeソフト(Word, Excel, PowerPoint)</li>



<li>CMS実習（Wordpress）</li>



<li>HTML</li>



<li>CSS</li>
</ul>
</div></div>



<h3 class="wp-block-heading" id="グループワーク">グループワーク</h3>



<p>初日の入校式が終わると、2〜4日目の3日間でいきなりグループワークがありました。<br>グループワークはその3日間の午後だけで、初日に<strong>NASAゲーム</strong>、２、３日目に<strong>販売戦略プロジェクト</strong>とその発表がありました。</p>



<p>NASAゲームはグループワークで利用可能な<strong>コンセンサスゲーム</strong>です。<br>コンセンサスゲームとは、チームメンバーと<strong>合意形成（コンセンサス）</strong>を行う必要があるゲームです。</p>



<h4 class="wp-block-heading" id="nasaゲーム">NASAゲーム</h4>



<p>まず始めに、個別で考えてから自分の意見を提示します。<br>その後、チームメンバーと話し合いながら全員でチームの１つの結論を導きます。</p>



<p>話し合いをする中で意見が対立することがありますが、その時に<strong>多数決や諦めではなくしっかりと話し合って合意すること</strong>がコンセンサスゲームの目的となっています。</p>



<p>私のチームは結果的には１番優秀な成績でしたが、その結果よりも「<span style="text-decoration: underline;">自分の1人の意見よりコンセンサスをとって導いたチームの結論の方が遥かに優れた回答を出せる</span>」ということを体験し、コンセンサスの重要さを学びました。</p>



<h4 class="wp-block-heading" id="販売戦略プロジェクト">販売戦略プロジェクト</h4>



<p>販売戦略プロジェクトは、実際ありそうなクライアントからの依頼に対して<strong>ターゲットの決定、配色の提案、キャッチフレーズ、コンテンツなど</strong>をチームで話し合い、PowerPointで資料を作成して発表する流れでした。</p>



<p>具体的には、私のチームが担当したのは「食パン耳ラスクプロジェクト」で、サンドイッチ専門店の店主が「サンドイッチを作る過程で廃棄物として出てしまうパンの耳をラスクとしてネット販売をしたい」という依頼。</p>



<p>今回はホームページを作成し、下記の項目をチームで考えて資料にまとめ発表することをしました。</p>



<div class="wp-block-stk-plugin-cbox-notitle cbox is-style-black_box type_simple"><div class="cboxcomment">
<ul class="wp-block-list">
<li>もっと多くの人にパンの耳ラスクを知ってもらいたいが、ターゲットを絞った提案をしてほしい</li>



<li>誰に対しどのような提案をすれば売り上げが向上するか考えてほしい</li>



<li>キャッチフレーズやリード文、コンテンツについて考えてほしい</li>



<li>ページカラー（メイン１色　サブ２色）を提案してほしい</li>



<li>コンテンツ部分の内容を提案してほしい</li>
</ul>
</div></div>



<p>初めましてのチームメンバーと３時間以内で話し合い+資料の準備をしないといけない状況だったので、時間はかなり限られていました。</p>



<p>私のチームは「チームの決定事項に対してデータなどを用いて理由づけができれば良い」という考えだったので、時間内に終わらせられるかって感じで進めていましたが、他のチームは家に持ち帰ったり朝早く来て資料作成しているチームも見られました。</p>



<p>発表では他のチームの提案内容や発表者の声の大きさ・スピードなど５項目くらいを評価して、総合点で優秀なチームを選ぶといった方式をとっていました。まぁ発表者が優秀であれば高得点を取れるという正直狙いがよくわからないプロジェクトでした。</p>



<h3 class="wp-block-heading" id="officeソフト">Officeソフト</h3>



<p>Webサイト制作の発表する時に最低限レベルの資料を作れるように、Office製品のWord、Excel、PowerPointの基本的な操作を4日間学びました。</p>



<p>しかし、それ以来ふれる機会がないので教わったことはほとんど覚えていない気がします。</p>



<h3 class="wp-block-heading" id="cms実習">CMS実習</h3>



<p>WordPressを使って管理画面付きWebサイトの構成や使い方を学びました。</p>



<p>私自身このWordPressブログを2019年にネットの情報を参考に立ち上げて試行錯誤してきたので、ほとんどの新たに教わることはありませんでした。</p>



<p>しかし、そんな中でも自分の中にちゃんと落とし込めたし、使いこなせてなかった機能を新たに使えるようになったのは大きいと思います。</p>



<h3 class="wp-block-heading" id="html">HTML</h3>



<p>HTMLを使ってWebページを作成・修正方法を学びました。</p>



<div class="wp-block-stk-plugin-cbox-notitle cbox is-style-site_color type_normal"><div class="cboxcomment">
<ol class="wp-block-list">
<li>HTMLの基本</li>



<li>文章の定義
<ol class="wp-block-list">
<li>見出しを定義する　h要素：見出し</li>



<li>段落を定義する　p要素：段落</li>



<li>改行を定義する　br要素：改行</li>



<li>強調を定義する　em要素：強調</li>



<li>強い重要性を定義する　strong要素：強い重要性</li>



<li>入力した通りに表示する　pre要素：整形済みテキスト</li>



<li>その他よく使うHTML要素<br>blockquote要素：長い引用文<br>ins要素：あとから内容を追加<br>del要素：あとから内容を削除</li>
</ol>
</li>



<li>リストの定義
<ol class="wp-block-list">
<li>リストを定義する</li>



<li>番号なしリストを定義する<br>ul要素：番号なしリスト枠<br>li要素：リスト項目</li>



<li>番号付きリストを定義する<br>ol要素：番号付きリスト枠<br>li要素：リスト項目</li>



<li>定義リストを定義する<br>dl要素：定義リスト枠<br>dt要素：定義リストタイトル<br>dd要素：定義リスト説明</li>
</ol>
</li>



<li>テーブルの定義
<ol class="wp-block-list">
<li>テーブルを定義する<br>table要素：テーブル枠<br>tr要素：テーブル行<br>th要素：見出しセル<br>td要素：通常セル</li>



<li>テーブルの行や列を連結する　セル連結用属性</li>
</ol>
</li>



<li>グループの定義
<ol class="wp-block-list">
<li>ブロックレベルのグループを定義する<br>header要素：ヘッダー<br>nav要素：ナブ・ナビゲーション<br>footer要素：フッター<br>main要素：メイン（主要コンテンツ：各ページに１つのみ）<br>article要素：アーティクル<br>section要素：セクション（章・部分）<br>aside要素：アサイド（バナー・広告・関連記事）<br>div要素：ディブ（汎用グループ・レイアウト用グループ）</li>



<li>要素に名前をつける属性<br>class属性<br>id属性<br>class名・id名の命令規則<br>構造家タグでよく使われる構成</li>



<li>インラインのグループを定義する<br>span要素：インラインのグループ</li>
</ol>
</li>



<li>リンクの定義
<ol class="wp-block-list">
<li>リンクを定義する<br>a要素：リンクを定義</li>



<li>絶対パスと相対パス<br>絶対パス<br>相対パス<br>絶対パスと相対パスの比較<br>ディレクトリマップ</li>



<li>ページ内リンクを定義する<br>ページトップへ戻るリンク</li>
</ol>
</li>



<li>画像の定義
<ol class="wp-block-list">
<li>画像を定義する<br>img要素：画像表示<br>figure要素；図表用グループ<br>figcaption要素：図表用キャプション</li>



<li>画像をリンク化する</li>
</ol>
</li>



<li>実体参照<br></li>
</ol>
</div></div>



<p>独学でHTMLを勉強していたので復習という形で授業を受けていましたが、ちょっとした疑問なども気軽に授業中に質問できたので自分の中でしっかり整理できました。</p>



<p>例えば、idとclassの使い分けなど動画での学習ではそんな細かく説明はなかったので使い分けを知らずに漠然と使用していましたが、フリーランス講師ならではの生きた情報を交えて教えていただきました。</p>



<p>また、VSCodeのおすすめの設定やプラグイン、VSCodeでの略式のコードの打ち込み方なども教わり、以前よりも効率よくコードを打てるようになったと思います。</p>



<h3 class="wp-block-heading" id="css">CSS</h3>



<p>CSSを使ってWebページの装飾を学びました。</p>



<div class="wp-block-stk-plugin-cbox-notitle cbox is-style-site_color type_normal"><div class="cboxcomment">
<ol class="wp-block-list">
<li>スタイルシートの基本
<ol class="wp-block-list">
<li>CSS適用方式<br>インライン方式<br>埋め込み方式<br>外部リンク方式<br>link要素：外部ファイル読み込み</li>



<li>CSSファイルの新規作成<br>CSSファイルの命名規則</li>
</ol>
</li>



<li>文字・文章のスタイルを定義
<ol class="wp-block-list">
<li>文字・文章のスタイルを定義<br>文字色を定義する：color<br>文字サイズを定義する：font-size<br>文字の太さを定義する：font-weight<br>文字のスタイルを定義する：font-style<br>文章の装飾を定義する：text-decoration<br>行揃えを定義する：text-align<br>書体を定義する：font-family<br>行間を定義する：line-height<br>文字に影をつける：text-shadow</li>



<li>Webフォントの使い方：Google Fonts</li>



<li>検証ツールでCSSエラー個所を探す</li>
</ol>
</li>



<li>背景色・背景画像のスタイルを定義
<ol class="wp-block-list">
<li>背景色・背景画像を定義<br>背景色を定義：background-color<br>背景画像を定義：background-image<br>背景画像の繰り返しを定義：background-repeat<br>背景画像の表示開始位置を定義：background-position<br>背景画像の固定・移動を定義：background-attachment<br>背景画像のサイズを定義：background-size<br>背景のスタイルを一括定義：background<br>１つの要素に対して背景画像を複数指定</li>
</ol>
</li>



<li>ボックススタイルを定義（幅・高さ・余白・線）
<ol class="wp-block-list">
<li>ボックス構造<br>ブロックボックスとインラインボックス</li>



<li>ボックスのスタイルを定義<br>コンテンツ領域の幅を定義：width<br>コンテンツ領域の高さを定義：height<br>パディング領域（内余白）を定義：padding<br>ボーダー領域の線種を定義：border-style<br>ボーダー領域の線幅を定義：border-width<br>ボーダー領域の線の色を定義：border-color<br>ボーダー領域のスタイルを一括定義：上下左右一括指定<br>ボーダー領域のスタイルを一括定義：場所を限定して一括指定<br>角丸を定義する：border-radius<br>マージン領域（外余白）を定義する：margin<br>マージンにautoを指定した時の挙動<br>body要素の外余白を0にする<br>入れ子の内側の上マージンが突き抜ける</li>



<li>ボックスサイズの計算方法：boz-sizing</li>



<li>要素に影をつける：box-shadow</li>
</ol>
</li>



<li>画像のスタイルを定義
<ol class="wp-block-list">
<li>classセレクタ</li>



<li>画像の幅・高さを定義：width, height</li>



<li>画像の最小幅・最小高さを定義：min-height, min-height</li>



<li>画像の最大幅・最大幅を定義：max-width, max-height</li>



<li>はみ出た画像を縮小する</li>



<li>表示位置を定義<br>文章の回り込み：float<br>回り込みの解除：clear</li>



<li>行ない複数画像の縦方向位置調整</li>



<li>画像下の隙間をなくす</li>



<li>img要素の定番定義</li>



<li>画像を角丸表示</li>
</ol>
</li>



<li>リストスタイルを定義
<ol class="wp-block-list">
<li>リストのスタイルを定義<br>リストのデフォルトデザイン<br>リストマーカーの種類を定義する：list-style-type<br>リストマーカーの画像を定義する：list-style-image<br>リストマーカー位置を定義する：list-style-position<br>リストマーカーを一括定義する：list-style<br>リストのインデントを調整する：padding-left<br>リストマーカー画像を背景画像で定義する<br></li>
</ol>
</li>



<li>テーブルのスタイルを定義
<ol class="wp-block-list">
<li>テーブルの枠線を定義：border</li>



<li>テーブルの枠線隙間を定義する：border-collapse</li>



<li>テーブルの文字サイズを定義する：font-size</li>



<li>テーブルの背景色・文字色を定義：background-color, color</li>



<li>セル余白を定義する：padding</li>



<li>セル内の横方向業揃えを定義する：text-align</li>



<li>セル内の縦方向揃え位置を定義する：vertical-align</li>



<li>テーブルの幅を定義：width</li>



<li>テキストの折り返し方法を定義する：white-space</li>



<li>テーブルの表示方法を定義：table-layout</li>



<li>はみ出た内容が非表示時に略文字で知らせる：text-overflow</li>
</ol>
</li>
</ol>
</div></div>



<p>こちらも動画を見て独学で学習したことがありましたが、参考にしていた動画では細かな説明がなかったのでよく理解できていないことが多々ありました。</p>



<p>例えば、独学で学んでいた時はブロック要素とかインライン要素とかよくわからずにいましたが、わからなくても特に問題ないと思っていました。<br>しかし、要素を「中央揃え」にしたいと思ってもその要素がブロック要素なのかインライン要素なのかによって使用するプロパティが違ってきます。</p>



<p>ブロック要素自体を中央揃えは左右にマージン「auto」かつ、対象要素に横幅の指定必須となってきます。（※width指定なしの場合親要素いっぱい横幅でマージン「0」になるため）<br>しかし、要素内コンテンツ（インライン要素）の中央揃えにする場合のプロパティはtext-aligh: centerを使います。</p>



<h3 class="wp-block-heading" id="受講して感じたこと">受講して感じたこと</h3>



<div class="wp-block-stk-plugin-cbox cbox intitle is-style-blue_box type_normal"><div class="box_title"><span class="span__box_title">良かった点</span></div><div class="cboxcomment">
<ul class="wp-block-list">
<li>講師が2人体制で2人ともフリーランス</li>



<li>キャリアコンサルタントが時代遅れな考えの人ではない</li>
</ul>
</div></div>



<div class="wp-block-stk-plugin-cbox cbox intitle is-style-red_box type_normal"><div class="box_title"><span class="span__box_title">悪かった点</span></div><div class="cboxcomment">
<ul class="wp-block-list">
<li>知っていることを教わると時間の無駄だと感じる</li>
</ul>
</div></div>



<h4 class="wp-block-heading" id="講師2人体制で2人ともフリーランス">◎講師2人体制で2人ともフリーランス</h4>



<p>講師が2人体制でフリーランスである点は非常に良かったと思いました。</p>



<p>職業訓練校に通おうか迷ってた理由の一つが、学校にしか勤めていない講師に教わることでした。<br>ずっと学校で教えているということは、時代遅れなことを教わることになります。</p>



<p>しかし、フリーランスの講師2人はそれぞれ過去に違う仕事をしていた経験がありますし、個々で仕事をしているので生きた情報を教わることができます。</p>



<p>さらに2人体制ということもあり、クラスでわからない人がいてももう一人が補助する体制なので、授業の進行に遅れをとらない点も良かったと思います。</p>



<h4 class="wp-block-heading" id="キャリアコンサルタントが時代遅れな考えの人ではない"><meta charset="utf-8">◎キャリアコンサルタントが時代遅れな考えの人ではない</h4>



<p>職業訓練校側の目的は失業者を育成して、最終的には就職してもらうことです。</p>



<p>東京都の職業訓練後の就職率は４７都道府県中４７位と一番低いみたいです。<br>その理由の一つはフリーターでも東京にはいろんな仕事があるので暮らしていけるとのこと。</p>



<p>職業訓練校側的には就職率を上げたいとこですが、そういうとこに勤めているキャリアコンサルタントは今の時代に合わない考え方を押し付けてくるイメージでした。（勝手な先入観ですが）</p>



<p>しかし、実際にキャリアコンサルティングの面談時にお話しすると、「こーしろ、あーしろ」などは一切言わずに、その人にあったキャリアプランを一緒に考えてくれる人でした。</p>



<p>一昔前は私が思っていた感じの古い体制だったみたいですが、その担当者のおばちゃんが「それではダメだ」との想いから今のような体制に変えたくて変えたそうです。</p>



<p>そんな人がキャリアコンサルティングの長であることはなによりも心強いと思いました。</p>



<h4 class="wp-block-heading" id="知っていることを教わると時間の無駄だと感じる">×知っていることを教わると時間の無駄だと感じる</h4>



<p>私は2019年から独学でWordpressでブログを開設したんですが、この職業訓練校でもWordpressの使い方の授業で習いました。</p>



<p>しかし、すでに自分が知っていることを１週間もかけて習わなくてはいけないのは、すごくストレスに感じました。</p>



<p>確かに自分が知らなかった機能や設定などもあり勉強になることもありましたが、結構時間の無駄だなと感じていました。</p>


]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
