SQLの窓

2010年12月03日

PHP : グローバル変数の一覧表示(2) / 標準的なスーパーグローバルも表示して関数化

その場でちょっといろいろ見たい時に使えるかもしれません
// *********************************************************
// デバッグ用変数表示関数
// ※ 通常は引数を省略して使用します
// ※ 必要無い場合は、引数に -1 以外をセットします
// ※ $debug_test が 'Y' 以外の場合は常に実行されません
// *********************************************************
function debug_test($type = -1) {

	global $debug_test;

	if ( $debug_test != 'Y' ) {
		return;
	}

	if ( $type === -1 ) {
		// デバッグ用連想配列表示
		print "<hr>";
		print "<pre>";
	
		print "[\$_GET]\n";
		print_r( $_GET );
		print "\n";
	
		print "[\$_POST]\n";
		print_r( $_POST );
		print "\n";
	
		print "[\$_SESSION]\n";
		print_r( $_SESSION );
		print "\n";
	
		print "[グローバル変数]\n";
		// デバッグ用 スーパーグローバル以外のグローバル変数表示
		foreach( $GLOBALS as $Key => $Value  ) {
			if ( strstr( $Key, "_" ) === false ) {
				if ( $Key != 'Key' && $Key != 'Value' && $Key != 'GLOBALS' ) {
					if ( is_array( $Value ) ) {
						print "$Key =>\n";
						print_r($Value);
					}
					else {
						print "$Key => $Value\n";
					}
				}
			}
		}
	
		print "</pre>";
	}

}



posted by lightbox at 23:02 | 関数 | このブログの読者になる | 更新情報をチェックする

2010年11月09日

PHP : グローバル変数の一覧表示

厳密ではありませんが、変数名に _ (アンダーバー) が含まれない変数
の内容を変数名と共に表示します。
( $Key と $Value はワーク用なので省いています )
print "<pre>";
foreach( $GLOBALS as $Key => $Value  ) {
	if ( strstr( $Key, "_" ) === false ) {
		if ( $Key != 'Key' && $Key != 'Value' && $Key != 'GLOBALS' ) {
			if ( is_array( $Value ) ) {
				print "$Key =>\n";
				print_r($Value);
			}
			else {
				print "$Key => $Value\n";
			}
		}
	}
}
print "</pre>";

以下、MySQL アクセスでの使用例
<?
// 日本語設定
header( "Content-Type: text/html; Charset=utf-8" );
// キャッシュを使わない設定
header( "pragma: no-cache" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "Cache-control: no-cache" );

if ( substr(PHP_OS,0,3) == 'WIN' ) {
	if ( !extension_loaded( "mysql" ) ) {
		exit("php.ini で mysql のモジュールをロードして下さい");
	}
}

$Connect = null;
$Server = 'localhost';
$DbName = 'lightbox';
$User = 'root';
$Password = 'password';

$Connect = @mysql_connect( $Server, $User, $Password );
if ( !$Connect ) {
	print "接続エラーです";
	exit();
}
// DB選択
mysql_select_db( $DbName, $Connect );

// クエリ
$result = mysql_query("select * from 社員マスタ", $Connect);

// 行データ取得
$row[] = mysql_fetch_array($result);
$row[] = mysql_fetch_array($result);
$row[] = mysql_fetch_array($result);

// 接続解除
mysql_close($Connect);

print "<pre>";
foreach( $GLOBALS as $Key => $Value  ) {
	if ( strstr( $Key, "_" ) === false ) {
		if ( $Key != 'Key' && $Key != 'Value' && $Key != 'GLOBALS' ) {
			if ( is_array( $Value ) ) {
				print "$Key =>\n";
				print_r($Value);
			}
			else {
				print "$Key => $Value\n";
			}
		}
	}
}
print "</pre>";

?>
<!-- 日本語設定 -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />



posted by lightbox at 10:58 | 処理 | このブログの読者になる | 更新情報をチェックする

2010年11月08日

アプリケーションとして、PHP を理解する為の簡易掲示板(サンプル)

3つの部品から成り立っていますが、sbd.php が処理の殆どです。

sbd.php :学習用 -- 簡易掲示板

model.php :学習用 -- 簡易掲示板

メインの sbd.php を可能な限りシンプルに効率良く表現する為に、2次的な処理
要素( 全体の大きな動きとは直接関係しない )のものを取り出しています。
<?
// *********************************************************
// 引数の文字列をカンマで分解して、<FONT color=blue>「名前」</FONT>で管理する為の
// データを追加する
// *********************************************************
function explode_by_name( $value ) {

	$ret = explode( ",", $value );

	$ret['タイトル'] = $ret[0];

	$ret['氏名'] = $ret[1];

	$ret['投稿日付'] = $ret[2];

	$ret['本文'] = $ret[3];

	return $ret;

}

// *********************************************************
// 入力チェック
// ※ 問題がある場合は、エラーメッセージを$_GET['error']
// ※ に追加セットして、false を返す
// *********************************************************
function check_input( ) {

	if( trim( $_GET['subject'], "\t  " ) == "" ) {
		$_GET['error'] .= "タイトルを入力して下さい<br>";
	}
	if( trim( $_GET['name'], "\t  " ) == "" ) {
		$_GET['error'] .= "氏名を入力して下さい<br>";
	}
	if( trim( $_GET['main'], "\t  " ) == "" ) {
		$_GET['error'] .= "本文を入力して下さい<br>";
	}

	// $_GET['error'] に何かが入っているのでエラー
	if ( $_GET['error'] != "" ) {
		return false;
	}

	// $_GET['error'] が空なのでエラー無し
	return true;

}
?>

css.php :学習用 -- 簡易掲示板

css.php は、php にする必要はありませんが、学習中はブラウザのソースを見た時に同時に
css も読めるほうがいいのと、css も動的に変更できると言う前提での実装方法です。


posted by lightbox at 16:28 | 処理 | このブログの読者になる | 更新情報をチェックする

2010年10月29日

PHP : XML の内容を DOMXPath クラスで簡単に取得する

一番注意するのは、「名前空間の登録」です。あとは、ルートから順に指定して行くのですが
途中で同じ要素が繰り返されている場合は[n] で指定します。( n は、1 から始まります )

<?xml version="1.0" encoding="utf-8"?>
<ItemLookupResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2005-10-05">
  <OperationRequest>
    <RequestId>48862558-e642-43b7-96dc-dbb2b5ddcc1f</RequestId>
    <Arguments>
      <Argument Name="Operation" Value="ItemLookup"/>
      <Argument Name="Service" Value="AWSECommerceService"/>
      <Argument Name="Signature" Value="5dkEOxK2XReEF7Tf7EGOo5XTyBwZwayfww4w0+m7jI0="/>
      <Argument Name="ItemId" Value="B000062X90"/>
      <Argument Name="AWSAccessKeyId" Value="MySubscriptionId"/>
      <Argument Name="Timestamp" Value="2010-10-25T10:20:51Z"/>
      <Argument Name="ResponseGroup" Value="Large"/>
    </Arguments>

<?
header( "Content-Type: text/html; Charset=utf-8" );
header( "pragma: no-cache" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "Cache-control: no-cache" );

// XML の内部は utf-8 です。
$xml = file_get_contents( "http://localhost/am.xml" );

// 新規のドキュメントを作成します
$doc = new DOMDocument();

// 文字列内の XML をセットします
$doc->loadXML($xml);

// DOMXPath オブジェクトを作成します
$xpath = new DOMXPath($doc);

// ネームスペースを登録します
$xpath->registerNamespace( 'n', "http://webservices.amazon.com/AWSECommerceService/2005-10-05");

// n: で表現した xpath を作成します
$query = '/n:ItemLookupResponse/n:Items/n:Item/n:SmallImage/n:URL';

$entries = $xpath->query($query);
print $entries->item(0)->textContent;

print "<hr>";

// n: で表現した xpath を作成します
// ( 複数ある場合は、[1] が先頭
$query = '/n:ItemLookupResponse/n:Items/n:Item/n:CustomerReviews/n:Review[1]/n:Content';

$entries = $xpath->query($query);
print $entries->item(0)->textContent;

print "<hr>";

$query = '/n:ItemLookupResponse/n:Items/n:Item/n:CustomerReviews/n:Review[3]/n:Content';

$entries = $xpath->query($query);
print $entries->item(0)->textContent;

?>

xpath の記法は XPath の例 を参考にします。

関連する記事

XML の内容を new DOMDocument(); と getElementsByTagName で簡単に取得する


posted by lightbox at 14:41 | 処理 | このブログの読者になる | 更新情報をチェックする

2010年10月28日

PHP : XML の内容を new DOMDocument(); と getElementsByTagName で簡単に取得する

このテスト使った XML は、Amazon の Product Advertising API で取得した
商品情報とレビューが入った XML データです。
( もうすぐレビューデータは直接取得できなくなりますが )

XML の構造が事前に決まっている場合、道の曲がり角を順番に目印にしたがって
曲がって行くようにして目的の場所を特定します。(曲がり角の目印が、要素名です)

getElementsByTagName で取得されるのは、nodeList なので、その要素が一つしか
なければ目的の曲がり角は、nodeList->item(0) になります。これは node なので、
再び getElementsByTagName で目的場所を絞って行き、最後の場所で目的のテキスト
である末端の node( テキストノード ) の値を取得します。
<?
header( "Content-Type: text/html; Charset=utf-8" );
header( "pragma: no-cache" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "Cache-control: no-cache" );

// XML の内部は utf-8 です。
$xml = file_get_contents( "http://localhost/am.xml" );

// 新規のドキュメントを作成します
$doc = new DOMDocument();

// 文字列内の XML をセットします
$doc->loadXML($xml);

// ツリーを順番たどって値を取得します
$nodeList = $doc->getElementsByTagName("Item");
$nodeList = $nodeList->item(0)->getElementsByTagName("SmallImage");
$nodeList = $nodeList->item(0)->getElementsByTagName("URL");
print $nodeList->item(0)->textContent;

print "<hr>";

// ツリーを順番たどって値を取得します
// ( textContent と firstChild->nodeValue はどちらも同じ目的のテキストです )
$nodeList = $doc->getElementsByTagName("CustomerReviews");
$nodeList = $nodeList->item(0)->getElementsByTagName("Review");
$nodeList = $nodeList->item(0)->getElementsByTagName("Content");
print $nodeList->item(0)->firstChild->nodeValue;

?>

関連する記事

PHP : XML の内容を DOMXPath クラスで簡単に取得する


posted by lightbox at 16:33 | 処理 | このブログの読者になる | 更新情報をチェックする