SQLの窓

2014年09月27日


PHP : htmlentities : テキストエリアによるテキスト処理

テキストエリアで長いソースコード等を入力して保存する場合、読み込んで表示する時のみ htmlentities 変換してから TEXTAREA 要素で挟む必要があります。

変換結果の確認は、Google Chrome のコンソールで 『$("body > form > table > tbody > tr:nth-child(2) > td:nth-child(2) > textarea").innerHTML』です
<?php
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" );

// POST メソッドで送信された時のみ処理する
// ( URL から呼び出された場合は処理しない )
if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) {

	if ( $_POST['send'] == '読み出し' ) {
		$text = @file_get_contents("./text.data");
		$text = htmlentities( $text, ENT_NOQUOTES, "utf-8" );
	}
	if ( $_POST['send'] == '書き込み' ) {
		file_put_contents("./text.data", $_POST['text'] );
		$text = htmlentities( $_POST['text'], ENT_NOQUOTES, "utf-8" );
	}

}

?>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>HTML雛形</title>
<style type="text/css">
* {
	font-family: "メイリオ","MS Pゴシック";
	font-size: 16px;
}
.column {
	border-style:solid;
	border-width:1px;
	border-color:#000000;
	padding: 4px;
}
</style>

<script type="text/javascript">
function submitForm() {
	if ( !confirm( "Submit ボタンで送信しますか?" ) ) {
		return false;
	}
	return true;
}
</script>

</head>
<body>

<form
	name="frm"
	method="post"
	action=""
	onsubmit='return submitForm();'
>
<table
	border=1
	style='
		border-collapse:collapse;
		border-style:solid;
		border-width:1px;
		border-color:#000000;
	'
>

<tr>
	<td class="column" colspan=2>
	<input
		type="submit"
		name="send"
		value="読み出し"
	>
	<input
		type="submit"
		name="send"
		value="書き込み"
	>
	</td>
</tr>

<tr>
	<td class="column">テキストエリア</td>
	<td class="column">
<textarea
	name="text"
	cols="60"
	rows="15"
><?= $text ?></textarea>
	</td>
</tr>

</table>
</form>


</body>
</html>





タグ:PHP htmlentities
posted by lightbox at 2014-09-27 16:20 | PHP + WEBアプリ | このブログの読者になる | 更新情報をチェックする

PHP : 入力値のデバッグ

ソースコードの最下部に追加すれば良いと思います。
<?php
print "<pre>";
print_r($_GET);
print_r($_POST);
print "</pre>";
?>

デバッグする文字列に HTML が含まれている場合は、以下のようにするといいと思います。
<?php
foreach( $_POST as $key => $value ) {
	$_mypost[$key] = htmlentities( $value, ENT_NOQUOTES, "utf-8" );
}
print "<pre>";
print_r($_mypost);
print "</pre>";
?>



タグ:PHP
posted by lightbox at 2014-09-27 16:20 | PHP + WEBアプリ | このブログの読者になる | 更新情報をチェックする

Seesaa の特定のカテゴリ(複数)の場合のみ、記事の下に参照リンクやコンテンツを付加する方法

Seesaaブログの page_name 変数の3つ以上の OR 条件の記述方法 の発展形です。上記の場合は、HTML テンプレート内で書きましたが、今回は「記事コンテンツ」内です。

(重要)
article_category 変数は、以下のループの中でのみ有効です。OR 記述が有効なのは、article_category 等の単独変数のみで、article.category という変数には使用できません。
<% loop:list_article -%>
<% /loop -%>
特定のカテゴリ(複数)の場合のみ、記事の下に参照リンクやコンテンツを付加します。

どうやら、変数の種類によって「できる、できない」があるようで、カテゴリ名ではできませんでした。OR 条件の書き方のルールとしては、これではっきりしましたが常に2項になるように「かっこ」でくくればいいようです。
<% if: (((article_category eq '10046946') + (article_category eq '10046812')) + ((article_category eq '10047034') + (article_category eq '10046894'))) + (((article_category eq '10046774') + (article_category eq '10046952')) + (article_category eq '10047062') ) -%>

<div class="listCategoryArticle" style='margin-top:15px;'>
【VBScript関連のカテゴリ】<br />
<ul>
<li><a href="http://logicalerror.seesaa.net/category/10046946-1.html">VBS + ADO</a></li>
<li><a href="http://logicalerror.seesaa.net/category/10046812-1.html">VBS + JavaScript</a></li>
<li><a href="http://logicalerror.seesaa.net/category/10047034-1.html">VBS + Shell</a></li>
<li><a href="http://logicalerror.seesaa.net/category/10046894-1.html">VBS + WMI</a></li>
<li><a href="http://logicalerror.seesaa.net/category/10046774-1.html">VBS + インターネット</a>
<li><a href="http://logicalerror.seesaa.net/category/10046952-1.html">VBS + ファイルシステム</a>
<li><a href="http://logicalerror.seesaa.net/category/10047062-1.html">VBS + 特殊オブジェクト</a>
</ul>
</div>

<% /if -%>





Seesaa独自タグ簡易リファレンス

タグ:Seesaa
posted by lightbox at 2014-09-27 15:14 | Seesaa プログ管理支援 | このブログの読者になる | 更新情報をチェックする

バッチファイル内の Call コマンドによるサブルーチンの呼び出し( errorlevel を戻して if で判断する )

コマンドプロントの拡張機能である、ラベルによる呼び出しは、デフォルトで有効になっています
CALL :ラベル 引数
以下に引数errorlevel を使用したサンプルを示します
@echo off
REM ****************************************
REM コマンドの先頭の @ は、そのコマンドの表示を抑制
REM echo off は以降のコマンドの表示を抑制
REM ****************************************

REM ****************************************
REM サブルーチンの呼び出し
REM ****************************************
call :GetDay 09
if errorlevel 1 ( 
	echo 現在の月は引数と一致しました & date /T
) else ( 
	echo 現在は引数以外の月です & date /T
)

REM ****************************************
REM 処理の終わり
REM ****************************************
goto end



REM ****************************************
REM サブルーチン
REM date /t で 2009/08/16 というような表示を / で区切り
REM 2番目の 08 を %%i へセットする
REM ****************************************
:GetDay
@for /F "delims=/ tokens=2" %%i in ('date /t') do (
	REM 現在が引数と一致する場合
	if "%%i"=="%1" (
		REM サブルーチンからの脱出と同時に errorlevel のセット
		exit /B 1
	)
)
REM 一致しなかった場合のサブルーチンからの脱出
exit /B 0

REM ****************************************
REM 記述の終わり
REM ****************************************
:end



REM ****************************************
REM 【補足】
REM
REM date /t の /t と call :ラベルは何れもデフォルトで有効な
REM コマンド拡張機能 です。
REM ****************************************

要点

:GetDay にジャンプして、exit コマンドで元へ戻ります。
exit /B で cmd.exe を終了するのでは無く制御を call の呼び出し元へ移します
exit /B 数値 によって、結果を戻り値として返します

if や else の結果で複数コマンドを実行したい場合は & でつなげます。
( if文は キーワードが行の先頭になければ複数行で記述できますが、コマンドは & でつなげる場合1行で記述する必要があります )


関連する記事


posted by lightbox at 2014-09-27 13:54 | コマンド : バッチファイル | このブログの読者になる | 更新情報をチェックする

Firefox、IE11 の canvas で動作する楕円( ellipse )関数

ellipse 関数は、Google Chrome で動作しますが、現時点で Firefox と IE11 で動作してなかったので、計算で Google Chrome の ellipse をエミュレートしました。
<style type="text/css">
#circle {
	border: solid 1px #000000;
}
</style>

<canvas id="circle"></canvas>

<script type="text/javascript">
	var canvas = document.getElementById("circle");
	canvas.width = 300;
	canvas.height = 300;
	var draw = canvas.getContext("2d");

	draw.beginPath();
	draw.fillStyle = "#c0c0c0";

	ellipse( draw, 80, 50, 100, 85, 0, Math.PI*2, false);
	draw.fill();
	draw.lineWidth = 3;
	draw.stroke();

// *********************************
// 楕円関数
// *********************************
function ellipse( obj, x, y, a, b, o1, o2, o3 ) {
	draw.save();
	draw.scale( 1, b / a );
	draw.arc(x, y+((a-b)+((y-a)-(y-a)*(b/a)))*(a/b), a, o1, o2, o3);
	draw.restore();

}
</script>
save と restore は、伸縮する楕円の枠線の太さが変わらないようにする処理です。計算は、scale による伸縮による座標の移動を逆計算したものです。


posted by lightbox at 2014-09-27 00:33 | JavaScript | このブログの読者になる | 更新情報をチェックする

2014年09月26日


PHP : 曲線が使い物にならない GD ライブラリ / Canvas の楕円と比較

単純な画像加工ならば、フォントも普通に使えるますし、レンタルサーバーでも普通に実装されているので利用しやすいですが、曲線が美しく無いので、最近ではブラウザ側の canvas を使ったほうがいいでしょう。





▼ 四角形
<?php
header("Content-type: image/png");
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "pragma: no-cache" );
header( "Cache-control: no-cache" );

// ******************************
// キャンバス作成( 300 x 300 )
// ******************************
$im = imagecreatetruecolor( 300, 300 );
imageantialias( $im, true );	// アンチエイリアス

// ******************************
// 色
// ******************************
$gray = imagecolorallocate( $im, 0xC0, 0xC0, 0xC0 );
$black = imagecolorallocate( $im, 0, 0, 0 );
$white = imagecolorallocate( $im, 255, 255, 255 );

// キャンバスを灰色で塗りつぶす
imagefilledrectangle ( $im ,0, 0, 300, 300, $gray );

// ******************************
// 線幅
// ******************************
imagesetthickness ( $im, 4 );

// ******************************
// BOX
// ******************************
imagerectangle( $im, 50, 50, 250, 250, $black );

// ******************************
// BOX内部塗りつぶし
// ******************************
imagefilltoborder ( $im , (50+250)/2, (50+250)/2, $black, $white );

// ******************************
// PNG 出力
// ******************************
imagepng($im);

// ******************************
// 終了処理
// ******************************
imagecolordeallocate( $im, $black );
imagecolordeallocate( $im, $white );
imagedestroy($im);

?>


▼ 楕円
<?php
header("Content-type: image/png");
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "pragma: no-cache" );
header( "Cache-control: no-cache" );

// ******************************
// キャンバス作成( 300 x 300 )
// ******************************
$im = imagecreatetruecolor( 300, 300 );
imageantialias( $im, true );	// アンチエイリアス

// ******************************
// 色
// ******************************
$gray = imagecolorallocate( $im, 0xC0, 0xC0, 0xC0 );
$black = imagecolorallocate( $im, 0, 0, 0 );
$white = imagecolorallocate( $im, 255, 255, 255 );

// キャンバスを灰色で塗りつぶす
imagefilledrectangle ( $im ,0, 0, 300, 300, $gray );

// ******************************
// 線幅
// ******************************
imagesetthickness ( $im, 4 );

// ******************************
// 楕円
// ******************************
imagefilledarc( $im, 150, 150, 200, 180, 0, 360, $black, IMG_ARC_NOFILL );

// ******************************
// 塗りつぶし
// ******************************
imagefilltoborder ( $im , 150, 150, $black, $white );

// ******************************
// PNG 出力
// ******************************
imagepng($im);

// ******************************
// 終了処理
// ******************************
imagecolordeallocate( $im, $black );
imagecolordeallocate( $im, $white );
imagedestroy($im);

?>

imagefilledarc は、円弧、塗りつぶしと全てまかなえるので使っています

関連する記事

PHP : 曲線が必要ならば ImageMagick ( 但し使えるかどうかはサーバー次第 )

canvas で楕円

<style type="text/css">
#circle {
	border: solid 1px #000000;
}
</style>
<canvas id="circle"></canvas>
<script type="text/javascript">
	var canvas = document.getElementById("circle");
	canvas.width = 400;
	canvas.height = 330;
	var draw = canvas.getContext("2d");

	draw.beginPath();
	draw.fillStyle = "#c0c0c0";
	
	draw.save();
	draw.scale( 1, 0.8 );
	draw.arc(200, 200, 150, 0, Math.PI*2, false);
	draw.fill();
	draw.restore();

	draw.lineWidth = 3;
	draw.stroke();
</script>



posted by lightbox at 2014-09-26 21:28 | PHP + WEBアプリ | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり