<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:blogChannel="http://backend.userland.com/blogChannelModule" >
  <channel>
  <title>バナヤンの忍者風呂</title>
  <link>https://banayan.blog.shinobi.jp/</link>
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="https://banayan.blog.shinobi.jp/RSS/" />
  <description>忍者ブログのカスタマイズ、各種ＷＥＢツールのテストなど試行錯誤の日々。
VMLによる地図の作成を研究していましたが、一時中断して、今はPHPを勉強しているところです。</description>
  <lastBuildDate>Thu, 28 Jun 2007 15:43:03 GMT</lastBuildDate>
  <language>ja</language>
  <copyright>© Ninja Tools Inc.</copyright>
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" />

    <item>
    <title>おひさしぶりです。</title>
    <description>
    <![CDATA[やっと仕事に余裕ができました。<br />
気がつくと、１年以上放置していたではありませんか。<br />
もはや、なくなっているのではないかと頭をよぎりましたが、ちゃんとありました！「バナヤンの忍者風呂」。<br />
<br />
外国からのスパムコメントがカビのようにこびりついていましたが、カビキラーで落として、もとの状態に。<br />
<br />
そうか！１年前は、GISに興味を持って、それからPHPとSQLiteにそれていったのだっけ。けっこう嵌っていたのだなぁ。しっかし、１年も経つとまるっきり忘れている・・・。<br />
もう一度、勉強し直しだ。<br />
<br />
というわけで、もう一度しきり直し。]]>
    </description>
    <category>etc.,</category>
    <link>https://banayan.blog.shinobi.jp/etc.-/%E3%81%8A%E3%81%B2%E3%81%95%E3%81%97%E3%81%B6%E3%82%8A%E3%81%A7%E3%81%99%E3%80%82</link>
    <pubDate>Thu, 28 Jun 2007 15:43:03 GMT</pubDate>
    <guid isPermaLink="false">banayan.blog.shinobi.jp://entry/78</guid>
  </item>
    <item>
    <title>PHP + SQLite データベース選択ページ</title>
    <description>
    <![CDATA[PHPとSQLiteを勉強中です。<br />
<br />
前回の「<a href="http://banayan.blog.shinobi.jp/Entry/76/" target="_blank">PHP ディレクトリ内のファイルリスト（scandir）</a> 」では、特定のディレクトリ内にあるファイルの一覧を取得してみました。そのサンプルとしてSQLiteデータベースの選択ページをお見せしました。<br />
<br />
投稿後、見直す点が多々あることに気づきましたので、今回は修正したものを示すことにしました。<br />
<br />
まず第１点目は、ページ構成の流れの部分です。前回の時点では、この部分については、あまり考慮しないで作成していました。サイトのページ構成は、トップページから目的のページまで、読者にわかりやすいようにしたいものです。理想は一発で目的のページが出るのが理想ですが、すべてを1つのページにまとめるのは困難ですから、ワン・ツー・スリーと３段階ぐらいまでが許容限度かと思います。３段階のページ移動を考えると、サイトトップ→カテゴリトップ→個別ページと移動する流れを考えることになります。<br />
<br />
第２点目は、画面レイアウト上、第１点目をどのように実現するかということです。具体的には、ページ誘導のナビゲーションの部分です。ナビゲーションは、すべてのページが統一されていないとわかりずらくなってしまいます。したがって、ナビゲーションの位置が固定されて表示されることが望まれます。<br />
<br />
そこで、今回はナビゲーションを上方のバーに置くこととし、バーの上側でカテゴリ、バーの下側で個別ページの選択をできるようにしました。もちろん、サイドバーを用いるレイアウトもあります。サイドバーを使用するレイアウトでは、レイアウトの整形のためTABLE要素を使用したり、スタイルシートでブロック要素をfloatにしたりと、ちょっとしたテクニックが必要になります。その点、上方のバーの上下でナビゲーションをする方法は、もっと簡便です。若干スタイルシートの工夫をしますが、floatを使用する場合よりも画面が崩れるようなことは少ないと思います。<br />
<br />
第３点目は、前回の記述の中には、不要な記述がありました。この点は手直ししました。<br />
<br />
それでは、まず画面イメージです。<br />
［画面イメージ］TOPページ-データベース選択画面<br />
<img src="//banayan.blog.shinobi.jp/File/sqlite_utility2.jpg" border="1" alt="SQLiteデータベース選択ページ・イメージ"><br />
<br />
上の画面でデータベースを選択した後、「TABLE」のカテゴリをクリックすると、下のようなカテゴリのトップページに移ります。<br />
<br />
［画面イメージ］カテゴリ・TABLE選択画面<br />
<img src="//banayan.blog.shinobi.jp/File/sqlite_utility_table.jpg" border="1" alt="SQLiteデータベーステーブル選択ページ・イメージ"><br />
<br />
前のトップページで選択したデータベースは、セッションで保持され、このページで参照できるようになっています。ナビゲーションバーの下側のタブをクリックすると個別ページに移れます。<br />
<br />
スクリプトも変更しているので示しておきます。<br />
<br />
［ソース］TOPページ-データベース選択画面---sqlite_utility.php<br />
<blockquote><br />
&lt;?php<br />
####################&nbsp;HTTPヘッダ&nbsp;####################<br />
// HTTP/1.1<br />
header(&quot;Cache-Control: no-store, no-cache, must-revalidate&quot;);<br />
header(&quot;Cache-Control: post-check=0, pre-check=0&quot;, false);<br />
// HTTP/1.0<br />
header(&quot;Pragma: no-cache&quot;);<br />
####################&nbsp;セッション&nbsp;#####################<br />
session_start();<br />
?&gt;<br />
<br />
&lt;?php<br />
#############&nbsp;定義関数のインクルード#################<br />
include_once('sqlite_utility.inc.php');<br />
?&gt;<br />
<br />
&lt;?php<br />
####################&nbsp;&nbsp;設定&nbsp;&nbsp;####################<br />
////&nbsp;データベース・ディレクトリ<br />
$dirname='../db';<br />
$files=scandir($dirname);<br />
////&nbsp;データベース<br />
if($_SESSION['db']){<br />
	$dbname=$_SESSION['db'];<br />
	}<br />
if($_POST['item']){<br />
	$dbname=$files[$_POST['item']];<br />
	$_SESSION['db']=$files[$_POST['item']];<br />
	}<br />
?&gt;<br />
<br />
<br />
&lt;!-------------------- HTML --------------------&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;sqlite_utility_style.css&quot;&gt;<br />
&lt;style type=&quot;text/css&quot;&gt;<br />
&lt;!--<br />
--&gt;<br />
&lt;/style&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;h1&gt;SQLite Utility&lt;/h1&gt;<br />
&lt;div class='note_right'&gt;<br />
Current Directory : &lt;?= dirname($_SERVER[PHP_SELF]) ?&gt;<br />
&nbsp;｜&nbsp;Database Directory : &lt;?= $dirname ?&gt;<br />
&lt;/div&gt;<br />
&lt;!-- Category navi --&gt;<br />
&lt;div class='category'&gt;<br />
&lt;div class='current_ctg'&gt;&lt;a href='sqlite_utility.php'&gt;Database&lt;/a&gt;&lt;/div&gt;<br />
&lt;div class='ctg'&gt;&lt;a href='sqlite_utility_table.php'&gt;TABLE&lt;/a&gt;&lt;/div&gt;<br />
&lt;div class='ctg'&gt;&lt;a href='sqlite_utility_table.php'&gt;VIEW&lt;/a&gt;&lt;/div&gt;<br />
&lt;/div&gt;<br />
&lt;h2&gt;<br />
Database : &lt;?= $dbname ?&gt;<br />
&lt;/h2&gt;<br />
&lt;div class='navi'&gt;<br />
&lt;div class='current_tab'&gt;Choose&lt;/div&gt;<br />
&lt;/div&gt;<br />
<br />
&lt;?php<br />
$count=radio_files($files);<br />
?&gt;<br />
<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
</blockquote><br />
<br />
［ソース］インクルードファイルの一部---sqlite_utility.inc.php<br />
<blockquote><br />
###&nbsp;配列をラジオボタン付フォームで表示<br />
###（ディレクトリ内のファイルの配列用）<br />
###&nbsp;総行数を返す<br />
function radio_files($files){<br />
	$count=count($files);<br />
	echo &quot;&lt;form class='choice' method='post' action='$_SERVER[PHP_SELF]'&gt;\r\n&quot;;<br />
	for($i=2;$i&lt;$count;$i++){<br />
		echo &quot;&lt;input type='radio' name='item' value='$i'&gt;&quot;.$files[$i].&quot;\r\n&quot;;<br />
		}<br />
	echo &quot;&lt;input type='submit' name='choice' value='Go'&gt;\r\n&quot;;<br />
	echo &quot;&lt;/form&gt;\r\n&quot;;<br />
	return $count;<br />
	}<br />
</blockquote><br />
<br />
［ソース］カテゴリトップ---sqlite_utility_table.php<br />
<blockquote><br />
&lt;?php<br />
####################&nbsp;セッション&nbsp;#####################<br />
session_start();<br />
// データベース未設定の場合<br />
if(!$_SESSION['db']){<br />
	header(&quot;Location:sqlite_utility.php&quot;);<br />
	}<br />
####################&nbsp;HTTPヘッダ&nbsp;####################<br />
// HTTP/1.1<br />
header(&quot;Cache-Control: no-store, no-cache, must-revalidate&quot;);<br />
header(&quot;Cache-Control: post-check=0, pre-check=0&quot;, false);<br />
// HTTP/1.0<br />
header(&quot;Pragma: no-cache&quot;);<br />
<br />
?&gt;<br />
<br />
&lt;?php<br />
####################&nbsp;定義関数のインクルード&nbsp;####################<br />
include_once('sqlite_utility.inc.php');<br />
######################################################<br />
?&gt;<br />
&lt;?php<br />
####################&nbsp;&nbsp;設定&nbsp;&nbsp;####################<br />
////&nbsp;データベース<br />
$dbname=$_SESSION['db'];<br />
////&nbsp;データベース接続<br />
if(!$dbh){<br />
	$dbh = sqlite_open($dbname);<br />
	}<br />
////&nbsp;テーブル<br />
$array = sqlite_tablename($dbh);<br />
$table = $array[$_POST['item']];<br />
<br />
<br />
##########################################################<br />
?&gt;<br />
<br />
<br />
&lt;!-------------------- HTML --------------------&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;sqlite_utility_style.css&quot;&gt;<br />
&lt;style type=&quot;text/css&quot;&gt;<br />
&lt;!--<br />
--&gt;<br />
&lt;/style&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;h1&gt;SQLite Utility&lt;/h1&gt;<br />
&lt;div class='note_right'&gt;<br />
Current Path : &lt;?= $_SERVER[PHP_SELF] ?&gt;<br />
&lt;/div&gt;<br />
&lt;!-- Category navi --&gt;<br />
&lt;div class='category'&gt;<br />
&lt;div class='ctg'&gt;&lt;a href='sqlite_utility.php'&gt;Database&lt;/a&gt;&lt;/div&gt;<br />
&lt;div class='current_ctg'&gt;&lt;a href='sqlite_utility_table.php'&gt;TABLE&lt;/a&gt;&lt;/div&gt;<br />
&lt;div class='ctg'&gt;&lt;a href='sqlite_utility_table.php'&gt;VIEW&lt;/a&gt;&lt;/div&gt;<br />
&lt;/div&gt;<br />
&lt;h2&gt;<br />
Database : &lt;?= $dbname ?&gt;&nbsp;TABLE： &lt;?= $table ?&gt;<br />
&lt;/h2&gt;<br />
&lt;div class='navi'&gt;<br />
&lt;div class='current_tab'&gt;SELECT * FROM&lt;/a&gt;&lt;/div&gt;<br />
&lt;div class='tab'&gt;INSERT INTO&lt;/a&gt;&lt;/div&gt;<br />
&lt;/div&gt;<br />
<br />
&lt;?php<br />
$count = radio_array($array);<br />
?&gt;<br />
&lt;h4&gt;&lt;?= $table ?&gt;&lt;/h4&gt;<br />
&lt;table&gt;<br />
&lt;?php<br />
if($table){<br />
	sqlite_field_names($dbh,$table);<br />
	sqlite_select($dbh,$table);<br />
	}<br />
?&gt;<br />
&lt;/table&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
</blockquote><br />
<br />
［ソース］インクルードファイルの一部---sqlite_utility.inc.php<br />
<blockquote><br />
###&nbsp;テーブル名の配列を返す<br />
function sqlite_tablename($dbh){<br />
	$query = &quot;SELECT name FROM sqlite_master WHERE type='table'&quot;;<br />
	$result = sqlite_array_query($dbh,$query);<br />
	foreach($result as $row){<br />
		$array[] = $row[name];<br />
		}<br />
	return $array;<br />
}<br />
<br />
###&nbsp;配列をラジオボタン付フォームで表示<br />
###&nbsp;選択したアイテム番号を返す<br />
function radio_array($array){<br />
	$count=count($array);<br />
	echo &quot;&lt;form class='choice' method='post' action='$_SERVER[PHP_SELF]'&gt;\r\n&quot;;<br />
	for($i=0;$i&lt;$count;$i++){<br />
		echo &quot;&lt;input type='radio' name='item' value='$i'&gt;&quot;.$array[$i].&quot;\r\n&quot;;<br />
		}<br />
	echo &quot;&lt;input type='submit' value='Go'&gt;&lt;/form&gt;&quot;;<br />
	return $count;<br />
	}<br />
###&nbsp;テーブルのフィールド数を返す<br />
function sqlite_fields($dbh,$table){<br />
	$query = &quot;SELECT * FROM $table&quot;;<br />
	$result =sqlite_query($dbh,$query);<br />
	$fields = sqlite_num_fields($result);<br />
	return $fields;<br />
	}<br />
<br />
///&nbsp;指定したテーブルのフィールドネーム<br />
###&nbsp;&lt;tr&gt;&lt;th&gt;フィールドネーム&lt;/th&gt;・・・&lt;/tr&gt;<br />
function sqlite_field_names($dbh,$table){<br />
	$query = &quot;SELECT * FROM $table&quot;;<br />
	$result =sqlite_query($dbh,$query);<br />
	$fields = sqlite_num_fields($result);<br />
	echo &quot;&lt;tr class='field_name'&gt;&quot;;<br />
	for($i=0;$i&lt;$fields;$i++){<br />
		$field_name=sqlite_field_name($result,$i);<br />
		echo &quot;&lt;th&gt;&quot;.$field_name.&quot;&lt;/th&gt;&quot;;<br />
		}<br />
	echo &quot;&lt;/tr&gt;&quot;;<br />
	return $field_name;<br />
	}<br />
<br />
///&nbsp;指定したテーブルの結果セット<br />
###&nbsp;&lt;tr&gt;&lt;th&gt;フィールドネーム&lt;/th&gt;・・・&lt;/tr&gt;<br />
function sqlite_select($dbh,$table){<br />
	$query = &quot;SELECT * FROM $table&quot;;<br />
	$result =sqlite_query($dbh,$query);<br />
	$rows = sqlite_num_rows($result);<br />
	$fields = sqlite_num_fields($result);<br />
	for($j=0;$j&lt;$rows;$j++){<br />
		$row=sqlite_fetch_array($result);<br />
		echo &quot;&lt;tr&gt;&quot;;<br />
		for($i=0;$i&lt;$fields;$i++){<br />
			echo &quot;&lt;td&gt;&quot;.$row[$i].&quot;&lt;/td&gt;&quot;;<br />
			}<br />
		echo &quot;&lt;/tr&gt;&quot;;<br />
		}<br />
	return $field_name;<br />
	}<br />
</blockquote><br />
<br />
［スタイルシート］<br />
<blockquote><br />
h1 {<br />
	margin:0;<br />
	padding:2px;<br />
	border-bottom:#363 solid 2px;<br />
	background-color:#fff;<br />
	font-size:12px;<br />
	color:#363;<br />
	}<br />
h2 {<br />
	margin:0;<br />
	height:24px;<br />
	padding:4px;<br />
	border-top:#030 solid 1px;<br />
	background-color:#363;<br />
	font-size:12px;<br />
	color:#fff;<br />
	}<br />
h3 {<br />
	margin:4px;<br />
	font-size:12px;<br />
	}<br />
h4 {<br />
	margin:0;<br />
	padding:4px;<br />
	border-top:#363 solid 1px;<br />
	background-color:#696;<br />
	font-size:12px;<br />
	color:#fff;<br />
	}<br />
.category{<br />
	margin:0;<br />
	padding:0px;<br />
	background-color:#fff;<br />
	font-size:12px;<br />
	color:#363;<br />
	}<br />
.ctg{<br />
	display:inline;<br />
	border-top:#363 solid 1px;<br />
	border-right:#363 solid 1px;<br />
	background-color:#cfc;<br />
	padding:4px;<br />
	}<br />
.ctg a {<br />
	color:#363;<br />
	}<br />
.current_ctg{<br />
	display:inline;<br />
	border-right:#363 solid 1px;<br />
	background-color:#363;<br />
	padding:5px;<br />
	color:#fff;<br />
	}<br />
.current_ctg a {<br />
	color:#fff;<br />
	}<br />
.navi{<br />
	margin:0;<br />
	background-color:#fff;<br />
	font-size:12px;<br />
	color:#363;<br />
	}<br />
.tab{<br />
	display:inline;<br />
	border-bottom:#363 solid 1px;<br />
	border-right:#363 solid 1px;<br />
	background-color:#cfc;<br />
	padding:4px;<br />
	}<br />
.tab a {<br />
	color:#363;<br />
	}<br />
.current_tab{<br />
	display:inline;<br />
	border-right:#363 solid 1px;<br />
	background-color:#363;<br />
	padding:5px;<br />
	color:#fff;<br />
	}<br />
.current_tab a {<br />
	color:#fff;<br />
	}<br />
.note_right {<br />
	margin:0px 4px;<br />
	font-size:11px;<br />
	text-align:right;<br />
	}<br />
table ,th ,td {<br />
	border-collapse:collapse;<br />
	border:#030 solid 1px;<br />
	}<br />
.field_name {<br />
	background-color:#9c9;<br />
	}<br />
.choice {<br />
	margin:6px;<br />
	}<br />
</blockquote><br />
<br />
<br />
]]>
    </description>
    <category>PHP + SQLite</category>
    <link>https://banayan.blog.shinobi.jp/php%20-%20sqlite/php%20-%20sqlite%20%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E9%81%B8%E6%8A%9E%E3%83%9A%E3%83%BC%E3%82%B8</link>
    <pubDate>Sun, 04 Jun 2006 07:25:11 GMT</pubDate>
    <guid isPermaLink="false">banayan.blog.shinobi.jp://entry/77</guid>
  </item>
    <item>
    <title>PHP ディレクトリ内のファイルリスト（scandir）</title>
    <description>
    <![CDATA[XAMPPでPHPの勉強中です。<br />
<br />
今回のテーマは「ディレクトリ内のファイルリスト」です。<br />
<br />
ファイルについて何らかの処理をしたいとき、いちいちファイル名を入力するのが面倒なので、HTMLフォームのラジオボタンで選択したいと思います。その処理をするファイル類が同一のディレクトリ内にあれば、ディレクトリ内のファイル一覧が取得できれば、問題は解決します。<br />
<br />
ディレクトリ内のファイルリストが取得できるPHPの関数はあるのでしょうか。PHPの関数リファレンスを探すと、「ディレクトリ関数」というところに「scandir --  指定されたパスのファイルとディレクトリのリストを取得する」というのがありました。これだ、これ。<br />
<br />
ということで、実験してみました。<br />
<br />
サンプルとして作成したのは、SQLiteのデータベースを選択してオープンするというものです。SQLiteは、データベースごとに1つのファイルが対応します。SQLiteのデータベースに接続するということは、SQLite用のファイルをオープンするということです。SQLiteのデータベースファイルを、1つのディレクトリにまとめておくことで、いろいろ処理がしやすくなります。<br />
<br />
まずは、表示画面を紹介しましょう。<br />
<br />
［サンプル画面］<br />
<br />
<img src="//banayan.blog.shinobi.jp/File/sqlite_utility.jpg" border="1" alt="SQLiteデータベース選択画面"><br />
<br />
ファイルの配置図は次のとおりです。<br />
<br />
htdocs　──sqlite<br />
　　　　　　　　├─ db -------accounts member memberdb<br />
　　　　　　　　└─ utility---sqlite_utility.php<br />
<br />
「sqlite_utility.php」上で「scandir('../db')」と使用すると「db」ディレクトリ上のファイル名等が、配列に格納されます。ただし、「.」と「..」も配列[0]と配列[1]にそれぞれ格納されてしまいます。そこで、配列[2]以降のみ表示することにしました。<br />
<br />
<blockquote><br />
&lt;?php<br />
####################&nbsp;&nbsp;設定&nbsp;&nbsp;####################<br />
////&nbsp;データベース・ディレクトリ<br />
$dirname='../db';<br />
$files=scandir($dirname);<br />
}<br />
?&gt;<br />
</blockquote><br />
<br />
ファイル名リストが配列$filesに格納されました。<br />
これを受けて、次の関数でラジオボタンフォームに展開します。<br />
<br />
<blockquote><br />
###&nbsp;総行数を返す<br />
function radio_files($files){<br />
	$count=count($files);<br />
	echo &quot;&lt;form method='post' action='$_SERVER[PHP_SELF]'&gt;&quot;;<br />
	for($i=2;$i&lt;$count;$i++){<br />
		echo &quot;&lt;input type=radio name='item' value=$i&gt;&quot;.$files[$i].&quot;  &quot;;<br />
		}<br />
	echo &quot;&lt;input type='submit' value='選択'&gt;&lt;/form&gt;&quot;;<br />
	return $count;<br />
	}<br />
</blockquote><br />
<br />
これをHTMLに展開したフォームで「選択ボタン」を押すと、配列$filesの何番目かというデータがPOSTされます。<br />
<br />
それでは、それから下ののソースを表示しましょう。<br />
POSTによって、送信した情報をもとセッション変数に選択したデータベース名入れています。<br />
<br />
<blockquote><br />
<br />
&lt;?php<br />
####################&nbsp;&nbsp;設定&nbsp;&nbsp;####################<br />
session_start();<br />
////&nbsp;データベース<br />
<br />
if($_SESSION['db']){<br />
	$dbname=$_SESSION['db'];<br />
	}<br />
if($_POST['item']){<br />
	$dbname=$files[$_POST['item']];<br />
	}<br />
?&gt;<br />
<br />
<br />
&lt;!-------------------- HTML --------------------&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;sqlite_utility_style.css&quot;&gt;<br />
&lt;style type=&quot;text/css&quot;&gt;<br />
&lt;!--<br />
--&gt;<br />
&lt;/style&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;h1&gt;SQLite Utility&lt;/h1&gt;<br />
&lt;div class='note_right'&gt;<br />
Current Directory : &lt;?= dirname($_SERVER[PHP_SELF]) ?&gt;<br />
&nbsp;｜&nbsp;Database Directory : &lt;?= $dirname ?&gt;<br />
&lt;/div&gt;<br />
<br />
&lt;h2&gt;<br />
Database : &lt;?= $dbname ?&gt;<br />
&lt;/h2&gt;<br />
&lt;div class='navi'&gt;<br />
&lt;div class='current_tab'&gt;Database&lt;/div&gt;<br />
&lt;div class='tab'&gt;&lt;a href='sqlite_utility_table.php'&gt;TABLE&lt;/a&gt;&lt;/div&gt;<br />
&lt;div class='tab'&gt;&lt;a href='sqlite_utility_table.php'&gt;VIEW&lt;/a&gt;&lt;/div&gt;<br />
&lt;/div&gt;<br />
<br />
&lt;h3&gt;SELECT Database&lt;/h3&gt;<br />
<br />
&lt;?php<br />
$count=radio_files($files);<br />
if($_POST['item']){<br />
	$_SESSION['db']=$files[$_POST['item']];<br />
	}<br />
?&gt;<br />
<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
</blockquote＞<br />
<br />
]]>
    </description>
    <category>PHP</category>
    <link>https://banayan.blog.shinobi.jp/php/php%20%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E5%86%85%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%83%AA%E3%82%B9%E3%83%88%EF%BC%88scandir%EF%BC%89</link>
    <pubDate>Fri, 02 Jun 2006 17:54:30 GMT</pubDate>
    <guid isPermaLink="false">banayan.blog.shinobi.jp://entry/76</guid>
  </item>
    <item>
    <title>PHP Smarty テンプレートファイルを作ってみる。</title>
    <description>
    <![CDATA[PHPの勉強中です。<br />
<br />
インストールしたXAMPPの中に「Smarty.class.php」が見つかったので、前回の「<a href="http://banayan.blog.shinobi.jp/Entry/74/" target="_blank">PHP　XAMPPでSmarty</a>」で、「\xampp\htdocs\smarty」にコピーしました。<br />
<br />
さっそくテンプレートファイルを作って実験してみましょう。<br />
<br />
本来、テンプレートファイルや設定ファイルは、ドキュメントルート(htdocs)の外に置いたほうが覗かれなくていいそうですが、ローカルホストで実験的に使うのだけなので「\xampp\htdocs\smarty」の下に「test」ディレクトリを作ることにしました。あらかじめ「templates」と「templates_c」の2つのディレクトリを作っておくそうです。<br />
<br />
ファイルの配置図はこんな感じにしました。<br />
<blockquote><br />
<br />
［htdocs］─［smarty] --- Smarty.class.php<br />
　　　　　　　　│<br />
　　　　　　　　└[test］---------------- smarty_test01.php<br />
　　　　　　　　　　│<br />
　　　　　　　　　　├［templates］--smarty_test01.tpl<br />
　　　　　　　　　　│<br />
　　　　　　　　　　└［templates_c］<br />
<br />
</blockquote><br />
<br />
「テスト」ディレクトリにテンプレート変数等を格納するPHPファイルとして「smarty_test01.php」を置きました。<br />
<br />
［ソース］smarty_test01.php<br />
<blockquote><br />
<br />
&lt;?php<br />
<br />
include('../Smarty.class.php');<br />
<br />
$smarty = new Smarty();<br />
$smarty-&gt;assign('message','バナヤンだよ！');<br />
$smarty-&gt;display('smarty_test01.tpl');<br />
<br />
?&gt; <br />
<br />
</blockquote><br />
<br />
「templates」ディレクトリにテンプレートファイルを配置します。<br />
{テンプレート変数}の部分に埋め込みが行われます。<br />
<br />
<br />
［ソース］templates/smarty_test01.tpl<br />
<br />
<blockquote><br />
<br />
 &lt;html&gt;<br />
 &lt;head&gt;<br />
 &lt;title&gt;smarty_test01&lt;/title&gt;<br />
 &lt;body&gt;<br />
 {$message}<br />
 &lt;/body&gt;<br />
 &lt;/head&gt;<br />
 &lt;/html&gt;<br />
<br />
</blockquote><br />
<br />
<br />
ブラウザで「http://localhost/smarty/test/smarty_test01.php」にアクセスします。<br />
<br />
「バナヤンだよ！」と表示されます。<br />
<br />
これをブラウザのソース表示で見ると、次のとおり。<br />
<br />
<blockquote><br />
<br />
 &lt;html&gt;<br />
 &lt;head&gt;<br />
 &lt;title&gt;smarty_test01&lt;/title&gt;<br />
 &lt;body&gt;<br />
バナヤンだよ！<br />
 &lt;/body&gt;<br />
 &lt;/head&gt;<br />
 &lt;/html&gt;<br />
<br />
</blockquote><br />
テンプレート変数部分に、文字列が埋め込まれています。<br />
<br />
また、「templates_c」ディレクトリの中に新しいファイルが出来ています。これはコンパイルされたもののようです。<br />
<br />
［ソース］templates_c/smarty_test01.tpl<br />
<blockquote><br />
<br />
&lt;?php /* Smarty version 2.5.0, created on 2006-05-30 01:26:02<br />
         compiled from smarty_test01.tpl */ ?&gt;<br />
 &lt;html&gt;<br />
 &lt;head&gt;<br />
 &lt;title&gt;smarty_test01&lt;/title&gt;<br />
 &lt;body&gt;<br />
 &lt;?php echo $this-&gt;_tpl_vars['message']; ?&gt;<br />
<br />
 &lt;/body&gt;<br />
 &lt;/head&gt;<br />
 &lt;/html&gt;<br />
<br />
</blockquote><br />
<br />
ほんのサワリですが、Smartyの雰囲気だけは、わかったような気がします。]]>
    </description>
    <category>Smarty</category>
    <link>https://banayan.blog.shinobi.jp/smarty/php%20smarty%20%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B%E3%80%82</link>
    <pubDate>Mon, 29 May 2006 17:03:27 GMT</pubDate>
    <guid isPermaLink="false">banayan.blog.shinobi.jp://entry/75</guid>
  </item>
    <item>
    <title>PHP　XAMPPでSmarty</title>
    <description>
    <![CDATA[PHPを勉強中です。<br />
<br />
PHPではテンプレートという手法を利用できると聞いたので試してみたくなりました。HTMLで記述したテンプレートの中にテンプレート変数を埋め込むことで、データをそこに表示することができるのです。<br />
<br />
この忍者ブログもテンプレートの手法を活用することで、記事を書く時にいちいちHTMLのことまで気にしないで済むので、非常にお手軽です。サイトを構築する場合、デザイン部分と処理データ部分を分離することで、サイトのメンテナンスもスムーズにできるようになります。これは知っておいたほうがいいでしょう。<br />
<br />
PHPで利用できるテンプレートクラスとしては、Smartyが有名なようです。これにトライしてみましょう。<br />
<br />
ありがたいことにXAMPPをインストールすると、Smartyを利用するために必要なファイルもダウンロードされています。私はapachefriends.orgの「<a href="http://www.apachefriends.org/en/xampp-windows.html" target="_blank">XAMPP for Windows</a>」のページからXAMPPをダウンロードしてマシンにインストールしました。そのときインストールしたディレクトリの中を探すと、Smartyに関するファイルが次の場所にありました。<br />
<blockquote><br />
\xampp\php\pear\PhpDocumentor\phpDocumentor\Smarty-2.5.0\libs<br />
<br />
</blockquote><br />
<br />
このディレクトリ「libs]の中には次のファイル類が含まれています。<br />
<blockquote><br />
Smarty.class.php<br />
Smarty_Compiler.class.php<br />
Config_File.class.php<br />
debug.tpl<br />
Pliginsフォルダ<br />
<br />
</blockquote><br />
<br />
「.class.php」という名前が付いているファイルはユーザー定義関数の集合体、「Pliginsフォルダ」はオプションを利用する際に必要なファイル類だろうと見当がつきます。これらをサーバーで利用できる場所にコピーすれば、使えそうな気がします。<br />
<br />
このディレクトリ「libs]全体を次の場所にコピーして、「smarty]というフォルダ名にしました。<br />
<br />
<blockquote><br />
<br />
\xampp\htdocs<br />
</blockquote><br />
<br />
コピー後<br />
<blockquote><br />
<br />
\xampp\htdocs\smarty<br />
</blockquote><br />
<br />
これで動くかどうか、check用フォルダを「\xampp\htdocs\smarty」の下に作り「\xampp\htdocs\smarty\check」として、そこに次のPHPファイルを作成しておきました。<br />
<br />
［ソース］Smartyインクルード確認---smartycheck.php<br />
<blockquote><br />
&lt;?php<br />
<br />
include('../Smarty.class.php');<br />
<br />
if (class_exists('Smarty')) {<br />
    $smary =&amp; new Smarty;<br />
    printf(&quot;Smartyが使えるよ。(version %s).\n&quot;, $smary-&gt;_version);<br />
} else {<br />
    echo &quot;残念！インクルード忘れ？&quot;;<br />
}<br />
<br />
?&gt; <br />
</blockquote><br />
<br />
ブラウザのアドレスに「http://localhost/smarty/check/smartycheck.php」と入力すると、「Smartyが使えるよ。(version 2.5.0). 」と表示されました。<br />
どうやらSmartyが使えるようです。XAMPPっていろいろなものが入っているんですね。<br />
<br />
<br />
]]>
    </description>
    <category>Smarty</category>
    <link>https://banayan.blog.shinobi.jp/smarty/php%E3%80%80xampp%E3%81%A7smarty</link>
    <pubDate>Sun, 28 May 2006 05:38:29 GMT</pubDate>
    <guid isPermaLink="false">banayan.blog.shinobi.jp://entry/74</guid>
  </item>
    <item>
    <title>PHP よく使用する関数はインクルードファイルに（require_once）</title>
    <description>
    <![CDATA[PHPを勉強中です。<br />
<br />
よく使用する関数やスクリプトは別のファイルにまとめておき、必要に応じて呼び出せれば便利です。<br />
<br />
PHPでは、別のファイルを合体させて使用することができます。インクルードファイルというものです。<br />
<br />
「include」「require」「include_once」「require_once」を記述するとインクルードファイルを読み込むことができます。<br />
<br />
「include」と「require」の違いは、エラー発生時に処理を停止しないか、停止するかです。「include」は処理を停止しません。<br />
<br />
「include_once」と「require_once」は、スクリプトの実行時に同じファイ ルが複数回読み込まれる必要が無く、１回読み込めばよいときに使用します。インクルードファイルの内容に変更が生じないときには、１回読み込めば充分です。したがって、単なるスクリプトの合体の場合は、これらを使用します。<br />
<br />
さっそく試してみましょう。<br />
前回の「<a href="http://banayan.blog.shinobi.jp/Entry/72/" target="_blank">PHP ページ切替ナビ付テーブル（CSV）</a>」 で使用した関数をインクルードファイル「mylib.inc」に移します。その関数が何をしようとして作成されたものかをメモしておかないと、次に使いたいときに迷ってしまうので注釈を加えておきましょう。<br />
<br />
［サンプルソース］インクルードファイル　---　mylib.inc<br />
<blockquote><br />
&lt;?php<br />
###&nbsp;【ページ切替ナビゲーション】###########################<br />
###&nbsp;&nbsp;各ページへのリンクリストを数字で表示する。<br />
###&nbsp;&nbsp;クリックされた数字はGETメソッドで取得することを想定。<br />
###&nbsp;&nbsp;$lastpage：0を１ページ目とし、最終ページは（総ページ数-1）。<br />
###&nbsp;&nbsp;$lastpageは、「レコード数/ページあたり表示レコード数」で求めることを想定。<br />
<br />
function page_navi($lastpage){<br />
	for($i=1;$i&lt;=$lastpage+1;$i++){<br />
		echo &quot;&lt;a href=$_SERVER[PHP_SELF]?page_num=&quot;.$i.&quot;&gt;[&quot;.$i.&quot;]&lt;/a&gt;&quot;;<br />
	}<br />
}<br />
<br />
###&nbsp;【ページ切替テーブル（CSV)】###########################<br />
###&nbsp;&nbsp;CSVファイルを読み込んで、HTMLのテーブルとしてデータを表示する。<br />
###&nbsp;&nbsp;戻り値は、「総レコード数」。<br />
###&nbsp;&nbsp;何番目のレコードから表示するかを$row_fromで指定（１番目は「0」）。<br />
###&nbsp;&nbsp;１ページに表示するレコード数は、$pagerowsで指定する。<br />
###&nbsp;&nbsp;ユーザー定義関数「page_navi($lastpage)」と組み合わせて使用することを想定。<br />
###&nbsp;&nbsp;＜class属性＞<br />
###&nbsp;&nbsp;table&nbsp;.CSV<br />
###&nbsp;&nbsp;作成されるテーブルの行<br />
###&nbsp;&nbsp;&nbsp;奇数行&nbsp;tr .row_class0<br />
###      偶数行&nbsp;tr .row_class1<br />
###&nbsp;&nbsp;各フィールド<br />
###      第１フィールド&nbsp;td field0<br />
###      第２フィールド&nbsp;td field1<br />
<br />
function fgetcsv2table_page($filename,$row_from,$pagerows){<br />
	$fp = fopen($filename,&quot;r&quot;);<br />
	if(!($fp)){<br />
	die(&quot;ファイルをオープンできません。&quot;);<br />
	}else{<br />
	$row_num=0;<br />
	$row_to=$row_from + $pagerows;<br />
	echo &quot;&lt;table class='csv'&gt;\r\n&quot;;<br />
	while($row=fgetcsv($fp,1000,&quot;,&quot;)){<br />
	$page=$rownum/$pagerows;<br />
	$row_class=$row_num % 2;<br />
	if($row_num&gt;=$row_from&amp;&amp;$row_num&lt;$row_to){<br />
		echo&quot;&lt;tr class='row_class&quot;.$row_class.&quot;'&gt;&quot;;<br />
		$fields=count($row);<br />
		for($i=0;$i&lt;$fields;$i++){<br />
			echo &quot;&lt;td class='field&quot;.$i.&quot;'&gt;&quot;.$row[$i].&quot;&lt;/td&gt;&quot;;<br />
			}<br />
		echo &quot;&lt;/tr&gt;\r\n&quot;;<br />
		}<br />
	$row_num++;<br />
	}<br />
	echo &quot;&lt;/table&gt;&quot;;<br />
	fclose($fp);<br />
	}<br />
	return $row_num;<br />
}<br />
<br />
?&gt;<br />
<br />
</blockquote><br />
<br />
このインクルードファイル「mylib.inc」を呼び出したいときは、次のように記述します。<br />
<br />
［サンプルソース］インクルードファイルの呼び出し<br />
<blockquote><br />
&lt;?php<br />
include_once(&quot;mylib.inc&quot;);<br />
?&gt;<br />
<br />
</blockquote><br />
<br />
簡単ですね。<br />
<br />
それでは、全体のソースを示しましょう。<br />
インクルードファイル化した部分以外は、前回の「<a href="http://banayan.blog.shinobi.jp/Entry/72/" target="_blank">PHP ページ切替ナビ付テーブル（CSV）</a>」 と同じです。<br />
<br />
［サンプルソース］ページ切替ナビ付テーブル（CSV） -インクルード版<br />
<blockquote><br />
&lt;?php<br />
include_once(&quot;mylib.inc&quot;);<br />
?&gt;<br />
<br />
<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=Shift_JIS&quot;&gt;<br />
&lt;meta http-equiv=&quot;Pragma&quot; content=&quot;no-cache&quot;&gt;<br />
&lt;title&gt;fgetcsv2table_page()&lt;/title&gt;<br />
&lt;style type='text/css'&gt;<br />
&lt;!--<br />
.csv {border-collapse:collapse;}<br />
.csv td {border:#030 solid 1px;}<br />
.row_class0{background-color:#cfc;}<br />
.row_class1{background-color:#fff;}<br />
.field0{text-align:right;}<br />
--&gt;<br />
&lt;/style&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
<br />
<br />
&lt;?php<br />
//テスト用データ<br />
$filename=&quot;pref.csv&quot;;<br />
$pagerows=10;<br />
$row_from=0;<br />
if($_GET['page_num']){<br />
	$row_from=($_GET['page_num']-1)*$pagerows;<br />
	}<br />
<br />
<br />
###ユーザー定義関数fgetcsv2table_page<br />
$row_num=fgetcsv2table_page($filename,$row_from,$pagerows);<br />
<br />
echo &quot;&lt;hr&gt;&quot;;<br />
echo &quot;全&quot;.$row_num.&quot;件&lt;br&gt;&quot;;<br />
echo &quot;&lt;hr&gt;&quot;;<br />
$page=$row_num/$pagerows;<br />
###ユーザー定義関数page_navi<br />
page_navi($page);<br />
if($_GET['page_num']){<br />
	$page_num=$_GET['page_num'];<br />
	$row_from=$pagerows * $page_num;<br />
	}<br />
<br />
?&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
<br />
</blockquote><br />
<br />
ソースがすっきりしましたね。これでも前回と同じように動きます。<br />
<br />
<img src="//banayan.blog.shinobi.jp/File/fgetcsv2table_page5.jpg" border="1" alt="ページ切替ナビ付テーブル５"><br />
<br />
<br />
<br />
]]>
    </description>
    <category>PHP</category>
    <link>https://banayan.blog.shinobi.jp/php/php%20%E3%82%88%E3%81%8F%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E9%96%A2%E6%95%B0%E3%81%AF%E3%82%A4%E3%83%B3%E3%82%AF%E3%83%AB%E3%83%BC%E3%83%89%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AB%EF%BC%88require_once%EF%BC%89</link>
    <pubDate>Sat, 27 May 2006 03:11:16 GMT</pubDate>
    <guid isPermaLink="false">banayan.blog.shinobi.jp://entry/73</guid>
  </item>
    <item>
    <title>PHP ページ切替ナビ付テーブル（CSV）</title>
    <description>
    <![CDATA[PHPの勉強中です。<br />
<br />
前回の「<a href="http://banayan.blog.shinobi.jp/Entry/71/" target="_blank">PHP ページ切替ナビゲーション（$_GET）</a>」では、ページ切替ナビゲーションの表示方法を考えました。今回はこれの応用です。1ページに表示するレコード数を限定して、表示されていないレコードへはページを切り替えて閲覧できるようにします。<br />
<br />
データのサンプルには、都道府県コードのCSVファイルを使用します。<br />
<br />
都道府県コードのCSVファイルについては、これまでも「<a href="http://banayan.blog.shinobi.jp/Entry/67/" target="_blank">PHP CSVファイルの読込み（fgetcsv）</a> 」、「<a href="http://banayan.blog.shinobi.jp/Entry/70/" target="_blank">PHP ユーザー定義関数（function）</a>」などで使用してきました。今回は、これらの記事で掲載したソースのサンプルも流用します。<br />
<br />
まず、出来上がりのイメージを見ましょう。<br />
<br />
［画面サンプル］ページ切替ナビ付テーブル　ページ１<br />
<img src="//banayan.blog.shinobi.jp/File/fgetcsv2table_page1.jpg" border="1" alt="ページ切替ナビ付テーブル1"><br />
<br />
「ページ切替ナビゲーション」の数字をクリックするとページが移動します。<br />
<br />
［画面サンプル］ページ切替ナビ付テーブル　ページ２<br />
<img src="//banayan.blog.shinobi.jp/File/fgetcsv2table_page2.jpg" border="1" alt="ページ切替ナビ付テーブル2"><br />
<br />
前回の「<a href="http://banayan.blog.shinobi.jp/Entry/71/" target="_blank">PHP ページ切替ナビゲーション（$_GET）</a>」で作成した「ページ切替ナビゲーション」表示用の関数「function page_navi」は、PHPソースの中で、そのまま使用しています。この関数は、総ページ数を入力して使用する関数でした。<br />
<br />
この総ページ数を求めるために第２の関数を利用しました。<br />
ファイル名がわかれば、総レコード数が算出できます。<br />
１ページに表示するレコード数を指定すれば、割り算の商で総ページが計算できます。<br />
あとは何ページ目を表示するかという指示をすればいいわけですが、ここでは何番目のレコードから表示するかという設定にしました。「ページ切替ナビゲーション」でクリックしたページ番号で何番目のレコードから表示すればいいか計算できるからです。そうすることにより、CSVファイルのデータの読込みとHTMLテーブルの行の作成を同時に行うことができます。<br />
<br />
このように考えて、第２の関数は「ファイル名、開始レコード番号、１行に表示するレコード数」の３つのパラメータを指定して実行することにしました。<br />
<br />
<blockquote><br />
###ユーザー定義関数fgetcsv2table_page<br />
$row_num=fgetcsv2table_page($filename,$row_from,$pagerows);<br />
<br />
echo &quot;&lt;hr&gt;&quot;;<br />
echo &quot;全&quot;.$row_num.&quot;件&lt;br&gt;&quot;;<br />
echo &quot;&lt;hr&gt;&quot;;<br />
$page=$row_num/$pagerows;<br />
</blockquote><br />
この関数は、HTMLのテーブルを出力するとともに、戻り値として、ファイルの総レコード数を返します。返された総レコード数を１行に表示するレコード数で割って総ページ数を算出しています。<br />
<br />
画面イメージの「全47件」と[5]という総ページ数は、こうして表示したものです。<br />
<br />
［画面サンプル］ページ切替ナビ付テーブル　ページ３<br />
<img src="//banayan.blog.shinobi.jp/File/fgetcsv2table_page3.jpg" border="1" alt="ページ切替ナビ付テーブル３"><br />
<br />
また、画面サンプルでは、１行おきにライトグリーンの背景色になっています。これは、tr要素のclass属性を１行おきに変えて、スタイルシートで背景色を設定しています。<br />
<br />
［ソース」スタイルシート部分<br />
<blockquote><br />
&lt;style type='text/css'&gt;<br />
&lt;!--<br />
.csv {border-collapse:collapse;}<br />
.csv td {border:#030 solid 1px;}<br />
.row_class0{background-color:#cfc;}<br />
.row_class1{background-color:#fff;}<br />
.field0{text-align:right;}<br />
--&gt;<br />
&lt;/style&gt;<br />
<br />
</blockquote><br />
<br />
［画面サンプル］ページ切替ナビ付テーブル　ページ４<br />
<img src="//banayan.blog.shinobi.jp/File/fgetcsv2table_page4.jpg" border="1" alt="ページ切替ナビ付テーブル４"><br />
最後に全体のソースを掲載しましょう。<br />
<br />
<blockquote><br />
&lt;?php<br />
###ユーザー定義関数の登録<br />
##ページナビ<br />
function page_navi($lastpage){<br />
	for($i=1;$i&lt;=$lastpage+1;$i++){<br />
		echo &quot;&lt;a href=$_SERVER[PHP_SELF]?page_num=&quot;.$i.&quot;&gt;[&quot;.$i.&quot;]&lt;/a&gt;&quot;;<br />
	}<br />
}<br />
?&gt;<br />
<br />
&lt;?php<br />
###ユーザー定義関数の登録<br />
function fgetcsv2table_page($filename,$row_from,$pagerows){<br />
	$fp = fopen($filename,&quot;r&quot;);<br />
	if(!($fp)){<br />
	die(&quot;ファイルをオープンできません。&quot;);<br />
	}else{<br />
	$row_num=0;<br />
	$row_to=$row_from + $pagerows;<br />
	echo &quot;&lt;table class='csv'&gt;\r\n&quot;;<br />
	while($row=fgetcsv($fp,1000,&quot;,&quot;)){<br />
	$page=$rownum/$pagerows;<br />
	$row_class=$row_num % 2;<br />
	if($row_num&gt;=$row_from&amp;&amp;$row_num&lt;$row_to){<br />
		echo&quot;&lt;tr class='row_class&quot;.$row_class.&quot;'&gt;&quot;;<br />
		$fields=count($row);<br />
		for($i=0;$i&lt;$fields;$i++){<br />
			echo &quot;&lt;td class='field&quot;.$i.&quot;'&gt;&quot;.$row[$i].&quot;&lt;/td&gt;&quot;;<br />
			}<br />
		echo &quot;&lt;/tr&gt;\r\n&quot;;<br />
		}<br />
	$row_num++;<br />
	}<br />
	echo &quot;&lt;/table&gt;&quot;;<br />
	fclose($fp);<br />
	}<br />
	return $row_num;<br />
}<br />
?&gt;<br />
<br />
<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=Shift_JIS&quot;&gt;<br />
&lt;meta http-equiv=&quot;Pragma&quot; content=&quot;no-cache&quot;&gt;<br />
&lt;title&gt;fgetcsv2table_page()&lt;/title&gt;<br />
&lt;style type='text/css'&gt;<br />
&lt;!--<br />
.csv {border-collapse:collapse;}<br />
.csv td {border:#030 solid 1px;}<br />
.row_class0{background-color:#cfc;}<br />
.row_class1{background-color:#fff;}<br />
.field0{text-align:right;}<br />
--&gt;<br />
&lt;/style&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
<br />
<br />
&lt;?php<br />
//テスト用データ<br />
$filename=&quot;pref.csv&quot;;<br />
$pagerows=10;<br />
$row_from=0;<br />
if($_GET['page_num']){<br />
	$row_from=($_GET['page_num']-1)*$pagerows;<br />
	}<br />
<br />
<br />
###ユーザー定義関数fgetcsv2table_page<br />
$row_num=fgetcsv2table_page($filename,$row_from,$pagerows);<br />
<br />
echo &quot;&lt;hr&gt;&quot;;<br />
echo &quot;全&quot;.$row_num.&quot;件&lt;br&gt;&quot;;<br />
echo &quot;&lt;hr&gt;&quot;;<br />
$page=$row_num/$pagerows;<br />
###ユーザー定義関数page_navi<br />
page_navi($page);<br />
if($_GET['page_num']){<br />
	$page_num=$_GET['page_num'];<br />
	$row_from=$pagerows * $page_num;<br />
	}<br />
<br />
?&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
<br />
</blockquote><br />
<br />
最後のページの画面サンプルも載せておきましょう。<br />
<br />
［画面サンプル］ページ切替ナビ付テーブル　ページ５<br />
<img src="//banayan.blog.shinobi.jp/File/fgetcsv2table_page5.jpg" border="1" alt="ページ切替ナビ付テーブル５"><br />
]]>
    </description>
    <category>PHP</category>
    <link>https://banayan.blog.shinobi.jp/php/php%20%E3%83%9A%E3%83%BC%E3%82%B8%E5%88%87%E6%9B%BF%E3%83%8A%E3%83%93%E4%BB%98%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%EF%BC%88csv%EF%BC%89</link>
    <pubDate>Fri, 26 May 2006 16:49:29 GMT</pubDate>
    <guid isPermaLink="false">banayan.blog.shinobi.jp://entry/72</guid>
  </item>
    <item>
    <title>PHP ページ切替ナビゲーション（$_GET）</title>
    <description>
    <![CDATA[PHPを勉強中です。<br />
<br />
多量のデータを扱う場合、1画面に表示するデータ量を設定し、表示されていないデータへはページ移動でアクセスできるようにする必要があります。この場合、ページ切替のナビゲーションがページの中に埋め込まれます。<br />
<br />
Googleの検索結果ページでも、10件以上の検索結果が出た場合には、下の方に「次へ」というナビゲーションのほかに、ページ切替のための数字のリンクが出現します。また、この「忍者ブログ」でもページ移動用のナビゲーションが表示されます。<br />
<br />
今回は、この「ページ切替ナビゲーション」の表示部分を作ってみたいと思います。<br />
<br />
前回の「<a href="http://banayan.blog.shinobi.jp/Entry/70/" target="_blank">PHP ユーザー定義関数（function）</a>」で、ユーザー定義関数についておよその感触を掴めたので 、今回もユーザー定義関数で定義してみましょう。<br />
<br />
アウトプットは明確です。こんな感じの表示。<br />
<blockquote><br />
<div class="PageLinkBlock">[<a href="/Category/7/1/">1</a>] [<a href="/Category/7/2/">2</a>] [<a href="/Category/7/3/">3</a>] [<a href="/Category/7/4/">4</a>] [<a href="/Category/7/5/">5</a>] [<a href="/Category/7/6/">6</a>] </div><br />
</blockquote><br />
<br />
さて、インプットを何にしましょう。<br />
<br />
ひとつには、ファイル名と1ページの最大表示数というのが考えられます。ファイル名がわかれば、その行数は調べられます。行数を1ページの最大表示で割れば、総ページ数の計算もできます。<br />
<br />
しかしながら、パラメータ項目をファイル名に限定するとデータベースの検索結果を表示する場合には使用できません。ここはダイレクトに総ページ数をインプットすることにしましょう。そのほうが汎用性が高い関数になります。<br />
<br />
処理は、ループ処理で1ページから最後のページまでの数字を出力することが基本になります。そして、それぞれの数字を&lt;a&gt;タグで囲んで、リンク属性を与えます。リンク先は「ページ自身（$_SERVER[PHP_SELF]）」とし、GETメソッドで、その数字を受け取るようにします。<br />
<br />
次のサンプルは、上のように考えて作成した「ページ切替ナビゲーション」用関数とその使用例です。<br />
<br />
テスト用として総ページ数は６、受け取った数字を「Page:」の部分に表示するだけにしています。<br />
<br />
実際に使用する場合には、総ページ数を計算する部分も必要となるでしょうし、GETしたページ数で処理する部分は「echo "Page:".$page_num;」ではなく、データの表示に関する記述も必要となるでしょう。<br />
<br />
［サンプルソース］ページ切替ナビゲーション（page_navi)<br />
<blockquote><br />
&lt;?php<br />
###ユーザー定義関数の登録<br />
##ページナビ<br />
function page_navi($lastpage){<br />
	for($i=1;$i&lt;=$lastpage+1;$i++){<br />
		echo &quot;&lt;a href=$_SERVER[PHP_SELF]?page_num=&quot;.$i.&quot;&gt;[&quot;.$i.&quot;]&lt;/a&gt;&quot;;<br />
	}<br />
}<br />
?&gt;<br />
<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=Shift_JIS&quot;&gt;<br />
&lt;meta http-equiv=&quot;Pragma&quot; content=&quot;no-cache&quot;&gt;<br />
&lt;title&gt;page_navi()&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
<br />
&lt;?php&gt;<br />
///テスト用データ<br />
$lastpage=5;<br />
###ユーザー定義関数page_navi<br />
page_navi($lastpage);<br />
///テスト用出力<br />
echo &quot;&lt;hr&gt;&quot;;<br />
$page_num=1;<br />
if($_GET['page_num']){<br />
	$page_num=$_GET['page_num'];<br />
	}<br />
echo &quot;Page:&quot;.$page_num;<br />
?&gt;<br />
<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
<br />
</blockquote><br />
<br />
上記のサンプルでは、$lastpageは"5"にして、表示は６ページまでとしています。これは、$lastpageにはレコード数を1ページの最大表示数で割った場合の「商」を代入するつもりだからです。表示とは別に内部的にはページは０ページから始まるとしたものです。<br />
（例）<br />
　レコード数----------57 (a)<br />
　ページの最大表示数---10 (b)<br />
　(a)÷(b)------------5　余り　7<br />
　最後のページ---------6<br />
<br />
<br />
どうしても$lastpageは"6"にしたい場合には、page_naviの「for($i=1;$i&lt;=$lastpage+1;$i++)」の部分を、次のように書き換えます。<br />
<blockquote><br />
$i=1;$i&lt;=$lastpage;$i++)<br />
<br />
</blockquote><br />
]]>
    </description>
    <category>PHP</category>
    <link>https://banayan.blog.shinobi.jp/php/php%20%E3%83%9A%E3%83%BC%E3%82%B8%E5%88%87%E6%9B%BF%E3%83%8A%E3%83%93%E3%82%B2%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%EF%BC%88-_get%EF%BC%89</link>
    <pubDate>Thu, 25 May 2006 15:32:33 GMT</pubDate>
    <guid isPermaLink="false">banayan.blog.shinobi.jp://entry/71</guid>
  </item>
    <item>
    <title>PHP ユーザー定義関数（function） </title>
    <description>
    <![CDATA[PHPを勉強中です。ユーザー定義関数を活用すると、コードの記述が楽になるそうです。同じ処理は、ユーザー定義関数をコピーしたり、インクルードファイルから呼びだすだけで済むようになるからです。これを使わない手はないので、どんなものか試してみましょう。<br />
<br />
サンプルを作る前に「関数」について考えてみます。<br />
<br />
関数というのは、数学の関数も同じですが、式中の変数に値を与えると一定の結果が出るものです。だから、関数を作る前には、インプットするものは何か、アウトプットするものは何かを明確にしておかなければなりません。そして、次にそのアウトプットを得るためにどう処理するかを考えることになります。<br />
<br />
それでは、サンプルを作ってみましょう。<br />
課題は、「CSVファイルのデータをHTMLのテーブルで表示する」にします。CSVファイルを使用するときは、中身のデータを確認したいと思うことがあります。「CSVファイルのデータをHTMLのテーブルで表示する」関数を一度作っておけば、いろいろな場面で利用できそうです。ユーザー定義関数を作っておく価値があるとみました。<br />
<br />
まずインプットするデータは何かを明確にしましょう。<br />
考えるまでもなく、それは「CSVファイル」の名前ですね。<br />
<br />
ではアウトプットするものは何でしょう。<br />
HTMLのテーブルを作成するのだから、HTML文ですね。<br />
それもtableタグやtrタグtdタグを使用したものです。<br />
<br />
そうすると、処理としては、指定されたCSVファイルを読み込んで、そのデータにHTMLタグを加えて、画面に出力することになります。出力を行う「echo」文が多用されそうです。<br />
<br />
このようにだいたいの予想をしておいて、コードの記述にとりかかります。<br />
<br />
まず関数名を決めましょう。<br />
「CSVファイル」を読み込んでテーブルに表示するのだから「fgetcsv2table]とでもしましょう。<br />
<br />
ユーザー定義関数を登録する書式は、次のとおりです。<br />
<blockquote><br />
function 関数名(パラメータ){<br />
　　　　　定義内容<br />
　　　　　}<br />
</blockquote><br />
<br />
したがって、「fgetcsv2table]という関数を登録するには、次のように記述することになります。<br />
<blockquote><br />
function fgetcsv2table($filename){<br />
　　　　　定義内容<br />
　　　　　}<br />
</blockquote><br />
<br />
さて、問題は定義内容です。<br />
ユーザー定義関数を使用しないで、CSVファイルのデータを表示した例が「<a href="http://banayan.blog.shinobi.jp/Entry/67/" target="_blank">PHP CSVファイルの読込み（fgetcsv）</a> 」にあります。この中から、テーブル表示に関する部分を取り出すと、おおむね次のようなソースになります。<br />
<br />
［サンプル］「CSVファイルのデータをHTMLのテーブルで表示する」（ユーザー定義関数なし）<br />
<blockquote><br />
&lt;?php<br />
$filename=&quot;pref.csv&quot;;<br />
$fp = fopen($filename,&quot;r&quot;);<br />
if(!($fp)){<br />
die(&quot;ファイルをオープンできません。&quot;);<br />
}else{<br />
echo &quot;&lt;table class='csv'&gt;\r\n&quot;;<br />
while($row=fgetcsv($fp,1000,&quot;r&quot;)){<br />
echo&quot;&lt;tr&gt;&quot;;<br />
$fields=count($row);<br />
for($i=0;$i&lt;$fields;$i++){<br />
	echo &quot;&lt;td&gt;&quot;.$row[$i].&quot;&lt;/td&gt;&quot;;<br />
	}<br />
echo &quot;&lt;/tr&gt;\r\n&quot;;<br />
}<br />
echo &quot;&lt;/table&gt;&quot;;<br />
fclose($fp);<br />
}<br />
?&gt; <br />
</blockquote><br />
<br />
これに手を加えてユーザー定義関数としましょう。<br />
<br />
手を加えるのは、table、tr、tdの各要素にclass属性を付与するところです。class属性を加えておけば、スタイルシートでブラウザの表示をコントロールしやすくなります。<br />
<br />
　tableのclass属性：「csv」<br />
　trのclass属性：偶数行は「row_class0」、偶数行は「row_class0」。<br />
　　　　　　　　（こうしておけば１行おきに色分けできます。）<br />
　tdのclass属性：「field」＋フィールド番号<br />
　　　　　　　　（こうしておけばフィールドごとに色分けできます。）<br />
<br />
［サンプル］「CSVファイルのデータをHTMLのテーブルで表示する」（ユーザー定義関数）<br />
<blockquote><br />
&lt;?php<br />
###ユーザー定義関数の登録<br />
function fgetcsv2table($filename){<br />
	$fp = fopen($filename,&quot;r&quot;);<br />
	if(!($fp)){<br />
	die(&quot;ファイルをオープンできません。&quot;);<br />
	}else{<br />
	echo &quot;&lt;table class='csv'&gt;\r\n&quot;;<br />
	while($row=fgetcsv($fp,1000,&quot;,&quot;)){<br />
	$row_num++;<br />
	$row_class=$row_num % 2;<br />
	echo&quot;&lt;tr class='row_class&quot;.$row_class.&quot;'&gt;&quot;;<br />
	$fields=count($row);<br />
	for($i=0;$i&lt;$fields;$i++){<br />
		echo &quot;&lt;td class='field&quot;.$i.&quot;'&gt;&quot;.$row[$i].&quot;&lt;/td&gt;&quot;;<br />
		}<br />
	echo &quot;&lt;/tr&gt;\r\n&quot;;<br />
	}<br />
	echo &quot;&lt;/table&gt;&quot;;<br />
	fclose($fp);<br />
	}<br />
}<br />
?&gt;<br />
</blockquote><br />
<br />
これでユーザー定義関数のできあがりです。<br />
あとは、これを呼び出して使用します。<br />
<br />
ユーザー定義関数を使用するときは、ユーザー定義関数を定義したときの「function」と「{」の間をそのまま使うことができます。その場合は、パラメータの変数は事前に値を与えておきます。もちろん、パラメータに直接、値を入れることもできます。<br />
<br />
変数への値の与え方はさまざまです。<br />
フォーム入力させてPOST変数で受けることもできますし、その前の処理の部分で値を代入させておくこともできます。<br />
<br />
ここでは、テスト用なのでファイル名は直前に代入しましょう。<br />
［サンプル］「CSVファイルのデータをHTMLのテーブルで表示する」（ユーザー定義関数の呼び出し）<br />
<blockquote><br />
&lt;?php<br />
//テスト用データ<br />
$filename=&quot;pref.csv&quot;;<br />
//<br />
###ユーザー定義関数fgetcsv2table<br />
fgetcsv2table($filename);<br />
?&gt;<br />
</blockquote><br />
<br />
最後に、スタイルシートで１行おきに背景色を変える部分も含めてページ全体のソースを掲載しておきます。<br />
<br />
［サンプル］「CSVファイルのデータをHTMLのテーブルで表示する」（ユーザー定義関数）横縞表示<br />
<blockquote><br />
&lt;?php<br />
###ユーザー定義関数の登録<br />
function fgetcsv2table($filename){<br />
	$fp = fopen($filename,&quot;r&quot;);<br />
	if(!($fp)){<br />
	die(&quot;ファイルをオープンできません。&quot;);<br />
	}else{<br />
	echo &quot;&lt;table class='csv'&gt;\r\n&quot;;<br />
	while($row=fgetcsv($fp,1000,&quot;,&quot;)){<br />
	$row_num++;<br />
	$row_class=$row_num % 2;<br />
	echo&quot;&lt;tr class='row_class&quot;.$row_class.&quot;'&gt;&quot;;<br />
	$fields=count($row);<br />
	for($i=0;$i&lt;$fields;$i++){<br />
		echo &quot;&lt;td class='field&quot;.$i.&quot;'&gt;&quot;.$row[$i].&quot;&lt;/td&gt;&quot;;<br />
		}<br />
	echo &quot;&lt;/tr&gt;\r\n&quot;;<br />
	}<br />
	echo &quot;&lt;/table&gt;&quot;;<br />
	fclose($fp);<br />
	}<br />
}<br />
?&gt;<br />
<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=Shift_JIS&quot;&gt;<br />
&lt;meta http-equiv=&quot;Pragma&quot; content=&quot;no-cache&quot;&gt;<br />
&lt;title&gt;fgetcsv2table()&lt;/title&gt;<br />
&lt;style type='text/css'&gt;<br />
&lt;!--<br />
.csv {border-collapse:collapse;}<br />
.csv td {border:#030 solid 1px;}<br />
.row_class0{background-color:#cfc;}<br />
.row_class1{background-color:#fff;}<br />
.field0{text-align:right;}<br />
--&gt;<br />
&lt;/style&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
<br />
&lt;?php<br />
//テスト用データ<br />
$filename=&quot;pref.csv&quot;;<br />
//<br />
###ユーザー定義関数fgetcsv2table<br />
fgetcsv2table($filename);<br />
?&gt;<br />
<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
</blockquote><br />
<br />
<br />
]]>
    </description>
    <category>PHP</category>
    <link>https://banayan.blog.shinobi.jp/php/php%20%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E5%AE%9A%E7%BE%A9%E9%96%A2%E6%95%B0%EF%BC%88function%EF%BC%89%20</link>
    <pubDate>Wed, 24 May 2006 11:55:07 GMT</pubDate>
    <guid isPermaLink="false">banayan.blog.shinobi.jp://entry/70</guid>
  </item>
    <item>
    <title>PHP+SQLite CSVファイルのインポート</title>
    <description>
    <![CDATA[「PHP+SQLite」を勉強中です。今回のテーマは、CSVファイルのインポート。<br />
<br />
CSVファイルのCSVは、"Comma Separated Values"の略。「コンマ区切りテキストファイル」のこと。データをカンマ「,」で区切って並べます。表計算やデータベースなど多くのアプリケーションでこの形式のファイルの入出力をサポートしています。ExcelやAccessでも利用できます。実体はテキストファイルなので、「メモ帳」などのテキストエディタでも作成、編集が可能です。<br />
<br />
あるアプリケーションにあるデータを別のアプリケーションで使用する場合に、いったんCSVファイルに出力して、それからそのCSVファイルを読み込む形でデータを入力することがあります。既存のデータを一括入力できるので、非常に便利です。<br />
<br />
前に「<a href="http://banayan.blog.shinobi.jp/Entry/67/" target="_blank">PHP CSVファイルの読込み（fgetcsv）</a>」という記事でfgetcsv関数を用いてCSVファイルを読み込む方法を学びました。今回はこれを応用して、SQLiteデータベースのテーブルにCSVファイルのデータを取り込みます。<br />
<br />
サンプルのCSVファイルは、前と同じ都道府県コードのリストです。<br />
<br />
［ソース］CSVファイル「pref.csv」---都道府県コード<br />
<blockquote><br />
1,北海道<br />
2,青森<br />
3,岩手<br />
4,宮城<br />
5,秋田<br />
6,山形<br />
7,福島<br />
8,茨城<br />
9,栃木<br />
10,群馬<br />
11,埼玉<br />
12,千葉<br />
13,東京<br />
14,神奈川<br />
15,新潟<br />
16,富山<br />
17,石川<br />
18,福井<br />
19,山梨<br />
20,長野<br />
21,岐阜<br />
22,静岡<br />
23,愛知<br />
24,三重<br />
25,滋賀<br />
26,京都<br />
27,大阪<br />
28,兵庫<br />
29,奈良<br />
30,和歌山<br />
31,鳥取<br />
32,島根<br />
33,岡山<br />
34,広島<br />
35,山口<br />
36,徳島<br />
37,香川<br />
38,愛媛<br />
39,高知<br />
40,福岡<br />
41,佐賀<br />
42,長崎<br />
43,熊本<br />
44,大分<br />
45,宮崎<br />
46,鹿児島<br />
47,沖縄<br />
</blockquote><br />
<br />
画面サンプルの例を順番に追っていきましょう。<br />
<br />
［画面サンプル］PHP+SQL CSVファイルインポート　入力画面<br />
<img src="//banayan.blog.shinobi.jp/File/csv2sqlite_input.jpg" border="1" alt="PHP+SQL CSVファイルインポート入力画面"><br />
<br />
［画面サンプル］PHP+SQL CSVファイルインポート　チェック画面<br />
<img src="//banayan.blog.shinobi.jp/File/csv2sqlite_check.jpg" border="1" alt="PHP+SQL CSVファイルインポートチェック画面"><br />
<br />
［画面サンプル］PHP+SQL CSVファイルインポート　実行画面<br />
<img src="//banayan.blog.shinobi.jp/File/csv2sqlite_insert.jpg" border="1" alt="PHP+SQL CSVファイルインポート実行画面"><br />
<br />
テーブルにデータがインサ－トされたか、「SELECT * FROM pref」で確認しましょう。「<a href="http://banayan.blog.shinobi.jp/Entry/61/" target="_blank">PHP+SQLite テーブル情報(sqlite_master)</a>」でソースを紹介したクエリの実行確認画面を今回も使用しました。<br />
<br />
［画面サンプル］PHP+SQL CSVファイルインポート　結果画面<br />
<img src="//banayan.blog.shinobi.jp/File/csv2sqlite_result.jpg" border="1" alt="PHP+SQL CSVファイルインポート結果画面"><br />
<br />
［ソース]PHP+SQLite CSVファイルのインポート(csv2sqlite.php)<br />
<blockquote><br />
&lt;?php<br />
if(!($_POST['filename'])){<br />
	$mode=&quot;input&quot;;<br />
	$title =&quot;入力モード&quot;;<br />
	$msg=&quot;下のファイル名、テーブル名の欄に入力して下さい。&quot;;<br />
}elseif(!(file_exists($_POST['filename']))){<br />
	$mode=&quot;error&quot;;<br />
	$title=&quot;確認して下さい。&quot;;<br />
	$msg=&quot;この名前のファイルは見つかりませんでした。&lt;br&gt;&quot;;<br />
}elseif(!(file_exists($_POST['dbname']))){<br />
	$mode=&quot;error&quot;;<br />
	$title=&quot;確認して下さい。&quot;;<br />
	$msg=&quot;この名前のデータベースは見つかりませんでした。&lt;br&gt;&quot;;<br />
}else{<br />
	$db=sqlite_open($_POST['dbname']);<br />
	$query=&quot;SELECT tbl_name FROM sqlite_master WHERE tbl_name ='&quot;.$_POST['tablename'].&quot;'&quot;;<br />
	$result=sqlite_query($db,$query);<br />
	$rows = sqlite_num_rows($result);<br />
	if($rows==0){<br />
		$mode=&quot;error&quot;;<br />
		$title=&quot;確認して下さい。&quot;;<br />
		$msg=&quot;この名前のテーブルは見つかりませんでした。&lt;br&gt;&quot;;<br />
		}else{<br />
		$mode=&quot;checked&quot;;<br />
		$title=&quot;チェックモード&quot;;<br />
		$msg=&quot;入力先のテーブルのフィールドとCSVファイルの1行目は、次のように対応します。&quot;;<br />
		$msg.=&quot;よろしければ「insert」ボタンをクリックして下さい。&quot;;<br />
		}<br />
}<br />
if($_POST['regist']){<br />
	$mode=&quot;insert&quot;;<br />
	$title =&quot;CSVデータ入力モード&quot;;<br />
	$msg=&quot;テーブルにデータをINSERTしました。&quot;;<br />
	}<br />
?&gt;<br />
<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=Shift_JIS&quot;&gt;<br />
&lt;meta http-equiv=&quot;Pragma&quot; content=&quot;no-cache&quot;&gt;<br />
&lt;title&gt;CSVファイルをSQLiteテーブルに&lt;/title&gt;<br />
&lt;/head&gt;<br />
<br />
&lt;body&gt;<br />
&lt;h1&gt;&lt;?= $title ?&gt;&lt;/h1&gt;<br />
&lt;p&gt;&lt;?= $msg ?&gt;&lt;/p&gt;<br />
&lt;form method='post' action=&quot;&lt;?= $_SERVER[PHP_SELF] ?&gt;&quot;&gt;<br />
ＣＳＶファイル名：&lt;input type='text' name='filename' value=&quot;&lt;?= $_POST['filename'] ?&gt;&quot;&gt;&lt;br&gt;<br />
データベース名：&lt;input type='text' name='dbname' value=&quot;&lt;?= $_POST['dbname'] ?&gt;&quot;&gt;&lt;br&gt;<br />
入力先テーブル名：&lt;input type='text' name='tablename' value=&quot;&lt;?= $_POST['tablename'] ?&gt;&quot;&gt;&lt;br&gt;<br />
&lt;?php<br />
if($mode==&quot;input&quot;||$mode==&quot;checked&quot;||$mode==&quot;error&quot;){<br />
	echo &quot;&lt;input type='submit' name='check' value='check'&gt;&quot;;<br />
	}<br />
if($mode==&quot;checked&quot;){<br />
	echo &quot;&lt;input type='submit' name='regist' value='insert'&gt;&quot;;<br />
	}<br />
?&gt;<br />
&lt;/form&gt;<br />
<br />
&lt;?php<br />
if($mode==&quot;checked&quot;){<br />
$query=&quot;SELECT * FROM &quot;.$_POST['tablename'];<br />
$result=sqlite_query($db,$query);<br />
$fields = sqlite_num_fields($result);<br />
echo &quot;&lt;table&gt;&lt;tr&gt;&quot;;<br />
for($i=0;$i&lt;$fields;$i++){<br />
	$field_name=sqlite_field_name($result,$i);<br />
	echo &quot;&lt;th style='border:#003 solid 1px;'&gt;&quot;.$field_name.&quot;&lt;/th&gt;&quot;;<br />
	}<br />
	echo &quot;&lt;/tr&gt;&quot;;<br />
$fp = fopen ($_POST['filename'],&quot;r&quot;);<br />
$data = fgetcsv ($fp, 1000, &quot;,&quot;);<br />
$fields = count($data);<br />
echo &quot;&lt;tr&gt;&quot;;<br />
for($i=0;$i&lt;$fields;$i++){<br />
	echo &quot;&lt;td style='border:#003 solid 1px;'&gt;&quot;.$data[$i].&quot;&lt;/td&gt;&quot;;<br />
	}<br />
echo &quot;&lt;/tr&gt;&lt;/table&gt;&quot;;<br />
sqlite_close($db);<br />
fclose ($fp);<br />
}<br />
?&gt;<br />
<br />
&lt;?php<br />
if($mode==&quot;insert&quot;){<br />
$fp = fopen ($_POST['filename'],&quot;r&quot;);<br />
echo &quot;&lt;table&gt;&quot;;<br />
while($data = fgetcsv ($fp, 1000, &quot;,&quot;)){<br />
$value_list=&quot;&quot;;<br />
echo &quot;&lt;tr&gt;&quot;;<br />
$fields = count($data);<br />
for($i=0;$i&lt;$fields;$i++){<br />
	$value_list.=&quot;'&quot;.$data[$i].&quot;',&quot;;<br />
	echo &quot;&lt;td style='border:#003 solid 1px;'&gt;&quot;.$data[$i].&quot;&lt;/td&gt;&quot;;<br />
	}<br />
$value_list=substr($value_list,0,-1);<br />
$query=&quot;INSERT INTO &quot;.$_POST['tablename'].&quot; VALUES(&quot;.$value_list.&quot;)&quot;;<br />
$result=sqlite_query($db,$query);<br />
echo &quot;&lt;/tr&gt;&quot;;<br />
}<br />
echo &quot;&lt;/table&gt;&quot;;<br />
fclose ($fp);<br />
}<br />
?&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
</blockquote><br />
<br />
次回は、SQLiteデータベースのテーブルからCSVファイルをエクスポートする方法について考えたいと思います。<br />
]]>
    </description>
    <category>PHP + SQLite</category>
    <link>https://banayan.blog.shinobi.jp/php%20-%20sqlite/php-sqlite%20csv%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88</link>
    <pubDate>Tue, 23 May 2006 15:08:39 GMT</pubDate>
    <guid isPermaLink="false">banayan.blog.shinobi.jp://entry/69</guid>
  </item>

    </channel>
</rss>