<?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>人気記事 &#8211; PHPプログラミングの教科書 [php1st.com]</title>
	<atom:link href="https://php1st.com/topics/feed" rel="self" type="application/rss+xml" />
	<link>https://php1st.com</link>
	<description>気軽に読めるPHP入門書・PHPスクリプトが動かないときの原因と対策などを紹介します。</description>
	<lastBuildDate>Tue, 26 Jan 2021 06:41:37 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7.1</generator>
	<item>
		<title>「Notice: Use of undefined constant」と表示されるとき</title>
		<link>https://php1st.com/2347</link>
		
		<dc:creator><![CDATA[西沢直木]]></dc:creator>
		<pubDate>Thu, 27 Oct 2016 03:46:23 +0000</pubDate>
				<category><![CDATA[エラーメッセージ]]></category>
		<category><![CDATA[人気記事]]></category>
		<guid isPermaLink="false">https://php1st.com/?p=2347</guid>

					<description><![CDATA[「Notice: Use of undefined constant」は直訳すると「未定義の定数を使った」ですが、ほとんどの場合、深く考える必要はありません。単純な入力ミスです。以下、原因と対策を紹介します。 入力ミスで [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>「Notice: Use of undefined constant」は直訳すると「未定義の定数を使った」ですが、ほとんどの場合、深く考える必要はありません。<span class="stro">単純な入力ミス</span>です。以下、原因と対策を紹介します。</p>
<h2>入力ミスで「Use of undefined constant」になる理由</h2>
<p>定数の話から離れますが、たとえば、「サンプルPC教室」という文字列を画面に表示するコードを考えてみましょう。</p>
<pre class="brush: php; gutter: false; title: 画面に文字列を表示する; notranslate">
&lt;?php
echo &quot;サンプルPC教室&quot;;
?&gt;
</pre>
<div class="list-title">実行結果</div>
<div class="res">サンプルPC教室</div>
<p>PHPの入門書の最初に出てくるような何のオチもないコードですが、続いて<span class="stro">文字列を囲んでいる「&#8221;」（または「&#8217;」）を取り除いて</span>みましょう。</p>
<pre class="brush: php; gutter: false; highlight: [2]; title: 文字列の前後のクォートを削除すると…; notranslate">
&lt;?php
echo サンプルPC教室;
?&gt;
</pre>
<p>これだけで次のような<span class="stro">「Use of undefined constant」</span>というエラーメッセージが表示されます。直訳すると「未定義の定数を使った」ですが、言うまでもなく原因は単純な入力ミスです。</p>
<div class="list-title">実行結果</div>
<div class="res">Notice: Use of undefined constant サンプルPC教室 &#8211; assumed &#8216;サンプルPC教室&#8217; in …略…test.php on line 6<br />
サンプルPC教室 </div>
<p>同じようなエラーで困っている方は、<span class="stro">「未定義の定数」の意味を深追いせず</span>に、入力したコードを見直してみてください。</p>
<h2>「未定義の定数の使用」とは</h2>
<p>ここからは技術的な話なので、問題が解決した方は読まなくても大丈夫です。興味のある方だけ、読んでみてください。</p>
<p>単純な入力ミスで「Use of undefined constant」（未定義の定数の使用）のようなエラーメッセージが表示される原因は、表示しようと思った文字列が定数（内容が固定の要素）だと判断されてしまうからです。</p>
<p>以下は定数を出力する例です。</p>
<pre class="brush: php; gutter: false; title: 定義した定数を画面に表示する; notranslate">
&lt;?php
define('CONST1', 'テスト');
echo CONST1;
?&gt;
</pre>
<div class="list-title">実行結果</div>
<div class="res">テスト</div>
<p>定数を使うには、<span class="stro">最初にdefine関数で定義してから、定数名を呼び出す</span>流れになります。定数名を呼び出す場合、前後を「&#8221;」や「&#8217;」で囲む必要はありません。つまり、<span class="stro">定数を表示するコードは、単純に文字列を表示するときの入力ミスと同じようなコードになる</span>場合があります。</p>
<p>実際、上記のコードでdefine関数を省略してみましょう。わかりやすいようにコメントにしてみます。</p>
<pre class="brush: php; gutter: false; title: 「Use of undefined constant」になるコード; notranslate">
&lt;?php
//define('CONST1', 'テスト');
echo CONST1;
?&gt;
</pre>
<div class="list-title">実行結果</div>
<div class="res">Notice: Use of undefined constant CONST1 &#8211; assumed &#8216;CONST1&#8217; in …略…test.php on line 7<br />
CONST1</div>
<p>期待通り、「Notice: Use of undefined constant CONST1」となります。この場合は定数の定義忘れですが、<span class="stro">思い当たる原因がない場合</span>は、最初に説明したように<span class="stro">単純な入力ミス</span>です。エラーメッセージを深追いしないように注意しましょう。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PHPのエラー・警告・注意の違いとは</title>
		<link>https://php1st.com/1833</link>
		
		<dc:creator><![CDATA[西沢直木]]></dc:creator>
		<pubDate>Tue, 16 Sep 2014 14:50:14 +0000</pubDate>
				<category><![CDATA[エラーメッセージ]]></category>
		<category><![CDATA[人気記事]]></category>
		<guid isPermaLink="false">http://php1st.com/?p=1833</guid>

					<description><![CDATA[PHPを実行しているとさまざまなエラーメッセージが表示されます。主なものは次の3種類です。 エラー（Error） 警告（Warning） 注意（Notice） これらの違いを簡単に説明します。 エラーは修正が必要な間違い [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>PHPを実行しているとさまざまなエラーメッセージが表示されます。主なものは次の3種類です。</p>
<ul>
<li>エラー（Error）</li>
<li>警告（Warning）</li>
<li>注意（Notice）</li>
</ul>
<p>これらの違いを簡単に説明します。</p>
<h2>エラーは修正が必要な間違いのこと</h2>
<p>エラーは文字通りエラー（間違い）なので、修正が必要ということで実行が停止します。たとえば、次のコードは2行目に「;」が抜けているので文法エラーで処理が実行されません。</p>
<pre class="brush: php; highlight: [2]; title: エラーになるコード; notranslate">
&lt;?php
$fp = fopen(&quot;abc.txt&quot;, &quot;r&quot;)
while (!feof($fp)) {
    $line = fgets($fp);
    echo $line.&quot;&lt;br&gt;&quot;;
}
?&gt;
</pre>
<p>「Parse error」（文法エラー）というエラーメッセージが表示されます。</p>
<div id="attachment_1831" style="width: 452px" class="wp-caption alignnone"><img decoding="async" aria-describedby="caption-attachment-1831" src="http://php1st.com/wp-content/uploads/2014/09/2014-09-16-22-50-35.jpg" alt="エラーがあるので処理は実行されない" width="442" height="66" class="size-full wp-image-1831" srcset="https://php1st.com/wp-content/uploads/2014/09/2014-09-16-22-50-35.jpg 442w, https://php1st.com/wp-content/uploads/2014/09/2014-09-16-22-50-35-300x45.jpg 300w" sizes="(max-width: 442px) 100vw, 442px" /><p id="caption-attachment-1831" class="wp-caption-text">エラーがあるので処理は実行されない</p></div>
<div class="pt">
文法エラーのメッセージが表示された場合、英語で示された意味がわからなくても焦る必要はありません。ほとんどは単純な入力ミスです。
</div>
<p>エラーメッセージで注意したいのは行番号です。この例でも「4行目にエラーがある」と表示されていますが、実際に問題があるのは2行目です。</p>
<div id="attachment_1832" style="width: 398px" class="wp-caption alignnone"><img decoding="async" aria-describedby="caption-attachment-1832" src="http://php1st.com/wp-content/uploads/2014/09/2014-09-16-22-55-14.jpg" alt="「4行目にエラー」と表示されるが…" width="388" height="68" class="size-full wp-image-1832" srcset="https://php1st.com/wp-content/uploads/2014/09/2014-09-16-22-55-14.jpg 388w, https://php1st.com/wp-content/uploads/2014/09/2014-09-16-22-55-14-300x52.jpg 300w" sizes="(max-width: 388px) 100vw, 388px" /><p id="caption-attachment-1832" class="wp-caption-text">「4行目にエラー」と表示されるが…</p></div>
<p>これは、2行目が完結していないため“責任連鎖”の形で4行目がエラーだと判断されているだけです。特に文法エラーのエラーメッセージは行番号を追いかけすぎると原因がわからなくなるので注意しましょう。</p>
<h2>警告は「たぶん修正が必要」な間違いのこと</h2>
<p>「警告」（Warning）はエラーのように処理を停止するほど致命的ではないものの、おそらくコードの修正が必要というレベルの間違いです。</p>
<p>次のコードではファイルの内容を表示しようとしていますが、存在しないファイルを開こうとしているので「警告」が表示されます。</p>
<pre class="brush: php; title: 警告（Warning）が表示されるコード; notranslate">
&lt;?php
echo &quot;開始&quot;;
$data = file_get_contents(&quot;not_exists.txt&quot;);
echo &quot;終了&quot;;
?&gt;
</pre>
<p>警告（Warning）が表示されますが処理は停止されずに「開始」から「終了」まで表示されています。</p>
<div id="attachment_1834" style="width: 393px" class="wp-caption alignnone"><img decoding="async" aria-describedby="caption-attachment-1834" src="http://php1st.com/wp-content/uploads/2014/09/2014-09-16-23-14-37.jpg" alt="警告（Warning）が表示される" width="383" height="102" class="size-full wp-image-1834" srcset="https://php1st.com/wp-content/uploads/2014/09/2014-09-16-23-14-37.jpg 383w, https://php1st.com/wp-content/uploads/2014/09/2014-09-16-23-14-37-300x79.jpg 300w" sizes="(max-width: 383px) 100vw, 383px" /><p id="caption-attachment-1834" class="wp-caption-text">警告（Warning）が表示される</p></div>
<p>「文法エラーのように致命的ではないので処理は停止しないけど、たぶん修正した方が良いから「警告」しておきます。」というくらいの強さのメッセージです。</p>
<p>この例でも、存在しないファイルを開いてしまったというのは無視できない動作のはずです（ファイル名の間違い、ファイルが存在しないときの処理の記述もれなど）。</p>
<p>処理が終わっていて問題なさそうに見えますが、強めのメッセージ「警告」が表示されていた場合はコードを見直して問題点を修正するようにしましょう。</p>
<h2>注意は「修正しなくても大丈夫」（？）な間違いのこと</h2>
<p>「注意」（Notice）は、その響き通りにあまり「コードを修正しろ！」の強制力がなさそうなメッセージです。定番は次のようなコードです。</p>
<pre class="brush: php; highlight: [3]; title: 注意（Notice）が表示されるコード; notranslate">
&lt;?php
echo &quot;開始&quot;;
echo $temp;
echo &quot;終了&quot;;
?&gt;
</pre>
<p>3行目でまだ定義もしていない変数$tempを表示しようとしているので「注意」が表示されますが、特別に大問題も発生しておらず処理は最後まで完了します。</p>
<div id="attachment_1836" style="width: 399px" class="wp-caption alignnone"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1836" src="http://php1st.com/wp-content/uploads/2014/09/2014-09-16-23-22-21.jpg" alt="注意（Notice）が表示される" width="389" height="90" class="size-full wp-image-1836" srcset="https://php1st.com/wp-content/uploads/2014/09/2014-09-16-23-22-21.jpg 389w, https://php1st.com/wp-content/uploads/2014/09/2014-09-16-23-22-21-300x69.jpg 300w" sizes="auto, (max-width: 389px) 100vw, 389px" /><p id="caption-attachment-1836" class="wp-caption-text">注意（Notice）が表示される</p></div>
<p>定義していない変数をいきなり表示するというのは作法として問題かもしれませんが、この例のように、未定義の変数をいきなり表示しても結果として処理結果が正しく終わることも少なくありません。その意味で「修正しなくても大丈夫かも（？）」という軽いレベルのエラーメッセージということです。</p>
<p>処理が停止しない点で「警告」と似ていますが、「注意」はおおげさに言えば「無視しても大丈夫（かも）」というくらいのメッセージです。</p>
<p>とはいえ、「常に無視して大丈夫！」と胸をはって言えるとは限りません。変数の初期化を忘れていたなど重大なミスも考えられるので、コードの見直しは必要です。</p>
<p>それをふまえて注意（Notice）は「とりあえずNoticeを非表示にしておこう」という方法で対処することがあります。</p>
<p>たとえば、サーバーを変更したら膨大なNoticeが表示された場合です。これまで非表示にしておいたNoticeが移転先のサーバーでは表示される設定になっていて「急に膨大なエラーメッセージが！」とあせることもあります。</p>
<p>そのようなときは、処理内容に問題がないのであればNoticeメッセージを非表示にする方法があります。以下のページも参考にしてください。</p>
<p><a href="http://php1st.com/634/" title="Noticeエラーだけを非表示にしたいとき">Noticeエラーだけを非表示にしたいとき</a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>「Duplicate entry &#8216;1&#8217; for key &#8216;PRIMARY&#8217;」と表示されるとき</title>
		<link>https://php1st.com/1470</link>
		
		<dc:creator><![CDATA[西沢直木]]></dc:creator>
		<pubDate>Wed, 29 May 2013 02:52:32 +0000</pubDate>
				<category><![CDATA[エラーメッセージ]]></category>
		<category><![CDATA[人気記事]]></category>
		<guid isPermaLink="false">http://php1st.com/?p=1470</guid>

					<description><![CDATA[「Duplicate entry &#8216;1&#8217; for key &#8216;PRIMARY&#8217;」エラーは、データベース（テーブル）に入力しようとしたデータの主キー（idフィールドなど）がすで [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>「Duplicate entry &#8216;1&#8217; for key &#8216;PRIMARY&#8217;」エラーは、データベース（テーブル）に入力しようとしたデータの<strong>主キー</strong>（idフィールドなど）が<strong>すでに使われている</strong>ことを示しています（重複不可のため）。</p>
<h2>エラーの再現</h2>
<p>現在、idフィールドには1から5までが使われています。</p>
<div id="attachment_1471" style="width: 159px" class="wp-caption alignnone"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1471" src="http://php1st.com/wp-content/uploads/2013/05/055.png" alt="現在のデータ" title="現在のデータ" width="149" height="159" class="size-full wp-image-1471" /><p id="caption-attachment-1471" class="wp-caption-text">現在のデータ</p></div>
<p>idが重複するデータを入力します。以下はデータベース管理ツール「phpMyAdmin」での入力例です。</p>
<div id="attachment_1474" style="width: 668px" class="wp-caption alignnone"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1474" src="http://php1st.com/wp-content/uploads/2013/05/0561.png" alt="idが重複するデータを入力" title="idが重複するデータを入力" width="658" height="248" class="size-full wp-image-1474" srcset="https://php1st.com/wp-content/uploads/2013/05/0561.png 658w, https://php1st.com/wp-content/uploads/2013/05/0561-300x113.png 300w" sizes="auto, (max-width: 658px) 100vw, 658px" /><p id="caption-attachment-1474" class="wp-caption-text">idが重複するデータを入力</p></div>
<p>実行すると、主キーが重複するというエラーメッセージが表示されます。</p>
<div id="attachment_1475" style="width: 310px" class="wp-caption alignnone"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1475" src="http://php1st.com/wp-content/uploads/2013/05/059-300x285.png" alt="「Duplicate entry &#039;1&#039; for key &#039;PRIMARY&#039;」エラー" title="「Duplicate entry &#039;1&#039; for key &#039;PRIMARY&#039;」エラー" width="300" height="285" class="size-medium wp-image-1475" srcset="https://php1st.com/wp-content/uploads/2013/05/059-300x285.png 300w, https://php1st.com/wp-content/uploads/2013/05/059.png 378w" sizes="auto, (max-width: 300px) 100vw, 300px" /><p id="caption-attachment-1475" class="wp-caption-text">「Duplicate entry &#8216;1&#8217; for key &#8216;PRIMARY&#8217;」エラー</p></div>
<p>このパターンでエラーメッセージが表示された場合、idフィールドに重複しない値を入力すれば解決です。idフィールドが連番（AUTO_INCREMENT）に設定されている場合、自動で重複しない連番が割り当てられるので、何も入力する必要はありません。</p>
<div id="attachment_1482" style="width: 544px" class="wp-caption alignnone"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1482" src="http://php1st.com/wp-content/uploads/2013/05/063.png" alt="連番には何も入力する必要がない" title="連番には何も入力する必要がない" width="534" height="256" class="size-full wp-image-1482" srcset="https://php1st.com/wp-content/uploads/2013/05/063.png 534w, https://php1st.com/wp-content/uploads/2013/05/063-300x143.png 300w" sizes="auto, (max-width: 534px) 100vw, 534px" /><p id="caption-attachment-1482" class="wp-caption-text">連番には何も入力する必要がない</p></div>
<h2>データインポートでエラーになる場合</h2>
<p>既存テーブルにデータをインポートするときにこのエラーが発生する場合があります。</p>
<p>たとえば、データをインポートするtable1.sqlに次のように記述されていると、既存のテーブルと主キーが重複するので、エラーになります。</p>
<pre class="brush: php; title: インポートすると主キーが重複するデータ; notranslate">
INSERT INTO `table1` (`id`, `nam`, `pre`, `ag`) VALUES(1, '高橋一郎', '鳥取県', 60);
INSERT INTO `table1` (`id`, `nam`, `pre`, `ag`) VALUES(2, '近藤次郎', '青森県', 40);
INSERT INTO `table1` (`id`, `nam`, `pre`, `ag`) VALUES(3, '山下三郎', '大阪府', 55);
INSERT INTO `table1` (`id`, `nam`, `pre`, `ag`) VALUES(4, '新田史郎', '沖縄県', 18);
INSERT INTO `table1` (`id`, `nam`, `pre`, `ag`) VALUES(5, '小川五郎', '埼玉県', 30);
</pre>
<div id="attachment_1478" style="width: 310px" class="wp-caption alignnone"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1478" src="http://php1st.com/wp-content/uploads/2013/05/060-300x215.png" alt="データインポートでエラーになる" title="データインポートでエラーになる" width="300" height="215" class="size-medium wp-image-1478" srcset="https://php1st.com/wp-content/uploads/2013/05/060-300x215.png 300w, https://php1st.com/wp-content/uploads/2013/05/060.png 378w" sizes="auto, (max-width: 300px) 100vw, 300px" /><p id="caption-attachment-1478" class="wp-caption-text">データインポートでエラーになる</p></div>
<p>エラーを回避するにはINSERT文を変更して、明示的に割り当てられている1から5までのidを<strong>「NULL」</strong>にします。</p>
<pre class="brush: php; title: 主キーの重複を回避するINSERT文; notranslate">
INSERT INTO `table1` (`id`, `nam`, `pre`, `ag`) VALUES(NULL, '高橋一郎', '鳥取県', 60);
INSERT INTO `table1` (`id`, `nam`, `pre`, `ag`) VALUES(NULL, '近藤次郎', '青森県', 40);
INSERT INTO `table1` (`id`, `nam`, `pre`, `ag`) VALUES(NULL, '山下三郎', '大阪府', 55);
INSERT INTO `table1` (`id`, `nam`, `pre`, `ag`) VALUES(NULL, '新田史郎', '沖縄県', 18);
INSERT INTO `table1` (`id`, `nam`, `pre`, `ag`) VALUES(NULL, '小川五郎', '埼玉県', 30);
</pre>
<p>インポートを実行すると、連番が自動で割り当てられてデータが追加され、エラーは発生しません。</p>
<div id="attachment_1479" style="width: 182px" class="wp-caption alignnone"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1479" src="http://php1st.com/wp-content/uploads/2013/05/061.png" alt="連番が自動で割り当てられる" title="連番が自動で割り当てられる" width="172" height="303" class="size-full wp-image-1479" srcset="https://php1st.com/wp-content/uploads/2013/05/061.png 172w, https://php1st.com/wp-content/uploads/2013/05/061-170x300.png 170w" sizes="auto, (max-width: 172px) 100vw, 172px" /><p id="caption-attachment-1479" class="wp-caption-text">連番が自動で割り当てられる</p></div>
<p>手作業で1行ずつ修正するのは面倒ですが、エディタの置き換え機能で正規表現を使えば、連番を一括で「NULL」に置き換えることもできます。以下は秀丸エディタで正規表現による置換を行うときの指定例です（3桁までの数値を「NULL」に変更）。</p>
<div id="attachment_1480" style="width: 529px" class="wp-caption alignnone"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1480" src="http://php1st.com/wp-content/uploads/2013/05/062.png" alt="秀丸エディタによる一括置換" title="秀丸エディタによる一括置換" width="519" height="278" class="size-full wp-image-1480" srcset="https://php1st.com/wp-content/uploads/2013/05/062.png 519w, https://php1st.com/wp-content/uploads/2013/05/062-300x160.png 300w" sizes="auto, (max-width: 519px) 100vw, 519px" /><p id="caption-attachment-1480" class="wp-caption-text">秀丸エディタによる一括置換</p></div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>WordPressテーマの「while (have_posts()) : the_post();」の意味は？</title>
		<link>https://php1st.com/1202</link>
		
		<dc:creator><![CDATA[西沢直木]]></dc:creator>
		<pubDate>Sun, 04 Nov 2012 08:43:44 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[人気記事]]></category>
		<guid isPermaLink="false">http://php1st.com/?p=1202</guid>

					<description><![CDATA[90分で読める！WordPressテンプレートのifとwhile プログラミング経験のない方にも理解しやすいように書いた本です。ifやwhileの仕組みから、解読法などをまとめました。ぜひご利用ください。 WordPre [&#8230;]]]></description>
										<content:encoded><![CDATA[<div style="margin-top:3px;margin-bottom:20px;line-height:150%;">
<a href="http://amazon.co.jp/o/ASIN/B00E1HCERA/wpx-22" target="_blank"><img decoding="async" style="margin-right:20px;" src="http://ecx.images-amazon.com/images/I/41o4jrwiZgL._SL160_.jpg" border="0" align="left"></a><br />
<a href="http://amazon.co.jp/o/ASIN/B00E1HCERA/wpx-22" target="_blank">90分で読める！WordPressテンプレートのifとwhile</a></p>
<p style="margin-top:10px;margin-bottom:10px;">プログラミング経験のない方にも理解しやすいように書いた本です。ifやwhileの仕組みから、解読法などをまとめました。ぜひご利用ください。</p>
</div>
<p><br style="clear:both;" /></p>
<p>WordPressテーマを開いてカスタマイズしようとすると、<br />
よく<strong>「while (have_posts()) : the_post();」</strong>というコード（PHPスクリプト）を見かけます。</p>
<p>以下、解説していきますが、全文を読むのが面倒な方のために意味だけ先に書きます。このコードは、</p>
<p><strong>WordPressデータベースから取り出した投稿・固定ページを1件ずつ表示していく（1ページに10件表示など）</strong></p>
<p>という意味です（あくまでおおざっぱな説明ですが）。</p>
<p>それぞれの命令は、</p>
<p>while → 処理を<strong>繰り返す</strong>構文<br />
have_posts() → 次の記事があるか<strong>調べる</strong><br />
the_post() → 次の記事を<strong>取得</strong>する</p>
<p>という役割を果たします。</p>
<p>これによって、「次の記事があるか<strong>調べて</strong>から、次の記事を<strong>取得</strong>（表示）する」という処理が10回など<strong>繰り返される</strong>仕組みです。結果として1ページに投稿が10件など表示されることになります。</p>
<p>このコードを「PHP入門書を見て解読しよう！」と思っても、実際は少し難しいかもしれません。</p>
<p>というのは、<span id="more-1202"></span>このWordPressテーマの「while…」は、PHPスクリプト<strong>入門者向けの記述とは言えない</strong>からです。</p>
<p>ここでは、PHP入門書を片手にカスタマイズしようという方のために、このPHPスクリプトを分解して説明します。</p>
<h2>WordPressテーマのwhile文をPHP入門書の書き方に直すと</h2>
<p>「while」は<strong>処理を繰り返す</strong>ときに使われるPHPの命令で、「whileに始まりendwhileに終わる」という構造になっています。</p>
<p>つまり、このようなイメージです。</p>
<pre class="brush: php; title: ○whileはendwhileで終わる; notranslate">
&lt;?php while (have_posts()) : the_post(); ?&gt;
…略…
&lt;?php endwhile; ?&gt;
</pre>
<p>もう少しわかりやすいように、いわゆるPHP入門書で習うような書き方に書き換えます。</p>
<p>まずは、「have_posts()) : the_post();」の<strong>「have_posts()) :」</strong>と<strong>「the_post();」</strong>は<strong>別の主旨</strong>のコードなので、わかりやすいように改行します。</p>
<p>また、PHP入門書の書き方に合わせてendwhileの代わりに{と}を使っていますが、処理の主旨は変わりません。</p>
<p>書き直すと次のようになります。</p>
<pre class="brush: php; title: ○PHP入門者向けのwhile文に書き換え; notranslate">
&lt;?php
while (have_posts()) {
the_post();
…略…
}
?&gt;
</pre>
<h2>while文では{&nbsp;}に記述された部分が繰り返される</h2>
<p>while文では、{と}の間に書かれた処理が繰り返されます（WordPressテーマの書き方ではwhileからendwhileの間）。</p>
<p>上の例では、「the_post();、…略…」が繰り返されるということです。</p>
<p>おおざっぱに言えば<strong>「1件の記事の表示」を繰り返す</strong>ということです。</p>
<div class="pt">
the_post()は1件の記事を取得するWordPress関数（タグ）です。
</div>
<pre class="brush: php; title: ○while文で記事の表示を繰り返す; notranslate">
&lt;?php
while (have_posts()) {
1件の記事を表示する
}
?&gt;
</pre>
<div class="pt">
「記事表示の繰り返し」とは、「表示処理」を繰り返す作業のことで、結果として、1件目、2件目、3件目…と、上から順番に1件ずつ表示されます。
</div>
<h2>while文の(&nbsp;)に記述された条件を満たす間は繰り返される</h2>
<p>ここで、記事表示を<strong>「いつまで繰り返すのか？」</strong>という疑問があります。その条件が書かれているのがwhile文の(&nbsp;)です。上の例では<strong>「(have_posts())」</strong>と記述してあり、これは、<strong>「記事がある間」</strong>という意味です。</p>
<pre class="brush: php; title: ○記事がある間、記事表示を続ける; notranslate">
&lt;?php
while (記事がある間) {
1件の記事の処理
}
?&gt;
</pre>
<p>この構成を見れば、while文によって、<strong>記事がある間、1件の記事が処理（表示）されていく</strong>というイメージがわくと思います。その結果、10件や20件の記事が表示されるという仕組みです。</p>
<h2>「have_posts()」は「have_posts() == true」のこと</h2>
<p>ただ、<strong>なぜ「have_posts()」が「記事がある間」なのでしょうか</strong>。実は、「have_posts()」は、条件の「== true」が省略された書き方で、<strong>「have_posts() == true」</strong>ということなのです。</p>
<p>つまり、while文は次のようになります。</p>
<pre class="brush: php; title: ○繰り返し条件の「== true」を省略しない書き方; notranslate">
while (have_posts() == true) {
…略…
}
</pre>
<p>このwhile文の(have_posts() == true)を直訳すると、『<strong>「まだ次の記事ある？」</strong>が<strong>「はい（true）」</strong>の間は…』となります。</p>
<p>WordPressのhave_posts関数は、記事が存在するか調べる関数です。その答えが「はい（true）」のときは、記事の表示を続けるという条件でwhile文が動作しています。</p>
<div class="pt">
true（とfalse）は「1または0」や「OnまたはOff」のように2択の値を持つ「論理値」とよばれる種類の値です。ピンとこない方は、trueとfalseは「はい」と「いいえ」のことだとイメージしておけば良いでしょう。
</div>
<h2>「while (have_posts()) : the_post();」に戻ってまとめ</h2>
<p>「while (have_posts()) : the_post();」のwhile文には、「記事がある間は、記事の表示処理を続ける」と記述されていることがわかったでしょうか。</p>
<p>もう一度、WordPressテーマのwhile文と入門者向けのwhile文を示します。わからないときは比べてみましょう。</p>
<pre class="brush: php; title: ○WordPressテーマのwhile文; notranslate">
&lt;?php while (have_posts()) : the_post(); ?&gt;
…略…
&lt;?php endwhile; ?&gt;
</pre>
<pre class="brush: php; title: ○わかりやすく書き換えると; notranslate">
&lt;?php
while (記事がある間) {
1件の記事の処理
}
?&gt;
</pre>
<p>入門書の記述と違うためにわかりづらかった方は、この記事を参考にwhile文の仕組みを学習してみてください。</p>
<p>WordPressテンプレートのifとwhileについて、プログラミング未経験の方にもわかりやすくまとめました。ぜひご利用ください。</p>
<p><a href="http://amazon.co.jp/o/ASIN/B00E1HCERA/wpx-22" target="_blank">90分で読める！WordPressテンプレートのifとwhile</a></p>
<p>▼概要<br />
・ifの仕組み<br />
・テンプレート特有のifの省略記述<br />
・ifの究極の省略形<br />
・“絶対に満たされない条件”の活用<br />
・「コメントをどうぞ」リンクを消す条件<br />
・ifのパターンまとめ<br />
・ifの読み取り方のポイント<br />
・特定のページだけ広告を非表示に<br />
・特定カテゴリの投稿に広告を表示<br />
・投稿の有無で分岐するif<br />
・whileの仕組み<br />
・whileが自動終了するワケ<br />
・投稿一覧の途中で広告を差し込む<br />
・Twenty Twelveの主なifの意味 </p>
<h2>PHPの基礎を理解したい方におすすめの本</h2>
<div style="margin-top:3px;margin-bottom:50px;line-height:150%;">
<a href="http://amazon.co.jp/o/ASIN/4797369140/wpx-22" target="_blank"><img decoding="async" style="margin-right:20px;" src="http://ecx.images-amazon.com/images/I/51wyTaVlWrL._SL160_.jpg" border="0" align="left"></a></p>
<p style="margin-top:10px;margin-bottom:10px;">WordPressカスタマイズのため少しずつでもPHPをマスターしていこうという方にはこの本をおすすめします（私が書いた本ですが）。<br />
<a href="http://wordpress-kouza.com/" target="_blank">西沢直木のワードプレス講座</a>の個別サポートに持ち込んでいただければPHPの基礎から詳しく説明します。</p>
<p><a href="http://amazon.co.jp/o/ASIN/4797369140/wpx-22" target="_blank">「PHPプログラミングの教科書」について詳しくはこちら</a>
</p>
</div>
<div style="clear:both;"></div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PHPでカレンダーを作成しよう</title>
		<link>https://php1st.com/1001</link>
		
		<dc:creator><![CDATA[西沢直木]]></dc:creator>
		<pubDate>Mon, 22 Oct 2012 12:22:40 +0000</pubDate>
				<category><![CDATA[PHP独学のコツ]]></category>
		<category><![CDATA[人気記事]]></category>
		<guid isPermaLink="false">http://php1st.com/?p=1001</guid>

					<description><![CDATA[作成するカレンダーのイメージ ※以下の内容は[php1st]の「3-4 スケジュール帳（P.192～）」から、カレンダーの作成に関する内容を抜粋して再構成したものです。 カレンダーを作る目的が「最終的には予約システムを作 [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2>作成するカレンダーのイメージ</h2>
<p>※以下の内容は[php1st]の「3-4 スケジュール帳（P.192～）」から、カレンダーの作成に関する内容を抜粋して再構成したものです。</p>
<div class="pt">
カレンダーを作る目的が<strong>「最終的には予約システムを作りたい」</strong>という方は、WordPressの方が簡単に解決できます（基本機能はノンプログラミングで完成できます）。以下の記事にまとめましたので参考にしてください。</p>
<p><a href="http://www.nishi2002.com/3341.html">WordPressプラグイン「MTS Simple Booking C」による予約システムの作成</a>
</div>
<p>　これから、次のようなカレンダーを作成します。簡単すぎず難しすぎず、PHPの基礎が習得できたか力試しになり、スケジュール帳や予約への応用など、今後の学習の展望も見えてきます。ざっとPHPの基礎を習得した方は、ぜひ、チャレンジしてみてください。</p>
<div id="attachment_1021" style="width: 185px" class="wp-caption alignnone"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1021" src="http://php1st.com/wp-content/uploads/2012/10/211.png" alt="作成するカレンダー" title="作成するカレンダー" width="175" height="163" class="size-full wp-image-1021" /><p id="caption-attachment-1021" class="wp-caption-text">作成するカレンダー</p></div>
<p>　ポイントは2つあります。1つは<span id="more-1001"></span><strong>行列形式のレイアウト</strong>の作成方法、もう1つは、そのレイアウトに<strong>1から31までの日付を表示</strong>していく方法です。特に、新たな週を作るための<strong>改行</strong>が重要です。</p>
<h2>ステップ0：行列形式へのレイアウトにはtableタグを使う</h2>
<p>　PHPスクリプトを記述する前に、準備として行列形式のレイアウトを作成する<strong>HTMLのtableタグ</strong>を紹介しておきます。2行2列の簡単なテーブルを例に、その構造を見てみましょう。</p>
<pre class="brush: php; title: 2行2列のtableタグ; notranslate">
&lt;table border=&quot;1&quot;&gt;
  &lt;tr&gt;
    &lt;td&gt;1&lt;/td&gt;
    &lt;td&gt;2&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;3&lt;/td&gt;
    &lt;td&gt;4&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
</pre>
<div id="attachment_1008" style="width: 643px" class="wp-caption alignnone"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1008" src="http://php1st.com/wp-content/uploads/2012/10/502.png" alt="tableタグの構造" title="tableタグの構造" width="633" height="230" class="size-full wp-image-1008" srcset="https://php1st.com/wp-content/uploads/2012/10/502.png 633w, https://php1st.com/wp-content/uploads/2012/10/502-300x109.png 300w" sizes="auto, (max-width: 633px) 100vw, 633px" /><p id="caption-attachment-1008" class="wp-caption-text">tableタグの構造</p></div>
<p>　テーブル全体は&lt;table>～&lt;/table>の間に定義し、行を&lt;tr>～&lt;/tr>、列（セル）を&lt;td>～&lt;/td>の間に記述します。&lt;td>～&lt;/td>を1から7まで繰り返せば1日から7日まで表示でき、&lt;tr>～&lt;/tr>を5回繰り返せば、1週目から5週目までの行が作成できることはイメージできたでしょうか。早速、1日から31日までの日付を表示していきましょう。</p>
<h2>ステップ1：1日から月末日まで表示する（while文を使う）</h2>
<p>　1日から月末日までの日付を表示するには、while文が役立ちます。[php1st]（P.105）で作成したコードを利用して、好きな年月の日付を1日から月末日まで表示するコードを準備しましょう。次の例では、2012年2月の日付を表示しています。</p>
<pre class="brush: php; title: 1日から月末日まで表示する; notranslate">
&lt;?php
$y = 2012;
$m = 2;

$d = 1;
while (checkdate($m, $d, $y)) {
    echo $d;
    $d++;
}
?&gt;
</pre>
<p>○実行結果<br />
1234567891011121314151617181920212223242526272829</p>
<div class="pt">
　単純に横に表示しただけなので見づらいですが、これからレイアウトを直していくので気にする必要はありません。
</div>
<p>　checkdate関数の3つのパラメータ($m, $d, $y)はそれぞれ、月、日、年を示しています。while文によって$dが1、2、3…と変化するので、実行すると、上のように1から月末日までの数値（$d）が単純に1行で表示されます。</p>
<h2>ステップ2：日付を行列形式にレイアウトする（tableタグを使う）</h2>
<p>　ここから、カレンダーらしくするため、tableタグで作成するレイアウトの中に、$dを表示していきましょう。具体的には、tableタグの列（セル）を繰り返す「&lt;td>&lt;/td>」を「&lt;td>{$d}&lt;/td>」になるように変更します。</p>
<pre class="brush: php; highlight: [3]; title: tableタグの中に日付（$d）を表示するイメージ; notranslate">
&lt;table&gt;
&lt;tr&gt;
&lt;td&gt;ここに$dを埋め込む&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
</pre>
<pre class="brush: php; highlight: [1,2,9,13,14]; title: テーブルの中に日付を表示するスクリプト; notranslate">
&lt;table border=&quot;1&quot;&gt;
&lt;tr&gt;
&lt;?php
$y = 2012;
$m = 2;

$d = 1;
while (checkdate($m, $d, $y)) {
    echo &quot;&lt;td&gt;$d&lt;/td&gt;&quot;;
    $d++;
}
?&gt;
&lt;/tr&gt;
&lt;/table&gt;
</pre>
<div id="attachment_1012" style="width: 593px" class="wp-caption alignnone"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1012" src="http://php1st.com/wp-content/uploads/2012/10/085.png" alt="tableタグの中に日付を表示する" title="tableタグの中に日付を表示する" width="583" height="49" class="size-full wp-image-1012" srcset="https://php1st.com/wp-content/uploads/2012/10/085.png 583w, https://php1st.com/wp-content/uploads/2012/10/085-300x25.png 300w" sizes="auto, (max-width: 583px) 100vw, 583px" /><p id="caption-attachment-1012" class="wp-caption-text">○実行結果（tableタグの中に日付を表示する）</p></div>
<div class="pt">
　tableタグにある「border=&#8221;1&#8243;」は、テーブルの枠線の幅を指定するborder属性です。ここでは、最も細い枠線（1）を指定しています。
</div>
<h2>ステップ3：土曜日で改行する（if文を使う・&lt;/tr>を出力する）</h2>
<p>　カレンダーらしくするため、土曜日で改行しましょう。ここで言う改行とは、「&lt;/tr>」を出力してテーブルの行を終了するということです。さらに、次の週があるなら、「&lt;tr>」を出力して新たな行を準備する必要があります。そのイメージは次のようになります。</p>
<div id="attachment_1016" style="width: 531px" class="wp-caption alignnone"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1016" src="http://php1st.com/wp-content/uploads/2012/10/503.png" alt="土曜日で改行するイメージ" title="土曜日で改行するイメージ" width="521" height="235" class="size-full wp-image-1016" srcset="https://php1st.com/wp-content/uploads/2012/10/503.png 521w, https://php1st.com/wp-content/uploads/2012/10/503-300x135.png 300w" sizes="auto, (max-width: 521px) 100vw, 521px" /><p id="caption-attachment-1016" class="wp-caption-text">土曜日で改行するイメージ</p></div>
<p>　日付を表示するwhile文の中に、行（週）を終了して新たな週を開始するコードを記述しましょう。まず、土曜日で週を終了するには次のコードを記述します。</p>
<pre class="brush: php; title: 土曜日で改行する; notranslate">
// 今日が土曜日の場合は…
if (date(&quot;w&quot;, mktime(0, 0, 0, $m, $d, $y)) == 6) {
    // 週を終了
    echo &quot;&lt;/tr&gt;&quot;;
}
</pre>
<p>※まだ続きがあるので、このコードは入力する必要はありません。</p>
<p>　今日の曜日番号が6の場合は「&lt;/tr>」を出力しています。「date(&#8220;w&#8221;)」によって、0（日曜日）から始まる曜日番号を取得できます。その番号が6、つまり、土曜日の場合は「&lt;/tr>」と出力して行を終了するということです。</p>
<div class="pt">
　mktime関数は、現在の日付を示すタイムスタンプを取得しています。その意義がわからない場合は、[php1st]の「日付関数（P.67）」も参考にしてください。
</div>
<h2>ステップ4：新たな週を準備する（&lt;tr>を出力する）</h2>
<p>　続いて、新たな週を準備します。その条件は「次の日が存在する場合は」です。日付が妥当か調べるcheckdate関数を使っています。改行した土曜日の次の日が有効な日付であれば、次の週が存在するということです。</p>
<pre class="brush: php; title: 次の週がある場合は新たな行を準備する; notranslate">
// 今日が土曜日の場合は…
if (date(&quot;w&quot;, mktime(0, 0, 0, $m, $d, $y)) == 6) {
    // 週を終了
    echo &quot;&lt;/tr&gt;&quot;;

    // 次の週がある場合は新たな行を準備
    if (checkdate($m, $d + 1, $y)) {
        echo &quot;&lt;tr&gt;&quot;;
    }
}
</pre>
<p>　このコードを、while文で日付を表示した直後に記述します（$d++の前）。</p>
<div id="attachment_1017" style="width: 183px" class="wp-caption alignnone"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1017" src="http://php1st.com/wp-content/uploads/2012/10/086.png" alt="土曜日で改行したカレンダー" title="土曜日で改行したカレンダー" width="173" height="144" class="size-full wp-image-1017" /><p id="caption-attachment-1017" class="wp-caption-text">○実行結果<br />（土曜日で改行<br />
＋次の週の準備）</p></div>
<h2>ステップ5：1日の曜日まで空白を出力する（for文を使う）</h2>
<p>　なんとなくカレンダーらしくなってきましたが、最初の週に違和感があります。毎月1日は必ずしも左端（日曜日）とは限らないので、1日の該当する曜日まで空白を出力して移動する必要があります。それには、毎月1日の曜日番号を調べて、その位置まで空白を出力していきます。そのイメージは次のようになります。</p>
<div id="attachment_1018" style="width: 593px" class="wp-caption alignnone"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1018" src="http://php1st.com/wp-content/uploads/2012/10/504.png" alt="最初の週の曜日を調整" title="最初の週の曜日を調整" width="583" height="329" class="size-full wp-image-1018" srcset="https://php1st.com/wp-content/uploads/2012/10/504.png 583w, https://php1st.com/wp-content/uploads/2012/10/504-300x169.png 300w" sizes="auto, (max-width: 583px) 100vw, 583px" /><p id="caption-attachment-1018" class="wp-caption-text">最初の週の曜日を調整するイメージ</p></div>
<p>　空白を出力するというのは、「&lt;td>　&lt;/td>」のように何も表示しない列を出力するということです（レイアウトの都合で全角スペースを出力しています）。これを曜日番号の数だけ繰り返すことで、1日の日付を妥当な曜日まで“移動”することができます。この処理をコードにまとめると次のようになります。while文で1日から月末日までの表示を始める直前に記述します。</p>
<pre class="brush: php; highlight: [2,5,6,7]; title: 最初の週を調整する（1日の曜日まで移動する）; notranslate">
// 1日の曜日を取得
$wd1 = date(&quot;w&quot;, mktime(0, 0, 0, $m, 1, $y));

// その数だけ空白を表示
for ($i = 1; $i &lt;= $wd1; $i++) {
    echo &quot;&lt;td&gt;　&lt;/td&gt;&quot;;
}

// 1日から月末日までの表示
$d = 1;
while (checkdate($m, $d, $y)) {
…略…
}
</pre>
<div id="attachment_1019" style="width: 175px" class="wp-caption alignnone"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1019" src="http://php1st.com/wp-content/uploads/2012/10/087.png" alt="最初の週の曜日を調整" title="最初の週の曜日を調整" width="165" height="138" class="size-full wp-image-1019" /><p id="caption-attachment-1019" class="wp-caption-text">○実行結果（最初の週の曜日を調整）</p></div>
<h2>ステップ6：月末日から土曜日まで空白を出力する（for文を使う）</h2>
<p>　かなりカレンダーらしくなりましたが、月末日の曜日は必ずしも土曜日ではないことに注意が必要です。上の調整と同じように、最後の週に表示される月末日が土曜日以外の場合は土曜日まで空白を出力していく必要があります。そのコードをまとめます。これは、1日から月末日までの表示が終わった直後に記述します。</p>
<pre class="brush: php; highlight: [8,9,10,11]; title: 最後の週を調整する（土曜日まで移動する）; notranslate">
// 1日から月末日までの表示
$d = 1;
while (checkdate($m, $d, $y)) {
…略…
}

// 最後の週の土曜日まで移動
$wdx = date(&quot;w&quot;, mktime(0, 0, 0, $m + 1, 0, $y));
for ($i = 1; $i &lt; 7 - $wdx; $i++) {
    echo &quot;&lt;td&gt;　&lt;/td&gt;&quot;;
}
</pre>
<div id="attachment_1020" style="width: 174px" class="wp-caption alignnone"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1020" src="http://php1st.com/wp-content/uploads/2012/10/088.png" alt="最後の週を調整" title="最後の週を調整" width="164" height="138" class="size-full wp-image-1020" /><p id="caption-attachment-1020" class="wp-caption-text">○実行結果<br />
（最後の週を調整）</p></div>
<h2>ステップ7：カレンダーの年月を現在の年月にする（date関数・substr関数を使う）</h2>
<p>　これで、指定した年月のカレンダーを表示できるようになりました。ただし、年月を示す$y、$mには固定値が入っています。ここから先の作業で、選択メニューで選んだ年月を表示するカレンダーにカスタマイズしやすいように、現在の年月を表示するように変更しておきましょう。</p>
<p>　それには、スクリプトの先頭で現在の年月を6桁で取得して、4桁の年（$y）と2桁の月（$m）に分解します。substr関数がピンとこないときは、[php1st]の文字列関数のページ（P.61）も参考にしてください。</p>
<pre class="brush: php; highlight: [1,2,3,4,5,6]; title: 現在の年月を取得する（PHPスクリプトの先頭で）; notranslate">
&lt;?php
// 年月を取得する
$ym_now = date(&quot;Ym&quot;);
$y = substr($ym_now, 0, 4);
$m = substr($ym_now, 4, 2);
?&gt;
&lt;table border=&quot;1&quot;&gt;
…tableタグ以下省略…
</pre>
<h2>ステップ8：曜日ラベルを表示する（thタグを使う）【完成】</h2>
<p>　最後に、曜日ラベルを追加しておきましょう。それには、thタグを使います。tableタグの直後に記述します。以下に示す実際の記述を見れば、使い方はなんとなくわかるのではないでしょうか。</p>
<pre class="brush: php; highlight: [3,4,5,6,7,8,9]; title: 曜日ラベルを追加する; notranslate">
&lt;table border=&quot;1&quot;&gt;
&lt;tr&gt;
&lt;th&gt;日&lt;/th&gt;
&lt;th&gt;月&lt;/th&gt;
&lt;th&gt;火&lt;/th&gt;
&lt;th&gt;水&lt;/th&gt;
&lt;th&gt;木&lt;/th&gt;
&lt;th&gt;金&lt;/th&gt;
&lt;th&gt;土&lt;/th&gt;
&lt;/tr&gt;
…略…
</pre>
<div class="pt">
　わかりやすいように&lt;/th>で改行していますが、改行しなくても曜日ラベルは表示されます。
</div>
<p>　このように、&lt;tr>～&lt;/tr>の中に曜日ラベルを追加すると、現在の年月のカレンダーが完成です。実行結果は2012年5月の例です。</p>
<div id="attachment_1021" style="width: 185px" class="wp-caption alignnone"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1021" src="http://php1st.com/wp-content/uploads/2012/10/211.png" alt="完成したカレンダー" title="完成したカレンダー" width="175" height="163" class="size-full wp-image-1021" /><p id="caption-attachment-1021" class="wp-caption-text">○実行結果<br />
（完成した<br />
カレンダー）</p></div>
<h2>カレンダーのテンプレート</h2>
<p>　カレンダーからPHPスクリプトを取り除いたテンプレートを用意しました。それぞれのステップについて、理解できたか確認しながらPHPスクリプトを記述してみましょう。できるだけコピーペーストせずに、実際に入力してみることが重要です。</p>
<pre class="brush: php; title: 作成するカレンダーのテンプレート; notranslate">
&lt;?php
// ステップ7：現在の年月を取得する（date関数・substr関数）

?&gt;
&lt;table border=&quot;1&quot;&gt;
&lt;tr&gt;
&lt;th&gt;日&lt;/th&gt;
&lt;th&gt;月&lt;/th&gt;
&lt;th&gt;火&lt;/th&gt;
&lt;th&gt;水&lt;/th&gt;
&lt;th&gt;木&lt;/th&gt;
&lt;th&gt;金&lt;/th&gt;
&lt;th&gt;土&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;?php
// ステップ5：1日の曜日まで空白を表示（for文）

// ステップ1：1日から月末日までを表示（while文）

    // ステップ2：今日の日付を表示（&lt;td&gt;～&lt;/td&gt;）

// ステップ3：今日が土曜日の場合は…（if文）
    // ステップ3：週を終了（&lt;/tr&gt;）

    // ステップ4：次の週がある場合は新たな行を準備（if文・&lt;tr&gt;）

// ステップ6：最後の週の土曜日まで移動（for文）
?&gt;
&lt;/tr&gt;
&lt;/table&gt;

</pre>
<h2>カレンダーのカスタマイズと応用</h2>
<p>　シンプルなカレンダーは完成です。ここからは、必要に応じてフォームの知識を付けて、どんどんカスタマイズしていきましょう。[php1st]では、最終的にスケジュール帳へと加工していきます。1行ずつ入力していくわけではないので、要点をしっかり習得しましょう。<br />
　ポイントは、カレンダーでクリックしてスケジュール登録画面に移動する方法です。<strong>メールフォームのように「送信」ボタンをクリックして画面を切り替えるPHPスクリプトとは異なる考え方</strong>が必要です。</p>
<div id="attachment_1027" style="width: 538px" class="wp-caption alignnone"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1027" src="http://php1st.com/wp-content/uploads/2012/10/505.png" alt="スケジュール帳" title="スケジュール帳" width="528" height="250" class="size-full wp-image-1027" srcset="https://php1st.com/wp-content/uploads/2012/10/505.png 528w, https://php1st.com/wp-content/uploads/2012/10/505-300x142.png 300w" sizes="auto, (max-width: 528px) 100vw, 528px" /><p id="caption-attachment-1027" class="wp-caption-text">スケジュール帳（カレンダー＋スケジュール登録画面）</p></div>
<p>　スケジュール帳のサンプルPHPスクリプト自体は、当Webサイトのトップページからダウンロードすることができますが、PHP入門にチャレンジしたばかりの方は、[php1st]の本文で学習していただくことをおすすめします。</p>
<div style="margin-left:200px;margin-top:2px;margin-bottom:10px;">
<a href="http://amazon.co.jp/o/ASIN/4797369140/wpx-22" target="_blank"><br />
<img loading="lazy" decoding="async" width="240" height="88" src="http://php1st.com/wp-content/uploads/2012/08/php1st3.png" alt="PHPでカレンダーやスケジュール帳を作成できます" title="PHPでカレンダーやスケジュール帳を作成できます" class="alignnone size-full wp-image-989" /><br />
</a>
</div>
<div style="margin-top:30px;margin-bottom:30px;">
▼if・whileの仕組みを短時間でつかみたい方におすすめ！<br />
<a href="http://amazon.co.jp/o/ASIN/B00E1HCERA/wpx-22" target="_blank"><img decoding="async" src="http://ecx.images-amazon.com/images/I/41o4jrwiZgL._SL160_.jpg" border="0"></a><br />
<a href="http://amazon.co.jp/o/ASIN/B00E1HCERA/wpx-22" target="_blank">90分で読める！WordPressテンプレートのifとwhile</a>
</div>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
