<?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>PHPバリデーション | Seek Rise</title>
	<atom:link href="https://seek-rise.com/tag/php%E3%83%90%E3%83%AA%E3%83%87%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3/feed/" rel="self" type="application/rss+xml" />
	<link>https://seek-rise.com</link>
	<description></description>
	<lastBuildDate>Sat, 03 Jan 2026 14:25:42 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>

<image>
	<url>https://seek-rise.com/wp-content/uploads/2019/10/cropped-favicon-32x32.png</url>
	<title>PHPバリデーション | Seek Rise</title>
	<link>https://seek-rise.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<atom:link rel="hub" href="https://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="https://pubsubhubbub.superfeedr.com"/><atom:link rel="hub" href="https://websubhub.com/hub"/><site xmlns="com-wordpress:feed-additions:1">167377966</site>	<item>
		<title>6-9 PHPのバリデーションとは何か</title>
		<link>https://seek-rise.com/web-development/php-basic/post-434/</link>
					<comments>https://seek-rise.com/web-development/php-basic/post-434/#respond</comments>
		
		<dc:creator><![CDATA[NOA（ノア）]]></dc:creator>
		<pubDate>Mon, 22 Dec 2025 13:59:44 +0000</pubDate>
				<category><![CDATA[Web開発学習ロードマップ]]></category>
		<category><![CDATA[6.PHP基礎]]></category>
		<category><![CDATA[Web開発]]></category>
		<category><![CDATA[初心者]]></category>
		<category><![CDATA[PHP基礎]]></category>
		<category><![CDATA[PHPバリデーション]]></category>
		<category><![CDATA[入力チェック]]></category>
		<guid isPermaLink="false">https://seek-rise.com/?p=434</guid>

					<description><![CDATA[前の記事では、HTMLフォームから送信されたデータをPHPで 受け取って表示する ところまで進みました。 しかし、「受け取れる」だけではWebアプリケーションとしては不十分です。 ・未入力のまま送信されていないか・想定外 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p data-start="253" data-end="315">前の記事では、<br data-start="260" data-end="263" />HTMLフォームから送信されたデータを<br data-start="282" data-end="285" />PHPで <strong data-start="290" data-end="303">受け取って表示する</strong> ところまで進みました。</p>
<p data-start="317" data-end="359">しかし、<br data-start="321" data-end="324" />「受け取れる」だけでは<br data-start="335" data-end="338" />Webアプリケーションとしては不十分です。</p>
<p data-start="361" data-end="414">・未入力のまま送信されていないか<br data-start="377" data-end="380" />・想定外の値が入っていないか<br data-start="394" data-end="397" />・そのまま処理しても問題ないか</p>
<p data-start="416" data-end="456">これらをチェックする処理が、<br data-start="430" data-end="433" /><strong data-start="433" data-end="452">バリデーション（入力チェック）</strong> です。</p>
<p data-start="458" data-end="517">この記事では、<br data-start="465" data-end="468" />PHPでバリデーションを行うための<br data-start="485" data-end="488" /><strong data-start="488" data-end="500">考え方と最小実装</strong> を<br data-start="502" data-end="505" />コード付きで解説します。</p>
<hr data-start="519" data-end="522" />

  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">この記事で学べること</a></li><li><a href="#toc2" tabindex="0">バリデーションとは何か</a></li><li><a href="#toc3" tabindex="0">なぜバリデーションが必要なのか</a></li><li><a href="#toc4" tabindex="0">バリデーションの基本的な考え方</a></li><li><a href="#toc5" tabindex="0">エラーは配列で管理する</a></li><li><a href="#toc6" tabindex="0">必須入力チェックの基本</a><ol><li><a href="#toc7" tabindex="0">サンプルコード①：必須チェック</a></li><li><a href="#toc8" tabindex="0">コードの読み解き</a></li></ol></li><li><a href="#toc9" tabindex="0">なぜ empty() ではなく === &#8221; を使うのか</a></li><li><a href="#toc10" tabindex="0">複数項目のバリデーション</a><ol><li><a href="#toc11" tabindex="0">サンプルコード②：複数項目チェック</a></li></ol></li><li><a href="#toc12" tabindex="0">文字数チェックの基本</a><ol><li><a href="#toc13" tabindex="0">サンプルコード③：文字数チェック</a></li><li><a href="#toc14" tabindex="0">ポイント</a></li></ol></li><li><a href="#toc15" tabindex="0">バリデーションは「処理の入口」で行う</a></li><li><a href="#toc16" tabindex="0">バリデーションとセキュリティは別物</a></li><li><a href="#toc17" tabindex="0">初心者がよくやるミス</a></li><li><a href="#toc18" tabindex="0">まとめ</a></li><li><a href="#toc19" tabindex="0">次に読むべき記事</a></li></ol>
    </div>
  </div>

<h2 data-start="524" data-end="537"><span id="toc1">この記事で学べること</span></h2>
<p data-start="539" data-end="624">・バリデーションとは何か<br data-start="551" data-end="554" />・なぜバリデーションが必要なのか<br data-start="570" data-end="573" />・必須入力チェックの実装方法<br data-start="587" data-end="590" />・エラーメッセージの管理方法<br data-start="604" data-end="607" />・フォーム処理での基本パターン</p>
<hr data-start="626" data-end="629" />
<h2 data-start="631" data-end="645"><span id="toc2">バリデーションとは何か</span></h2>
<p data-start="647" data-end="691">バリデーションとは、<br data-start="657" data-end="660" /><strong data-start="660" data-end="687">入力されたデータが正しいかどうかを確認する処理</strong> です。</p>
<p data-start="693" data-end="701">「正しい」とは、</p>
<p data-start="703" data-end="736">・空でない<br data-start="708" data-end="711" />・形式が合っている<br data-start="720" data-end="723" />・想定した範囲内である</p>
<p data-start="738" data-end="759">といった条件を満たしていることを指します。</p>
<hr data-start="761" data-end="764" />
<h2 data-start="766" data-end="784"><span id="toc3">なぜバリデーションが必要なのか</span></h2>
<p data-start="786" data-end="817">バリデーションを行わないと、<br data-start="800" data-end="803" />次のような問題が起こります。</p>
<p data-start="819" data-end="868">・未入力データが保存される<br data-start="832" data-end="835" />・処理の途中でエラーが起きる<br data-start="849" data-end="852" />・想定外の値で不具合が起こる</p>
<p data-start="870" data-end="928">また、<br data-start="873" data-end="876" />ユーザーは必ずしも<br data-start="885" data-end="888" /><strong data-start="888" data-end="908">正しく入力してくれるとは限らない</strong><br data-start="908" data-end="911" />という前提で考える必要があります。</p>
<hr data-start="930" data-end="933" />
<h2 data-start="935" data-end="953"><span id="toc4">バリデーションの基本的な考え方</span></h2>
<p data-start="955" data-end="992">PHPでのバリデーションは、<br data-start="969" data-end="972" />次の流れで考えると分かりやすくなります。</p>
<ol data-start="994" data-end="1068">
<li data-start="994" data-end="1009">
<p data-start="997" data-end="1009">入力データを受け取る</p>
</li>
<li data-start="1010" data-end="1028">
<p data-start="1013" data-end="1028">条件に合っているか確認する</p>
</li>
<li data-start="1029" data-end="1048">
<p data-start="1032" data-end="1048">問題があればエラーを保存する</p>
</li>
<li data-start="1049" data-end="1068">
<p data-start="1052" data-end="1068">問題がなければ次の処理へ進む</p>
</li>
</ol>
<hr data-start="1070" data-end="1073" />
<h2 data-start="1075" data-end="1089"><span id="toc5">エラーは配列で管理する</span></h2>
<p data-start="1091" data-end="1132">バリデーションでは、<br data-start="1101" data-end="1104" /><strong data-start="1104" data-end="1122">エラーメッセージを配列で管理</strong> するのが基本です。</p>
<p data-start="1134" data-end="1138">理由は、</p>
<p data-start="1140" data-end="1187">・複数のエラーを同時に扱える<br data-start="1154" data-end="1157" />・後で表示方法を変えやすい<br data-start="1170" data-end="1173" />・処理の流れが整理される</p>
<p data-start="1189" data-end="1194">からです。</p>
<hr data-start="1196" data-end="1199" />
<h2 data-start="1201" data-end="1215"><span id="toc6">必須入力チェックの基本</span></h2>
<p data-start="1217" data-end="1252">まずは、<br data-start="1221" data-end="1224" /><strong data-start="1224" data-end="1242">最も基本的な必須入力チェック</strong> を見てみましょう。</p>
<h3 data-start="1254" data-end="1273"><span id="toc7">サンプルコード①：必須チェック</span></h3>
<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary">
<pre class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-php"><span class="hljs-meta">&lt;?php</span>
<span class="hljs-variable">$errors</span> = [];

<span class="hljs-variable">$username</span> = <span class="hljs-variable">$_POST</span>[<span class="hljs-string">'username'</span>] ?? <span class="hljs-string">''</span>;

<span class="hljs-keyword">if</span> (<span class="hljs-variable">$username</span> === <span class="hljs-string">''</span>) {
  <span class="hljs-variable">$errors</span>[] = <span class="hljs-string">'名前を入力してください'</span>;
}

<span class="hljs-keyword">if</span> (<span class="hljs-keyword">empty</span>(<span class="hljs-variable">$errors</span>)) {
  <span class="hljs-keyword">echo</span> <span class="hljs-string">'処理を続行します'</span>;
} <span class="hljs-keyword">else</span> {
  <span class="hljs-keyword">foreach</span> (<span class="hljs-variable">$errors</span> <span class="hljs-keyword">as</span> <span class="hljs-variable">$error</span>) {
    <span class="hljs-keyword">echo</span> <span class="hljs-variable">$error</span> . <span class="hljs-string">'&lt;br&gt;'</span>;
  }
}
</code></pre>
</div>
<hr data-start="1517" data-end="1520" />
<h3 data-start="1522" data-end="1534"><span id="toc8">コードの読み解き</span></h3>
<p data-start="1536" data-end="1633">・$errors<br data-start="1544" data-end="1547" />　→ エラーメッセージを入れる配列<br data-start="1564" data-end="1567" />・$username === &#8221;<br data-start="1584" data-end="1587" />　→ 空文字かどうかをチェック<br data-start="1602" data-end="1605" />・エラーがあれば配列に追加<br data-start="1618" data-end="1621" />・最後にまとめて表示</p>
<p data-start="1635" data-end="1665">この形が、<br data-start="1640" data-end="1643" /><strong data-start="1643" data-end="1661">PHPバリデーションの基本形</strong> です。</p>
<hr data-start="1667" data-end="1670" />
<h2 data-start="1672" data-end="1703"><span id="toc9">なぜ empty() ではなく === &#8221; を使うのか</span></h2>
<p data-start="1705" data-end="1720">empty() は便利ですが、</p>
<p data-start="1722" data-end="1733">・0<br data-start="1724" data-end="1727" />・&#8217;0&#8242;</p>
<p data-start="1735" data-end="1748">なども「空」と判定します。</p>
<p data-start="1750" data-end="1804">そのため、<br data-start="1755" data-end="1758" />文字入力の必須チェックでは<br data-start="1771" data-end="1774" /><strong data-start="1774" data-end="1792">空文字かどうかを明示的に確認</strong><br data-start="1792" data-end="1795" />する方が安全です。</p>
<hr data-start="1806" data-end="1809" />
<h2 data-start="1811" data-end="1826"><span id="toc10">複数項目のバリデーション</span></h2>
<p data-start="1828" data-end="1854">実際のフォームでは、<br data-start="1838" data-end="1841" />複数の入力項目を扱います。</p>
<h3 data-start="1856" data-end="1877"><span id="toc11">サンプルコード②：複数項目チェック</span></h3>
<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary">
<pre class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-php"><span class="hljs-meta">&lt;?php</span>
<span class="hljs-variable">$errors</span> = [];

<span class="hljs-variable">$name</span>  = <span class="hljs-variable">$_POST</span>[<span class="hljs-string">'name'</span>]  ?? <span class="hljs-string">''</span>;
<span class="hljs-variable">$email</span> = <span class="hljs-variable">$_POST</span>[<span class="hljs-string">'email'</span>] ?? <span class="hljs-string">''</span>;

<span class="hljs-keyword">if</span> (<span class="hljs-variable">$name</span> === <span class="hljs-string">''</span>) {
  <span class="hljs-variable">$errors</span>[] = <span class="hljs-string">'名前を入力してください'</span>;
}

<span class="hljs-keyword">if</span> (<span class="hljs-variable">$email</span> === <span class="hljs-string">''</span>) {
  <span class="hljs-variable">$errors</span>[] = <span class="hljs-string">'メールアドレスを入力してください'</span>;
}

<span class="hljs-keyword">if</span> (<span class="hljs-keyword">empty</span>(<span class="hljs-variable">$errors</span>)) {
  <span class="hljs-keyword">echo</span> <span class="hljs-string">'すべての入力が正しいです'</span>;
} <span class="hljs-keyword">else</span> {
  <span class="hljs-keyword">foreach</span> (<span class="hljs-variable">$errors</span> <span class="hljs-keyword">as</span> <span class="hljs-variable">$error</span>) {
    <span class="hljs-keyword">echo</span> <span class="hljs-variable">$error</span> . <span class="hljs-string">'&lt;br&gt;'</span>;
  }
}
</code></pre>
</div>
<hr data-start="2205" data-end="2208" />
<h2 data-start="2210" data-end="2223"><span id="toc12">文字数チェックの基本</span></h2>
<p data-start="2225" data-end="2245">次に、<br data-start="2228" data-end="2231" />文字数をチェックする例です。</p>
<h3 data-start="2247" data-end="2267"><span id="toc13">サンプルコード③：文字数チェック</span></h3>
<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary">
<pre class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-php"><span class="hljs-meta">&lt;?php</span>
<span class="hljs-variable">$name</span> = <span class="hljs-variable">$_POST</span>[<span class="hljs-string">'name'</span>] ?? <span class="hljs-string">''</span>;
<span class="hljs-variable">$errors</span> = [];

<span class="hljs-keyword">if</span> (<span class="hljs-title function_ invoke__">mb_strlen</span>(<span class="hljs-variable">$name</span>) &gt; <span class="hljs-number">20</span>) {
  <span class="hljs-variable">$errors</span>[] = <span class="hljs-string">'名前は20文字以内で入力してください'</span>;
}
</code></pre>
</div>
<hr data-start="2399" data-end="2402" />
<h3 data-start="2404" data-end="2412"><span id="toc14">ポイント</span></h3>
<p data-start="2414" data-end="2471">・mb_strlen<br data-start="2424" data-end="2427" />　→ 日本語を含めた文字数を正しく数える<br data-start="2447" data-end="2450" />・文字数制限は実務で非常によく使われる</p>
<hr data-start="2473" data-end="2476" />
<h2 data-start="2478" data-end="2499"><span id="toc15">バリデーションは「処理の入口」で行う</span></h2>
<p data-start="2501" data-end="2510">重要な考え方です。</p>
<p data-start="2512" data-end="2540">・データを使う前<br data-start="2520" data-end="2523" />・保存する前<br data-start="2529" data-end="2532" />・表示する前</p>
<p data-start="2542" data-end="2577"><strong data-start="2542" data-end="2561">必ず最初にバリデーションを行う</strong><br data-start="2561" data-end="2564" />ことで、処理が安定します。</p>
<hr data-start="2579" data-end="2582" />
<h2 data-start="2584" data-end="2604"><span id="toc16">バリデーションとセキュリティは別物</span></h2>
<p data-start="2606" data-end="2622">ここは混同しやすいポイントです。</p>
<p data-start="2624" data-end="2681">・バリデーション<br data-start="2632" data-end="2635" />　→ 入力が正しいか<br data-start="2645" data-end="2648" />・セキュリティ対策（XSSなど）<br data-start="2664" data-end="2667" />　→ 安全に表示できるか</p>
<p data-start="2683" data-end="2719">バリデーションをしていても、<br data-start="2697" data-end="2700" /><strong data-start="2700" data-end="2715">セキュリティ対策は必須</strong> です。</p>
<hr data-start="2721" data-end="2724" />
<h2 data-start="2726" data-end="2739"><span id="toc17">初心者がよくやるミス</span></h2>
<p data-start="2741" data-end="2756">バリデーションで多いミスです。</p>
<p data-start="2758" data-end="2806">・エラーが1つしか表示できない<br data-start="2773" data-end="2776" />・チェックせずに処理を進める<br data-start="2790" data-end="2793" />・入力値を直接信用する</p>
<p data-start="2808" data-end="2836">「まずチェックする」<br data-start="2818" data-end="2821" />という順序を必ず守りましょう。</p>
<hr data-start="2838" data-end="2841" />
<h2 data-start="2843" data-end="2849"><span id="toc18">まとめ</span></h2>
<p data-start="2851" data-end="2878">この記事では、<br data-start="2858" data-end="2861" />PHPでのバリデーションについて、</p>
<p data-start="2880" data-end="2926">・入力チェックの役割<br data-start="2890" data-end="2893" />・エラーを配列で管理する理由<br data-start="2907" data-end="2910" />・必須・文字数チェックの実装</p>
<p data-start="2928" data-end="2935">を学びました。</p>
<p data-start="2937" data-end="2982">ここまでできるようになると、<br data-start="2951" data-end="2954" />フォーム処理は<br data-start="2961" data-end="2964" /><strong data-start="2964" data-end="2981">実務レベルに一段近づきます</strong>。</p>
<hr data-start="2984" data-end="2987" />
<h2 data-start="2989" data-end="3000"><span id="toc19">次に読むべき記事</span></h2>
<p data-start="3002" data-end="3031">▶ 次の記事<br data-start="3008" data-end="3011" /><a href="https://seek-rise.com/web-development/php-basic/post-438/">6-10 XSSとは？なぜ危険なのか</a></p>
<p data-start="3033" data-end="3069">▶ 関連記事<br data-start="3039" data-end="3042" /><a href="https://seek-rise.com/web-development/php-basic/post-428/">6-8 PHPでフォームデータを受け取って表示する</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://seek-rise.com/web-development/php-basic/post-434/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">434</post-id>	</item>
	</channel>
</rss>
