SQLの窓

2014年06月07日


GET メソッドでフォーム送信時にキャッシュを読まないように( 特に Google Chrome )


header( "pragma: no-cache" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "Cache-control: no-cache" );

WEB アプリケーションを作成する以上、http ヘッダにキャッシュコントロールは必ずセットしますが、それでも何故かキャッシュから読まれる場合があります。

他のトラブルを事前に解消する為にも、一時的には全てのキャッシュを削除するのは良い方法ではありますが解決にはなりません。

Google Chrome では、デベロッパーツールに、『Disable cache (while DevTools is open)』という機能もありますが、先日そうしていても submit ボタンがサーバーへアクセスしない事象に遭遇しました。

で、結局ベーシックな方法ではありますが、以下のように URL を常に変更してキャッシュから読まないようにするのが確実である事が解りました。

Google Chrome で発生した手順(localhostにて)

1) 問い合わせ画面から、window.open で新しいウインドウを開く。
2) そのウインドウでデータを削除し、ウインドウを閉じる
3) 元の問い合わせ画面が表示される( 隠れていたのが見えるようになっただけ )
4) submit ボタンを押しても反応が無い( Network で見ても反応なし )
5) なのに、右クリックからソースを見ると変わっている( 何故?? )

Google Chrome では、以前よりレンタルサーバを使ってサーバーを変更しても変化しないというような事がありました。とにかく、効率の良い表示のアルゴリズムで作成されているのでしょうが、バグもあるのだろう・・・というのが正直な感想です。
<input
	type="hidden"
	name="cache"
	value="<?= uniqid() ?>">



posted by lightbox at 2014-06-07 18:34 | PHP + ベーシック | このブログの読者になる | 更新情報をチェックする

2013年09月08日


初心者用ファイルアップロード用テンプレート( 含 HTML5 の multiple="true" )



PHP を使用してファイルをアップロードする標準的な方法に加えて、HTML5 の input 要素で multiple="true"(要するに、ファイル選択ダイアログでファイルを複数選択が可能になります) を指定したサンプルです

Google Chrome



Firefox



IE10


<?
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" );

foreach( $_POST as $Key => $Value ) {
	$_POST[$Key] = str_replace("\\\\", "\\", $Value );
	$_POST[$Key] = str_replace("\\'", "'", $_POST[$Key] );
	$_POST[$Key] = str_replace("\\\"", "\"", $_POST[$Key] );
}

require_once("html_head.php");

print "<pre>";
print_r( $_FILES );
print "</pre>";

$target = $_FILES['file_1']['name'];

$upload = "./upload_file/";
$upload .= $target;
print $upload . "<br>";

if ( move_uploaded_file( $_FILES['file_1']['tmp_name'], $upload ) ) {
	print "アップロードに成功しました\n";
}
else {
	print "アップロードに失敗しました\n";
}

?>

更新履歴
2011-05-22 : 初回投稿
2013-09-08 : IE10 でテスト( 表示等を少し変更 )



タグ:HTML5
posted by lightbox at 2013-09-08 22:03 | PHP + ベーシック | このブログの読者になる | 更新情報をチェックする

2013年05月05日


PHP : 改行とタブと余り(%) でカレンダーを作成( 最終日は mktime で取得 )

PHP 5.4.13 を使用





入力した月によって、カレンダーを作成するという単純なものですが、初心者向けに、文字列はシングルクォートとドットで組み立てて、タブや改行のみダブルクォートを使用しています。

完全に画面と処理を分離していませんが、PHP に不慣れである事を想定して、HTML上部 > PHP の print > HTML の下部( + デバッグ出力 ) といった構成です。

月の最終日に関しては、マニュアルのサンプルコード部分に記述があります。

実際は、配列をカレンダーに埋め込んで、その配列にセットする条件を作るほうが簡単ですが、それだと動きが無いので初心者向けではありません。このほうが、PHP の特色をいろいろ感じながらできると思います。

最初から完成コードを見せずに、『どこで改行を入れるべきか』を考えてから作って行くのが良いと思います。( 画像内の表はヒントです )
<?php

	// HTML 側の meta 要素に依存せずにキャラクタセットを決定しています
	header( "Content-Type: text/html; Charset=utf-8" );

	// 未入力は1月とする
	if ( trim( $_GET['mon'] ) == '' ) {
		$_GET['mon'] = 1;
	}

	// HTML(画面) の主要部分を読み込んでいます
	require_once("html_head.php");

	print '<h1>' . $_GET['mon'] . '月の最終日は ' . last_date( $_GET['mon'] ) . ' 日です</h1>' . "\n";

	// HTML 上で改行コードやタブを利用する為に PRE 要素を使用しています
	print "<pre>";

	$week =  date('w', mktime(0, 0, 0, $_GET['mon'], 1, 2013));
	print '曜日は (' . $week . ') です' . "\n";
	print 'date 関数が返すのは文字列なので、$week には文字列が入ります' . "\n";

	print '<hr>';

	// $week の内容ぶんタブを出力する
	for( $i = 0; $i < ($week+0); $i++ ) {
		print "\t";
	}

	for( $i = 0; $i < 31; $i++ ) {
		print "\t" . ($i+1);
		if ( $week + ($i % 7) == 6 ) {
			print "\n";
		}

		if ( ($i+1) == last_date( $_GET['mon'] ) ) {
			break;
		}

	}

	print "\n\n";

	print "</pre>";

	// HTML(画面) の最終部分と、php のデバッグ(予備)部分を読み込んでいます
	require_once("html_footer.php");

// 2013年の指定月の最終日を求める
function last_date( $mon ) {

	$lastday = mktime(0, 0, 0, $mon+1, 0, 2013);
	$dd = date( 'j', $lastday );
	return ($dd+0);

}

?>




posted by lightbox at 2013-05-05 22:39 | PHP + ベーシック | このブログの読者になる | 更新情報をチェックする

2010年10月30日


PHP : 前ゼロ文字列作成と右から必要な長さ文字列を取得する処理

要するに、VBScript や古い VB における Right 関数の代替えが目的です。

ただ、前ゼロしたいだけなら sprintf がありますし、他の言語でも行うに
は、文字列の長さと開始位置から指定長さを取得する処理があればできます。
<?

// **********************************************************
// n 桁の前ゼロ文字列を作成するには
// 以下で簡単に作成できますが、
// **********************************************************
$a = sprintf("%05d", 1);
print "$a<br>";

// **********************************************************
// どんな言語でもたぶんある関数(メソッド)を使って行うには
// **********************************************************

// 1) n 桁の 0 を目的の文字列の前に連結する

$a = "00000" . 1;

// 2) 全体の長さを取得する

$len = strlen($a);

// 3) 全体の長さ - 欲しい長さを開始位置とする

$start = $len - 5;

// 4) その位置から欲しい長さぶん切り取る

$x = substr( $a, $start, 5 );

print "$x<br>";

// つまり
function m_zero( $target, $n ) {

	$target = str_repeat("0",$n) . $target;
	$len = strlen($target);
	$start = $len - $n;
	$target = substr( $target, $start, $n );
	return $target;

};

print m_zero(1,5) . "<br>";
print m_zero("AA",5) . "<br>";
print m_zero("あA",5) . "<br>";
print m_zero(1234,5) . "<br>";
print m_zero(12345,5) . "<br>";

?>

00001
00001
00001
000AA
00あA
01234
12345
関連する記事 PHP 5.3.0 以降の無名関数
タグ:PHP 文字列
posted by lightbox at 2010-10-30 19:34 | PHP + ベーシック | このブログの読者になる | 更新情報をチェックする

2010年10月03日


PHP : mb_internal_encoding で SHIFT_JIS(SJIS) は厳密には不可だと思います

昔からそう思ってたのですが、WEB で見てると皆お使いになっているようです。
たしかどこかに書いてあったはずと、php.ini を見てみると。

; internal/script encoding.
; Some encoding cannot work as internal encoding.
; (e.g. SJIS, BIG5, ISO-2022-*)
; http://php.net/mbstring.internal-encoding
;mbstring.internal_encoding = EUC-JP
です。 理由は解りませんが、やはり 5c とかまずいのでは無いでしょうか。 あるいは、他のキャラクタセットへの変換で不完全な変換が比較的 多く発生する可能性があるとか、かもしれません。
タグ:PHP トラブル
posted by lightbox at 2010-10-03 20:02 | PHP + ベーシック | このブログの読者になる | 更新情報をチェックする
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 終わり