注意 拡張子:txtvbswsfjsphpjavahtmlutf8sjis require_once で、外部の WEB にアクセスしてDBクラスを実装していますが、 PHP5 で allow_url_include が Off になっている場合はエラーになります。 その場合の記述方法は、ページ最後にあります ※ http://lightbox.in.coocan.jp/gen/db.txt をダウンロードして使用するのも良いでしょう ● DB に保存されているキャラクタセットと PHP のキャラクタセットが異なる場合 ▼ EUC-JP で記述 拡張子:txtvbswsfjsphpjavahtmlutf8sjis <?php header( "Content-Type: text/html; Charset=EUC-JP" ); header( "Expires: Wed, 31 May 2000 14:59:58 GMT" ); require_once( "http://lightbox.in.coocan.jp/gen/db.txt"); $conf_db_type = 1; $SQL = new DB( "サーバー","DB","ユーザー","パスワード" ); $SQL->Debug = true; mysql_set_charset("eucjpms", $SQL->Connect); $Query = "select * from `社員マスタ`"; $Column = $SQL->QueryEx( $Query ); print "<pre>"; while( $Column ) { print "<HR>"; print_r($Column); $Column = $SQL->QueryEx( ); } print "</pre>"; $SQL->Close(); ?> ▼ SHIFT_JIS で記述 拡張子:txtvbswsfjsphpjavahtmlutf8sjis <?php header( "Content-Type: text/html; Charset=SHIFT_JIS" ); header( "Expires: Wed, 31 May 2000 14:59:58 GMT" ); require_once( "http://lightbox.in.coocan.jp/gen/db.txt"); $conf_db_type = 1; $SQL = new DB( "サーバー","DB","ユーザー","パスワード" ); $SQL->Debug = true; mysql_set_charset("cp932", $SQL->Connect); $Query = "select * from `社員マスタ`"; $Column = $SQL->QueryEx( $Query ); print "<pre>"; while( $Column ) { print "<HR>"; print_r($Column); $Column = $SQL->QueryEx( ); } print "</pre>"; $SQL->Close(); ?> UTF-8 は、MySQLは、utf8、PHPの保存は utf-8n なので注意 ▼UTF-8N で記述 拡張子:txtvbswsfjsphpjavahtmlutf8sjis <?php header( "Content-Type: text/html; Charset=utf-8" ); header( "Expires: Wed, 31 May 2000 14:59:58 GMT" ); require_once( "http://lightbox.in.coocan.jp/gen/db.txt"); $conf_db_type = 1; $SQL = new DB( "サーバー","DB","ユーザー","パスワード" ); $SQL->Debug = true; mysql_set_charset("utf8", $SQL->Connect); $Query = "select * from `社員マスタ`"; $Column = $SQL->QueryEx( $Query ); print "<pre>"; while( $Column ) { print "<HR>"; print_r($Column); $Column = $SQL->QueryEx( ); } print "</pre>"; $SQL->Close(); ?> PHP5 で allow_url_include が Off になっている場合 ▼ utf-8n で記述 / DBも utf-8 拡張子:txtvbswsfjsphpjavahtmlutf8sjis <?php header( "Content-Type: text/html; Charset=utf-8" ); header( "Expires: Wed, 31 May 2000 14:59:58 GMT" ); function inc( $path ) { $inc = @file( $path ); array_shift($inc); array_pop($inc); $GLOBALS['inc_eval_txt'] = implode( "", $inc ); eval($GLOBALS['inc_eval_txt']); } inc( "http://lightbox.in.coocan.jp/gen/db.txt"); $conf_db_type = 1; $SQL = new DB( "サーバー","DB","ユーザー","パスワード" ); $SQL->Debug = true; $Query = "select * from `社員マスタ`"; $Column = $SQL->QueryEx( $Query ); print "<pre>"; while( $Column ) { print "<HR>"; print_r($Column); $Column = $SQL->QueryEx( ); } print "</pre>"; $SQL->Close(); ?>
require_once で、外部の WEB にアクセスしてDBクラスを実装していますが、 PHP5 で allow_url_include が Off になっている場合はエラーになります。 その場合の記述方法は、ページ最後にあります ※ http://lightbox.in.coocan.jp/gen/db.txt をダウンロードして使用するのも良いでしょう
<?php header( "Content-Type: text/html; Charset=EUC-JP" ); header( "Expires: Wed, 31 May 2000 14:59:58 GMT" ); require_once( "http://lightbox.in.coocan.jp/gen/db.txt"); $conf_db_type = 1; $SQL = new DB( "サーバー","DB","ユーザー","パスワード" ); $SQL->Debug = true; mysql_set_charset("eucjpms", $SQL->Connect); $Query = "select * from `社員マスタ`"; $Column = $SQL->QueryEx( $Query ); print "<pre>"; while( $Column ) { print "<HR>"; print_r($Column); $Column = $SQL->QueryEx( ); } print "</pre>"; $SQL->Close(); ?>
<?php header( "Content-Type: text/html; Charset=SHIFT_JIS" ); header( "Expires: Wed, 31 May 2000 14:59:58 GMT" ); require_once( "http://lightbox.in.coocan.jp/gen/db.txt"); $conf_db_type = 1; $SQL = new DB( "サーバー","DB","ユーザー","パスワード" ); $SQL->Debug = true; mysql_set_charset("cp932", $SQL->Connect); $Query = "select * from `社員マスタ`"; $Column = $SQL->QueryEx( $Query ); print "<pre>"; while( $Column ) { print "<HR>"; print_r($Column); $Column = $SQL->QueryEx( ); } print "</pre>"; $SQL->Close(); ?>
<?php header( "Content-Type: text/html; Charset=utf-8" ); header( "Expires: Wed, 31 May 2000 14:59:58 GMT" ); require_once( "http://lightbox.in.coocan.jp/gen/db.txt"); $conf_db_type = 1; $SQL = new DB( "サーバー","DB","ユーザー","パスワード" ); $SQL->Debug = true; mysql_set_charset("utf8", $SQL->Connect); $Query = "select * from `社員マスタ`"; $Column = $SQL->QueryEx( $Query ); print "<pre>"; while( $Column ) { print "<HR>"; print_r($Column); $Column = $SQL->QueryEx( ); } print "</pre>"; $SQL->Close(); ?>
<?php header( "Content-Type: text/html; Charset=utf-8" ); header( "Expires: Wed, 31 May 2000 14:59:58 GMT" ); function inc( $path ) { $inc = @file( $path ); array_shift($inc); array_pop($inc); $GLOBALS['inc_eval_txt'] = implode( "", $inc ); eval($GLOBALS['inc_eval_txt']); } inc( "http://lightbox.in.coocan.jp/gen/db.txt"); $conf_db_type = 1; $SQL = new DB( "サーバー","DB","ユーザー","パスワード" ); $SQL->Debug = true; $Query = "select * from `社員マスタ`"; $Column = $SQL->QueryEx( $Query ); print "<pre>"; while( $Column ) { print "<HR>"; print_r($Column); $Column = $SQL->QueryEx( ); } print "</pre>"; $SQL->Close(); ?>
WEB アプリケーションでは、表示部分のデザインをプログラマ以外がする事が多いので、 必然的に分業する為の工夫が必要になります 拡張子:txtvbswsfjsphpjavahtmlutf8sjis <? header( "Content-Type: text/html; Charset=EUC-JP" ); header( "Expires: Wed, 31 May 2000 14:59:58 GMT" ); require_once( "http://lightbox.in.coocan.jp/gen/db.txt"); $conf_db_type = 1; $SQL = new DB( "サーバー","DB","ユーザー","パスワード" ); $SQL->Debug = true; $Query = "select * from `社員マスタ`"; $Column = $SQL->QueryEx( $Query ); $OUT_DATA = ""; while( $Column ) { $OUT_DATA .= "<HR>"; $OUT_DATA .= print_r( $Column, true ); $Column = $SQL->QueryEx( ); } $SQL->Close(); ?> <HTML> <HEAD> <META http-equiv="Content-type" content="text/html; charset=euc-jp" /> <TITLE>HTML雛形</TITLE> <STYLE type="text/css"> * { font-size: 12px; } </STYLE> </SCRIPT> </HEAD> <BODY> <PRE> <?= $OUT_DATA ?> </PRE> </BODY> </HTML> 拡張子:txtvbswsfjsphpjavahtmlutf8sjis ※ HTML 部分のスケルトンは http://winofsql.jp/php/build_html.php より取得して下さい ※ WEB アプリケーションの仕様上、通常は header 関数を実行する前に文字列を出力しないで下さい ( <? の前に空行等を入れない事 ) ※ print_r 関数は、第二引数に true を指定すると、結果を文字列として返します( ブラウザへ送信されない ) ( 同様の機能を持つ var_dump 関数との大きな違いです ) ※ スタイルシートの * は、全称セレクタ と言います。全てに対して有効になるので、テスト時に使うと都合が良い場合が多いです
<? header( "Content-Type: text/html; Charset=EUC-JP" ); header( "Expires: Wed, 31 May 2000 14:59:58 GMT" ); require_once( "http://lightbox.in.coocan.jp/gen/db.txt"); $conf_db_type = 1; $SQL = new DB( "サーバー","DB","ユーザー","パスワード" ); $SQL->Debug = true; $Query = "select * from `社員マスタ`"; $Column = $SQL->QueryEx( $Query ); $OUT_DATA = ""; while( $Column ) { $OUT_DATA .= "<HR>"; $OUT_DATA .= print_r( $Column, true ); $Column = $SQL->QueryEx( ); } $SQL->Close(); ?> <HTML> <HEAD> <META http-equiv="Content-type" content="text/html; charset=euc-jp" /> <TITLE>HTML雛形</TITLE> <STYLE type="text/css"> * { font-size: 12px; } </STYLE> </SCRIPT> </HEAD> <BODY> <PRE> <?= $OUT_DATA ?> </PRE> </BODY> </HTML>
※ HTML 部分のスケルトンは http://winofsql.jp/php/build_html.php より取得して下さい ※ WEB アプリケーションの仕様上、通常は header 関数を実行する前に文字列を出力しないで下さい ( <? の前に空行等を入れない事 ) ※ print_r 関数は、第二引数に true を指定すると、結果を文字列として返します( ブラウザへ送信されない ) ( 同様の機能を持つ var_dump 関数との大きな違いです ) ※ スタイルシートの * は、全称セレクタ と言います。全てに対して有効になるので、テスト時に使うと都合が良い場合が多いです
拡張子:txtvbswsfjsphpjavahtmlutf8sjis CREATE TABLE `acounter` ( `PAGE_NAME` varchar(8) NOT NULL default '', `PAGE_COUNT` int(11) default NULL, PRIMARY KEY (`PAGE_NAME`) ) ページ(PAGE_NAME)毎に行を使用してアクセス回数(PAGE_COUNT)を更新します ※ この段階では、テーブルの行を事前に作成して、PAGE_COUNT を整数で初期化する必要があります 拡張子:txtvbswsfjsphpjavahtmlutf8sjis <? header( "Content-Type: text/html; Charset=EUC-JP" ); header( "Expires: Wed, 31 May 2000 14:59:58 GMT" ); require_once( "http://lightbox.in.coocan.jp/gen/db.txt"); $conf_db_type = 1; $SQL = new DB( "サーバー","DB","ユーザー","パスワード" ); $SQL->Debug = true; $Query = "update acounter set PAGE_COUNT = PAGE_COUNT + 1"; $Query .= " where PAGE_NAME = 'R205'"; $SQL->Execute( $Query ); $Query = "select * from acounter"; $Query .= " where PAGE_NAME = 'R205'"; $Column = $SQL->QueryEx( $Query ); $OUT_DATA = $Column["PAGE_COUNT"]; $SQL->Close(); ?> <HTML> <HEAD> <META http-equiv="Content-type" content="text/html; charset=euc-jp" /> <TITLE>HTML雛形</TITLE> <STYLE type="text/css"> * { font-size: 12px; } </STYLE> </SCRIPT> </HEAD> <BODY> <PRE> <?= $OUT_DATA ?> </PRE> </BODY> </HTML> 以下では、ページに対象とする行が存在しない場合に自動的に行 を insert します 拡張子:txtvbswsfjsphpjavahtmlutf8sjis <? header( "Content-Type: text/html; Charset=EUC-JP" ); header( "Expires: Wed, 31 May 2000 14:59:58 GMT" ); require_once( "http://lightbox.in.coocan.jp/gen/db.txt"); $conf_db_type = 1; $SQL = new DB( "サーバー","DB","ユーザー","パスワード" ); $SQL->Debug = true; $Query = "update acounter set PAGE_COUNT = PAGE_COUNT + 1"; $Query .= " where PAGE_NAME = 'NEW_PAGE'"; $SQL->Execute( $Query ); $ret = mysql_affected_rows( $SQL->Connect ); if ( $ret == 0 ) { $Query = "insert into acounter (PAGE_NAME,PAGE_COUNT)"; $Query .= " values('NEW_PAGE',1)"; $SQL->Execute( $Query ); } $Query = "select * from acounter"; $Query .= " where PAGE_NAME = 'NEW_PAGE'"; $Column = $SQL->QueryEx( $Query ); $OUT_DATA = $Column["PAGE_COUNT"]; $SQL->Close(); ?> <HTML> <HEAD> <META http-equiv="Content-type" content="text/html; charset=euc-jp" /> <TITLE>HTML雛形</TITLE> <STYLE type="text/css"> * { font-size: 12px; } </STYLE> </SCRIPT> </HEAD> <BODY> <PRE> <?= $OUT_DATA ?> </PRE> </BODY> </HTML>
CREATE TABLE `acounter` ( `PAGE_NAME` varchar(8) NOT NULL default '', `PAGE_COUNT` int(11) default NULL, PRIMARY KEY (`PAGE_NAME`) )
<? header( "Content-Type: text/html; Charset=EUC-JP" ); header( "Expires: Wed, 31 May 2000 14:59:58 GMT" ); require_once( "http://lightbox.in.coocan.jp/gen/db.txt"); $conf_db_type = 1; $SQL = new DB( "サーバー","DB","ユーザー","パスワード" ); $SQL->Debug = true; $Query = "update acounter set PAGE_COUNT = PAGE_COUNT + 1"; $Query .= " where PAGE_NAME = 'R205'"; $SQL->Execute( $Query ); $Query = "select * from acounter"; $Query .= " where PAGE_NAME = 'R205'"; $Column = $SQL->QueryEx( $Query ); $OUT_DATA = $Column["PAGE_COUNT"]; $SQL->Close(); ?> <HTML> <HEAD> <META http-equiv="Content-type" content="text/html; charset=euc-jp" /> <TITLE>HTML雛形</TITLE> <STYLE type="text/css"> * { font-size: 12px; } </STYLE> </SCRIPT> </HEAD> <BODY> <PRE> <?= $OUT_DATA ?> </PRE> </BODY> </HTML>
<? header( "Content-Type: text/html; Charset=EUC-JP" ); header( "Expires: Wed, 31 May 2000 14:59:58 GMT" ); require_once( "http://lightbox.in.coocan.jp/gen/db.txt"); $conf_db_type = 1; $SQL = new DB( "サーバー","DB","ユーザー","パスワード" ); $SQL->Debug = true; $Query = "update acounter set PAGE_COUNT = PAGE_COUNT + 1"; $Query .= " where PAGE_NAME = 'NEW_PAGE'"; $SQL->Execute( $Query ); $ret = mysql_affected_rows( $SQL->Connect ); if ( $ret == 0 ) { $Query = "insert into acounter (PAGE_NAME,PAGE_COUNT)"; $Query .= " values('NEW_PAGE',1)"; $SQL->Execute( $Query ); } $Query = "select * from acounter"; $Query .= " where PAGE_NAME = 'NEW_PAGE'"; $Column = $SQL->QueryEx( $Query ); $OUT_DATA = $Column["PAGE_COUNT"]; $SQL->Close(); ?> <HTML> <HEAD> <META http-equiv="Content-type" content="text/html; charset=euc-jp" /> <TITLE>HTML雛形</TITLE> <STYLE type="text/css"> * { font-size: 12px; } </STYLE> </SCRIPT> </HEAD> <BODY> <PRE> <?= $OUT_DATA ?> </PRE> </BODY> </HTML>
拡張子:txtvbswsfjsphpjavahtmlutf8sjis FORM タグはサーバーへデータを送信する為に必要です。 FORM タグ内の INPUT、SELECT、TEXTAREA タグは、 サーバーへデータを送る為のコンテンツとなります。 特に、以下は送信用のボタンでいくつでも書く事ができますが、 一度の送信で使用されるのは一つのボタンのみです <INPUT type="submit" name="send" value="送信" > name は自由に設定できますが、管理上一つに統一し、 value の内容でどのボタンが押されたかをチェックしたほうが、 ソースコードを読みやすくなります。 INPUT、SELECT、TEXTAREA の name に指定された文字列が、 サーバ側で参照する為のキーワードとなります。 name="counter" としたならば、その内容はここでは $_GET["counter"] で参照される事となります。 $_GET は、スーパーグローバル変数と呼ばれ、PHP のいかなるスコープでも有効な システム変数(連想配列) の一つであり、FORM タグの method 属性に指定した文字列によって 使用可能になります。 method 属性 には、"GET" または "POST" が指定可能で、 それぞれに対応して $_GET と $_POST が存在します。 GET コマンドは、URL の ? 以降で指定される文字列で送られる方式で、最大文字列は無制限ではありません。 しかし、ページを更新した時にブラウザ側でダイアログが表示されずに済むので大量のデータを送信する必要の 無い場合はデフォルトとして使用すると良いでしょう( method 属性を省略すると "GET" になります ) ダブルクォーテーションの中に記述されている {$_GET["counter"]} は、複雑な変数を 文字列の中で展開する為の記述方法で、{} で配列やオブジェクトのプロパティを囲む事に よって、PHP に対して変数である事を明示する事ができます。 単純な変数は {} が必要ありませんが、置き換えする変数名の終わりを明示できるので この記述方法を利用する習慣をつけておきましょう。 拡張子:txtvbswsfjsphpjavahtmlutf8sjis <? # ********************************************************** # 初期処理 # ********************************************************** header( "Content-Type: text/html; Charset=EUC-JP" ); header( "Expires: Wed, 31 May 2000 14:59:58 GMT" ); require_once( "http://lightbox.in.coocan.jp/gen/db.txt"); $conf_db_type = 1; $SQL = new DB( "サーバー","DB","ユーザー","パスワード" ); $SQL->Debug = true; # ********************************************************** # 主処理 # ********************************************************** $Query = "update acounter set PAGE_COUNT = PAGE_COUNT + 1"; $Query .= " where PAGE_NAME = 'NEW_PAGE'"; $SQL->Execute( $Query ); $ret = mysql_affected_rows( $SQL->Connect ); if ( $ret == 0 ) { $Query = "insert into acounter (PAGE_NAME,PAGE_COUNT)"; $Query .= " values('NEW_PAGE',1)"; $SQL->Execute( $Query ); } $Query = "select * from acounter"; $Query .= " where PAGE_NAME = 'NEW_PAGE'"; $Column = $SQL->QueryEx( $Query ); $OUT_DATA = $Column["PAGE_COUNT"]; if ( $_GET['send'] == "送信" ) { $Query = "update acounter set PAGE_COUNT = {$_GET["counter"]}"; $Query .= " where PAGE_NAME = 'NEW_PAGE'"; $SQL->Execute( $Query ); } $SQL->Close(); ?> <!--******************************************************** 画面定義 **********************************************************--> <HTML> <HEAD> <META http-equiv="Content-type" content="text/html; charset=euc-jp" /> <TITLE>HTML雛形</TITLE> <STYLE type="text/css"> * { font-size: 12px; } .column { border-style:solid; border-width:1px; border-color:#000000; padding: 4px; } </STYLE> </SCRIPT> </HEAD> <BODY> <PRE> <?= $OUT_DATA ?> </PRE> <FORM name="frm" method="GET" > <INPUT type="submit" name="send" value="送信" > <TABLE border=1 style=' border-collapse:collapse; border-style:solid; border-width:1px; border-color:#000000; width:690px; ' > <TR> <TD class="column">アクセスカウンタの初期化</TD> <TD class="column"> <INPUT type="text" name="counter" style='width:400px;' value="<?= $_GET["counter"] ?>" > </TD> </TR> <TR> <TD class="column">デバッグ用入力データの表示</TD> <TD class="column"> <PRE> <? print_r($_GET); ?> </PRE> </TD> </TR> </TABLE> </FORM> </BODY> </HTML>
FORM タグはサーバーへデータを送信する為に必要です。 FORM タグ内の INPUT、SELECT、TEXTAREA タグは、 サーバーへデータを送る為のコンテンツとなります。 特に、以下は送信用のボタンでいくつでも書く事ができますが、 一度の送信で使用されるのは一つのボタンのみです <INPUT type="submit" name="send" value="送信" > name は自由に設定できますが、管理上一つに統一し、 value の内容でどのボタンが押されたかをチェックしたほうが、 ソースコードを読みやすくなります。 INPUT、SELECT、TEXTAREA の name に指定された文字列が、 サーバ側で参照する為のキーワードとなります。 name="counter" としたならば、その内容はここでは $_GET["counter"] で参照される事となります。 $_GET は、スーパーグローバル変数と呼ばれ、PHP のいかなるスコープでも有効な システム変数(連想配列) の一つであり、FORM タグの method 属性に指定した文字列によって 使用可能になります。 method 属性 には、"GET" または "POST" が指定可能で、 それぞれに対応して $_GET と $_POST が存在します。 GET コマンドは、URL の ? 以降で指定される文字列で送られる方式で、最大文字列は無制限ではありません。 しかし、ページを更新した時にブラウザ側でダイアログが表示されずに済むので大量のデータを送信する必要の 無い場合はデフォルトとして使用すると良いでしょう( method 属性を省略すると "GET" になります ) ダブルクォーテーションの中に記述されている {$_GET["counter"]} は、複雑な変数を 文字列の中で展開する為の記述方法で、{} で配列やオブジェクトのプロパティを囲む事に よって、PHP に対して変数である事を明示する事ができます。 単純な変数は {} が必要ありませんが、置き換えする変数名の終わりを明示できるので この記述方法を利用する習慣をつけておきましょう。
<? # ********************************************************** # 初期処理 # ********************************************************** header( "Content-Type: text/html; Charset=EUC-JP" ); header( "Expires: Wed, 31 May 2000 14:59:58 GMT" ); require_once( "http://lightbox.in.coocan.jp/gen/db.txt"); $conf_db_type = 1; $SQL = new DB( "サーバー","DB","ユーザー","パスワード" ); $SQL->Debug = true; # ********************************************************** # 主処理 # ********************************************************** $Query = "update acounter set PAGE_COUNT = PAGE_COUNT + 1"; $Query .= " where PAGE_NAME = 'NEW_PAGE'"; $SQL->Execute( $Query ); $ret = mysql_affected_rows( $SQL->Connect ); if ( $ret == 0 ) { $Query = "insert into acounter (PAGE_NAME,PAGE_COUNT)"; $Query .= " values('NEW_PAGE',1)"; $SQL->Execute( $Query ); } $Query = "select * from acounter"; $Query .= " where PAGE_NAME = 'NEW_PAGE'"; $Column = $SQL->QueryEx( $Query ); $OUT_DATA = $Column["PAGE_COUNT"]; if ( $_GET['send'] == "送信" ) { $Query = "update acounter set PAGE_COUNT = {$_GET["counter"]}"; $Query .= " where PAGE_NAME = 'NEW_PAGE'"; $SQL->Execute( $Query ); } $SQL->Close(); ?> <!--******************************************************** 画面定義 **********************************************************--> <HTML> <HEAD> <META http-equiv="Content-type" content="text/html; charset=euc-jp" /> <TITLE>HTML雛形</TITLE> <STYLE type="text/css"> * { font-size: 12px; } .column { border-style:solid; border-width:1px; border-color:#000000; padding: 4px; } </STYLE> </SCRIPT> </HEAD> <BODY> <PRE> <?= $OUT_DATA ?> </PRE> <FORM name="frm" method="GET" > <INPUT type="submit" name="send" value="送信" > <TABLE border=1 style=' border-collapse:collapse; border-style:solid; border-width:1px; border-color:#000000; width:690px; ' > <TR> <TD class="column">アクセスカウンタの初期化</TD> <TD class="column"> <INPUT type="text" name="counter" style='width:400px;' value="<?= $_GET["counter"] ?>" > </TD> </TR> <TR> <TD class="column">デバッグ用入力データの表示</TD> <TD class="column"> <PRE> <? print_r($_GET); ?> </PRE> </TD> </TR> </TABLE> </FORM> </BODY> </HTML>
拡張子:txtvbswsfjsphpjavahtmlutf8sjis MVC は、MODEL、VIEW、CONTROL を意味する WEB アプリケーションを作成する 時の基本的な考え方です。 global は、ブロック内で最も上位で定義された変数を参照する方法です。 他の言語では、何もしなければグローバルを参照しますが、 PHP では、ローカルを参照するので注意が必要です control.php 拡張子:txtvbswsfjsphpjavahtmlutf8sjis <? # ********************************************************** # 初期処理 # ********************************************************** header( "Content-Type: text/html; Charset=EUC-JP" ); header( "Expires: Wed, 31 May 2000 14:59:58 GMT" ); require_once( "model.php"); require_once( "http://lightbox.in.coocan.jp/gen/db.txt"); $conf_db_type = 1; $SQL = new DB( "サーバー","DB","ユーザー","パスワード" ); $SQL->Debug = true; # ********************************************************** # 主処理 # ********************************************************** counter_action(); if ( $_GET['send'] == "送信" ) { counter_update(); } # ********************************************************** # 画面定義 # ********************************************************** require_once( "view.php"); $SQL->Close(); ?> model.php 拡張子:txtvbswsfjsphpjavahtmlutf8sjis <? # ********************************************************** # アクセスカウンタの表示データの取得処理 # ********************************************************** function counter_action() { global $SQL,$OUT_DATA; $Query = "update acounter set PAGE_COUNT = PAGE_COUNT + 1"; $Query .= " where PAGE_NAME = 'NEW_PAGE'"; $SQL->Execute( $Query ); $ret = mysql_affected_rows( $SQL->Connect ); if ( $ret == 0 ) { $Query = "insert into acounter (PAGE_NAME,PAGE_COUNT)"; $Query .= " values('NEW_PAGE',1)"; $SQL->Execute( $Query ); } $Query = "select * from acounter"; $Query .= " where PAGE_NAME = 'NEW_PAGE'"; $Column = $SQL->QueryEx( $Query ); $OUT_DATA = $Column["PAGE_COUNT"]; } # ********************************************************** # アクセスカウンタの表示データの更新処理 # ********************************************************** function counter_update() { global $SQL; $Query = "update acounter set PAGE_COUNT = {$_GET["counter"]}"; $Query .= " where PAGE_NAME = 'NEW_PAGE'"; $SQL->Execute( $Query ); } ?> view.php
MVC は、MODEL、VIEW、CONTROL を意味する WEB アプリケーションを作成する 時の基本的な考え方です。 global は、ブロック内で最も上位で定義された変数を参照する方法です。 他の言語では、何もしなければグローバルを参照しますが、 PHP では、ローカルを参照するので注意が必要です
<? # ********************************************************** # 初期処理 # ********************************************************** header( "Content-Type: text/html; Charset=EUC-JP" ); header( "Expires: Wed, 31 May 2000 14:59:58 GMT" ); require_once( "model.php"); require_once( "http://lightbox.in.coocan.jp/gen/db.txt"); $conf_db_type = 1; $SQL = new DB( "サーバー","DB","ユーザー","パスワード" ); $SQL->Debug = true; # ********************************************************** # 主処理 # ********************************************************** counter_action(); if ( $_GET['send'] == "送信" ) { counter_update(); } # ********************************************************** # 画面定義 # ********************************************************** require_once( "view.php"); $SQL->Close(); ?>
<? # ********************************************************** # アクセスカウンタの表示データの取得処理 # ********************************************************** function counter_action() { global $SQL,$OUT_DATA; $Query = "update acounter set PAGE_COUNT = PAGE_COUNT + 1"; $Query .= " where PAGE_NAME = 'NEW_PAGE'"; $SQL->Execute( $Query ); $ret = mysql_affected_rows( $SQL->Connect ); if ( $ret == 0 ) { $Query = "insert into acounter (PAGE_NAME,PAGE_COUNT)"; $Query .= " values('NEW_PAGE',1)"; $SQL->Execute( $Query ); } $Query = "select * from acounter"; $Query .= " where PAGE_NAME = 'NEW_PAGE'"; $Column = $SQL->QueryEx( $Query ); $OUT_DATA = $Column["PAGE_COUNT"]; } # ********************************************************** # アクセスカウンタの表示データの更新処理 # ********************************************************** function counter_update() { global $SQL; $Query = "update acounter set PAGE_COUNT = {$_GET["counter"]}"; $Query .= " where PAGE_NAME = 'NEW_PAGE'"; $SQL->Execute( $Query ); } ?>
拡張子:txtvbswsfjsphpjavahtmlutf8sjis <!--******************************************************** 画面定義 **********************************************************--> <HTML> <HEAD> <META http-equiv="Content-type" content="text/html; charset=euc-jp" /> <TITLE>HTML雛形</TITLE> <STYLE type="text/css"> * { font-size: 12px; } .column { border-style:solid; border-width:1px; border-color:#000000; padding: 4px; } </STYLE> </SCRIPT> </HEAD> <BODY> <PRE> <?= $OUT_DATA ?> </PRE> <FORM name="frm" method="GET" > <INPUT type="submit" name="send" value="送信" > <TABLE border=1 style=' border-collapse:collapse; border-style:solid; border-width:1px; border-color:#000000; width:690px; ' > <TR> <TD class="column">アクセスカウンタの初期化</TD> <TD class="column"> <INPUT type="text" name="counter" style='width:400px;' value="<?= $_GET["counter"] ?>" > </TD> </TR> <TR> <TD class="column">デバッグ用入力データの表示</TD> <TD class="column"> <PRE> <? print_r($_GET); ?> </PRE> </TD> </TR> </TABLE> </FORM> </BODY> </HTML>
<!--******************************************************** 画面定義 **********************************************************--> <HTML> <HEAD> <META http-equiv="Content-type" content="text/html; charset=euc-jp" /> <TITLE>HTML雛形</TITLE> <STYLE type="text/css"> * { font-size: 12px; } .column { border-style:solid; border-width:1px; border-color:#000000; padding: 4px; } </STYLE> </SCRIPT> </HEAD> <BODY> <PRE> <?= $OUT_DATA ?> </PRE> <FORM name="frm" method="GET" > <INPUT type="submit" name="send" value="送信" > <TABLE border=1 style=' border-collapse:collapse; border-style:solid; border-width:1px; border-color:#000000; width:690px; ' > <TR> <TD class="column">アクセスカウンタの初期化</TD> <TD class="column"> <INPUT type="text" name="counter" style='width:400px;' value="<?= $_GET["counter"] ?>" > </TD> </TR> <TR> <TD class="column">デバッグ用入力データの表示</TD> <TD class="column"> <PRE> <? print_r($_GET); ?> </PRE> </TD> </TR> </TABLE> </FORM> </BODY> </HTML>