submitボタンでアラートボックスを表示

HTMLヘッダーへ記載

<SCRIPT type="text/JavaScript">
<!--
function kakunin(msg, url){ if(confirm(msg)){ location.href = url; } } 
//-->
</SCRIPT>

リンクタグ、submitへ記載

<INPUT type="submit" value="登録・更新" onClick="kakunin('この内容で登録しますか?', '/works/php_library/hudousan/hudousan_v.active/admin.php')">

グローバル変数とローカル変数

関数内で、「var」をつけるとローカル変数、
つけないとグローバル変数になる。

例:

xx = 5; // グローバル変数 xx に 5 を代入
yy = 5; // グローバル変数 yy に 5 を代入

func(); // 関数 func() を呼び出す

alert(“xx = ” + xx); // グローバル変数 xx を表示(5 が表示される)
alert(“yy = ” + yy); // グローバル変数 yy を表示(8 が表示される)

function func() {
var xx = 8; // ローカル変数 xx に 8 を代入
yy = 8; // グローバル変数 yy に 8 を代入
}

Flashの外部画像が更新されないのを回避する

読み込みファイル名が同じ場合、キャッシュがクリアされません。

例えば「move.swf」というファイルがあれば「」の部分を「」のように擬似的にパラメータみたいな感じにしてあげれば良いのです。

ソースを短くしたければ、date関数が簡単かも?

今日の残り時間を計算して表示

<html>
<head>
<script type="text/javascript">
<!--
function time() {

var now = new Date();
var hour = 23-now.getHours();
var min = 59-now.getMinutes();
var sec = 59-now.getSeconds();

document.getElementById("ptime").innerHTML = ""+hour+"時間"+min+"分"+sec+"秒";
window.setTimeout("time()", 500);

}

// -->
</script>
</head>
<body onload="time()">
<div id="ptime"></div>
</body>
</html>

格好良く別窓(GreyBox)

参考URL

http://orangoo.com/labs/GreyBox/
必要なファイルは本家からダウンロードすべし。
HTMLヘッダに書く

<script type=”text/javascript”>
var GB_ROOT_DIR = “./greybox/”;
</script>
<script type=”text/javascript” src=”greybox/AJS.js”></script>
<script type=”text/javascript” src=”greybox/AJS_fx.js”></script>
<script type=”text/javascript” src=”greybox/gb_scripts.js”></script>
<link rel=”stylesheet” href=”greybox/gb_styles.css” type=”text/css” media=”all”>

閉じるボタンを隠す

取り急ぎ、SCCで隠してしまうことにした。

動的URL→静的URL(htaccess)

「index.php?category=1」や「article.php?articleid=10」などといった動的ページの象徴ともいえるアドレスである。
これを、たとえば「category-1.html」や「article-10.html」と変換するには、「.htaccess」に次のように記述する。

http://www.zibaj.net/modules/xfsection/index.php?category=19
http://www.zibaj.net/modules/xfsection/article.php?articleid=41

といったものを

http://www.zibaj.net/modules/xfsection/category-19.html
http://www.zibaj.net/modules/xfsection/article-41.html

でアクセス可能にするのが目的です。

◆記述例

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^item-([0-9]+).html+ index.php?itemid=$1

変数名に変数をつかう

「変数名に変数をつかう」
文型の方には理解しがたいかもしれません。
理数系の方は、普通にできる。
…知らなくても「できるはず」と思ってしまう。

答えは、
カンタン!

${‘hoge’.$i}

$i=”0″;
while($i <= 9){     ${'hoge'.$i}     $i ++; }[/php] $hoge0~$hoge9 ということですね!

ファイルの所有者がApacheになってしまう

ファイルの所有者がApache
パーミッションが644, 604, 640, 600
などで、書き換えができなくなるサーバーが多い。

chmod はセキュリティ保持のために許可されていないことも多い、
では、どうするか?

アップロードや生成したファイルを保存する直前に、

umask(0);

とするだけだ。

現在の「umask」を表示

$old = umask();
echo $old;

Formの入力文字の型指定

i-modeとez-webでは、istyle
vodafoneの過去機種ではmode

全角(デフォルト)
istyle=”1″ mode=”hiragana”

半角カナ
istyle=”2″ mode=”hankakukana”

半角英字
istyle=”3″ mode=”alphabet”

半角数字
istyle=”4″ mode=”numeric”

例:
<input type=”text” name=”aiueo” istyle=”4″ mode=”numeric”>

「画像ファイル”○○○”壊れているため、表示できませんでした。」と表示される?

Opera
 画像がないときの「×」

FireFox
 「画像ファイル”○○○”壊れているため、表示できませんでした。」

I.E.
 正常に表示される。

携帯からは、
 画像がないときの「×」

原因は、
画像処理モジュールファイルに、

Header(“Content-type: image/”.$qrcode_image_type);
と書かれていた。
「このページは、画像です。」と宣言しているのだから、
当然のエラーが計れていたに過ぎない。

予想はついていたが、信じがたい。
こんなもの、公開するなといいたくなる。

素人がオープンソースなどと言い公開しているものを流用した自分が情けない。
(;o;_;)o グスグス

携帯電話の個体番号取得方法

活用方法は、簡単ログインなど、個体番号で認証を自動化するときなど。

// 固体番号取得
if($env=="au"){
    $id = $_SERVER['HTTP_X_UP_SUBNO'];
}elseif($env=="docomo"){
    $id = $_SERVER['HTTP_X_DCMGUID'];
}elseif($env=="softbank"){
    $useragent=$_SERVER[HTTP_USER_AGENT];
    preg_match("/^.+\/SN([0-9a-zA-Z]+).*$/", $useragent, $match);
    $id = $match[1];
}
echo $id;

※ Docomoで個体番号を取得するには、a要素、form要素にutn属性を付ける。

_POST,_GET,_SERVER,_SESSION

// 利用方法は??

echo ‘<pre style=”text-align:left; color:blue;”>’;
echo ‘<div style=”font-weigh:bold;”>_GET</div>’;

var_dump($_GET);
echo '<div style="font-weigh:bold;">_POST</div>';
var_dump($_POST);
echo '<div style="font-weigh:bold;">_SESSION</div>';
var_dump($_SESSION);
echo '<div style="font-weigh:bold;">_SERVER</div>';
var_dump($_SERVER);

「$_GET, $_POST, $_SERVER, $_SESSION」を表示する。
それだけのことです。

文字列の型をチェック(半角数字編)

型をチェック
郵便番号、電話番号など…

全角ハイフンを半角ハイフンに変換

$zip = str_replace( "ー", "-", $zip);

ハイフンを削除

$zip = str_replace( "-", "", $zip);

文字数カウント

$len = mb_strlen($zip, "UTF-8″);
if($len != "7″){
$nbsp;$nbsp;$nbsp;$nbsp;$zip_error = "1″;
}

「全角はダメ、ハイフンはどうとか」文句(Error)を吐くなら、「変換して知らん振り」の方がスマートでしょ
( ̄ー ̄)ニヤリ

全角数字を半角数字に変換

$zip = mb_convert_kana($zip, "a", "UTF-8″);

mb_convert_kanaのオプション

オプション値 変換方法
r 「全角」英字を「半角」に変換
R 「半角」英字を「全角」に変換
n 「全角」数字を「半角」に変換
N 「半角」数字を「全角」に変換
a 「全角」英数字を「半角」
A 「半角」英数字を「全角」に変換
s 「全角」スペースを「半角」に変換
S 「半角」スペースを「全角」
k 「全角カタカナ」を「半角カタカナ」に変換
K 「半角カタカナ」を「全角カタカナ」
h 「全角ひらがな」を「半角カタカナ」に変換
H 「半角カタカナ」を「全角ひらがな」に変換
c 「全角カタカナ」を「全角ひらがな」に変換
C 「全角ひらがな」を「全角カタカナ」に変換
V 濁点付きの文字を一文字に変換

データの型CHECK(電話番号)

// 型をチェック

// 全角数字を半角数字に変換
$zip = mb_convert_kana($zip, "a", "UTF-8");
// 全角はダメとか文句(Error)を吐くなら、「変換して知らん振り」

// 全角ハイフンを半角ハイフンに変換
$zip = str_replace( "ー", "-", $zip);

// ハイフンを削除
$zip = str_replace( "-", "", $zip);

// 文字数カウント
$len = mb_strlen($zip, "UTF-8");
if($len != "7"){
$zip_error = "1";
}

アップロードエラーの戻り値

UPLOAD_ERR_OK 値: 0
エラー無し
ファイルアップロード成功

UPLOAD_ERR_INI_SIZE 値: 1
アップロードされたファイルは、php.iniのupload_max_filesizeディレクティブの値を超過している

UPLOAD_ERR_FORM_SIZE 値: 2
アップロードされたファイルは、HTMLフォームで指定された MAX_FILE_SIZEを超えている

UPLOAD_ERR_PARTIAL 値: 3
アップロードされたファイルは一部のみしかアップロードできてない
通信の問題とか、メモリフローしてない?

UPLOAD_ERR_NO_FILE 値: 4
ファイルはアップロードされなかった

UPLOAD_ERR_NO_TMP_DIR 値: 6
テンポラリフォルダがありません
PHP4.3.10とPHP 5.0.3で導入

UPLOAD_ERR_CANT_WRITE 値: 7
ディスクへの書き込みに失敗しましたよ
PHP 5.1.0で導入

UPLOAD_ERR_EXTENSION 値: 8
ファイルのアップロードが拡張モジュールによって停止された
PHP5.2.0で導入された

郵便番号から都道府県識別

http://yuusuke.info/
上2桁で識別できる

郵便番号上2桁と都道府県一覧

00,05,06,07,08,09 北 海 道
01 秋 田 県
02 岩 手 県
03 青 森 県
04 北 海 道
10,11,12,13,14,15,16,17,18,19,20 東 京 都
21,22,23,24,25 神奈川県
26,27,28,29 千 葉 県
30,31 茨 城 県
32 栃 木 県
33,34,35,36,37 埼 玉 県
37 群 馬 県
38,39 長 野 県
40 山 梨 県
41,42,43 静 岡 県
44,45,46,47,48,49 愛 知 県
50 岐 阜 県
51 三 重 県
52 滋 賀 県
53,54,55,56,57,58,59 大 阪 府
60,61,62 京 都 府
63 奈 良 県
64 和歌山県
65,66,67 兵 庫 県
68 鳥 取 県
69 島 根 県
70,71 岡 山 県
72,73 広 島 県
74,75 山 口 県
76 香 川 県
77 徳 島 県
78 高 知 県
79 愛 媛 県
80,81,82,83 福 岡 県
84 佐 賀 県
85 長 崎 県
86 熊 本 県
87 大 分 県
98 宮 崎 県
89 鹿児島県
90 沖 縄 県
91 福 井 県
92 石 川 県
93 富 山 県
94,95 新 潟 県
96,97 福 島 県
88 宮 城 県
99 山 形 県

MailAddress のドメイン(MXレコード)の存在確認

if($mode == "check"){
  $shop_mail1 = $_POST[shop_mail1];
  if($shop_mail1 == ""){
    $Email1="E-mailを入力してください.";
    $ERROR = "1";
  }elseif (!ereg("^[^@]+@[^.]+..+",$shop_mail1)) {
    $Email1="E-mailではないようです.";
    $ERROR = "1";
  }elseif(!preg_match("/^[a-zA-Z0-9_.-]+@([a-zA-Z0-9_.-]+)/", $shop_mail1,  $regs)){
    $Email1="利用できないでない文字が含まれています。";
    $ERROR = "1";
  }
  // メールアドレスのドメイン(MXレコード)の存在確認
  if(!checkdnsrr($regs[1],'MX') & !checkdnsrr($regs[1],'A')){
    $Email1="存在しないドメインです。";
    $ERROR = "1";
  }
}

パスワード(乱数)の生成

// 初期パスワードの生成
// パスワードの長さ設定
$len="6";
// 乱数生成シードを決定
srand((double)microtime() * 4423);
// パスワード文字列の配列を作成
$pwelemstr = "abcdefghijklmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ2345679!#%";
$pwelem = preg_split("//", $pwelemstr, 0, PREG_SPLIT_NO_EMPTY);
$password = "";
for($i=0; $i&lt;$len; $i++ ) {
// パスワード文字列を生成
$password .= $pwelem[array_rand($pwelem, 1)];
}
echo "password-&gt;".$password;

動的URLを静的URLにする

一言で言えば「URLの偽装」です。
httpd.conf に書くとこんな感じです。
.httaccess に書くときは中身だけを書きます

&lt;Directory "/var/www/vhosts/mint410.com/httpdocs"&gt;
    &lt;IfModule mod_rewrite.c&gt;
        RewriteCond %{HTTP_USER_AGENT} ^UP\.Browser [NC,OR]
        RewriteCond %{HTTP_USER_AGENT} ^KDDI [NC,OR]
        RewriteCond %{HTTP_USER_AGENT} DoCoMo [NC,OR]
        RewriteCond %{HTTP_USER_AGENT} J-PHONE [NC,OR]
        RewriteCond %{HTTP_USER_AGENT} voda [NC,OR]
        RewriteCond %{HTTP_USER_AGENT} SoftBank
        RewriteEngine on
        RewriteBase /
        RewriteRule ^/images/$ - [L]
        RewriteRule ^/uploadedimages/([0-9]+)/?([0-9A-Za-z,-_]+)$ /uploadedimages/$1 [L]
        RewriteRule ^/img/$ - [L]
        RewriteRule ^/js/$ - [L]
        RewriteRule ^([0-9A-Za-z]+)/$ /redirect.php?id=$1 [L]
        RewriteRule ^([0-9A-Za-z]+)$ /redirect22.php?id=$1 [L]
        RewriteRule ^([0-9]+)/c/$ /comment.php?id=$1 [L]
        RewriteRule ^([0-9A-Za-z,-_]+)/p/$ /profile.php?gid=$1 [L]
        RewriteRule ^([0-9A-Za-z,-_]+)/f/$ /bookmark.php?gid=$1 [L]
        RewriteRule ^([0-9A-Za-z,-_]+)/g/$ /bookmarkR.php?gid=$1 [L]
        RewriteRule ^([0-9A-Za-z,-_]+)/([0-9]+)/?([0-9A-Za-z,-_]+)$ /blog.php?gid=$1&id=$2&$3 [L]
        RewriteRule ^([0-9A-Za-z,-_]+)/s([0-9]+)/$ /blog.php?gid=$1&id=s$2 [L]
        RewriteRule ^([0-9A-Za-z,-_]+)/$ /blog.php?gid=$1 [L]
    &lt;/IfModule&gt;
&lt;/Directory&gt;

虫眼鏡SEO(関連検索キーワード)」の解説

検索の際に上や下にそのワードに関連するワードが表示されますが、ヤフーの場合は横にあるアイコンがムシメガネのため、虫眼鏡検索(むしめがねけんさく)と呼ばれるようになりました。

もうすでにご存知の方も多いとは思いますが、実はこの部分ある方法で操作が可能で、専門会社が多数存在しています。

自然に出てくるものでは?と思われていますが、もうすでに一部のワードで、ある操作によって書き換えられている状態です。

今年2009年初め頃から広く知られるようになりましたが、この方法自体はもうすでに2年以上前からあり、結構見かける事が多かったように感じます。
一例あげると「SEO」と検索して、全く有名でもないSEO業者の名前が「SEO SEO専門会社SEORY」などのように表示されたりします。
※SEO専門会社SEORYは例ですので存在しません、念のため。

どのように表示するかは後述するとして、この虫眼鏡の場所に表示させる事によって何がいいのか。

例えば「おせち料理」を通販で探したいユーザーがいるとして、これを検索してもレシピや解説のサイトや店舗を構える専門店が上位にヒットし、なかなか通販できるサイトが見つかりません。
そんなときに虫眼鏡に「おせち料理 おせち通販SEORY.jp」とあれば多くのユーザーを、おせち通販SEORY.jpに誘導できます。
(当然ですが「おせち料理 おせち通販SEORY.jp」このワードで検索した状態で1位にいること前提です。このワードで上位でない場合は、「おせち料理 ●●●●●」で上位に表示されるようなワードを探し、検索した際に虫眼鏡に●●●●●が現れるよう操作します。)

これ、今までヤフーでは比較的簡単に、グーグルでは表示が難しいと言われています。なぜ違いが出るのか?
表示されるしくみ、まずはヤフーです。
予想通りというかやっぱりというか、とにかく2ワードで検索しまくる!
上の例にあったのでいえば「おせち料理 おせち通販SEORY.jp」でひたすら検索。
すると「おせち料理」だけで検索しても「おせち料理 おせち通販SEORY.jp」と表示されるようになります。
と、手順としてはそれでいいのですが、ヤフーも考えており同じIPアドレスで検索されてもカウントされません。
プロキシ変更などを行い、それらをすべて自動で行い大量に検索させます。

また、別の手としてポイントサイトを利用したりもしています。
よくそういったサイトでは「検索すると○ポイント!」などを見かけると思いますが、それを利用してIP分散させているようです。
(このへんの仕組みは詳しくはお調べ下さい)
「おせち料理」と検索される総回数に対して「おせち料理 おせち通販SEORY.jp」と検索される数がそれの40%~60%(推測)に達せば表示されるようになるようです。

次はグーグルですが、こちらは単純に検索数でカウントして表示される訳ではなく、ヤフーとは全く違うアルゴリズムのようです。
WEB上から「おせち料理」を記述した大量のサイトを分析し、そのページ内でよく使われているワードを特定、表示しているようです。

それぞれの特徴です。
ヤフー
短期間で表示可能ですが、毎日クエリを送り続けないと消えるのも早い。
グーグル
表示までに時間も手間もかかりますが、表示されるとなかなか消えない。

以上、SEOをまじめにコツコツと行っている方から見れば(自分含め)、どんなグレーな事かお解かりいただけるかと思います。
いつスパム判定でも受けてインデックス削除にもなりかねませんし、業者に支払う金額に対してそれほどの効果がないとの声もあります。
なにより検索エンジンを意図的に操作する行為ですので、オススメできる方法ではないことだけは確かです。

チェックボックスで折りたたみ

Google先生に聞いてみると、皆さんとても複雑難解なソースを書いているようです。
こんなにシンプルにできるのに…

●名入れ(315円)&lt;input type="checkbox" onClick="a1.display=(this.checked?'':'none')"&gt;&lt;/br&gt;
&lt;div id="area1" style="display:none"&gt;
    名入れ名&lt;input type="text" name="" value=""&gt;
&lt;/div&gt;
&lt;br&gt;

●ギフト梱包(無料)&lt;input type="checkbox" onClick="a2.display=(this.checked?'':'none')"&gt;&lt;/br&gt;
&lt;div id="area2" style="display:none"&gt;
    ギフトの種類&lt;select&gt;&lt;option&gt;1&lt;/option&gt;&lt;option&gt;2&lt;/option&gt;&lt;option&gt;3&lt;/option&gt;&lt;select&gt;&lt;br&gt;
    ギフトメッセージ&lt;input type="text" name="" value=""&gt;&lt;br&gt;
    ※全角48文字まで入力可能&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;

●のし&lt;input type="checkbox" onClick="a3.display=(this.checked?'':'none')"&gt;&lt;/br&gt;
&lt;div id="area3" style="display:none"&gt;
    のしの種類&lt;select&gt;&lt;option&gt;1&lt;/option&gt;&lt;option&gt;2&lt;/option&gt;&lt;option&gt;3&lt;/option&gt;&lt;select&gt;&lt;br&gt;
    ギフトメッセージ&lt;input type="text" name="" value=""&gt;&lt;br&gt;
    ※全角10文字まで入力可能&lt;br&gt;
&lt;/div&gt;

&lt;script language="javascript"&gt;
a1=document.getElementById('area1').style
a2=document.getElementById('area2').style
a3=document.getElementById('area3').style
&lt;/script&gt;

≪実働サンプル≫

名入れ(315円)

ギフト梱包(無料)

のし

mail送信プログラムの例

// データベースに接続
$sql="SELECT * FROM `tech_options` WHERE `option_name` = 'admin_email'";
$rs = mysql_query($sql,$db);
$item = mysql_fetch_assoc($rs);

// メールタイトルを決める
$subject="お問い合わせ≪".$_POST[tit]."≫";

// 送信元メールアドレス
$from = $item[option_value];

// 送信先メールアドレス
$to= $item[option_value];

// 本文を整形する---------------------------------------------
$body = '
お名前:  '.$_POST[name].'
住所:   '.$_POST[zip].' '.$_POST[ken].' '.$_POST[add].'
メールアドレス:'.$_POST[mail].'
──────────────────────────────
■内容
'.$_POST[message].'

■家づくりについて
'.$_POST[hoge1].' '.$_POST[hoge2].' '.$_POST[hoge3].' '.$_POST[hoge4].' '.$_POST[hoge5].' 
'.$_POST[hoge6].' '.$_POST[hoge7].' '.$_POST[hoge8].'

■受け取りを希望する無料購読メール
'.$_POST[hoge11].' '.$_POST[hoge12].'
';
// (ここまで)本文を整形する---------------------------------------------

// エンコード対策
//	mb_internal_encoding("utf-8");
//	mb_language("japanese");

// 送信実行
mb_send_mail( $to, $subject, $body, "From: $from");

サーバー構成に左右されない設定

define ('HTML_PATH', $_SERVER[DOCUMENT_ROOT].'/');
define ('SITE_URL', 'http://'.$_SERVER[SERVER_NAME].'/');

このように書いておくことで、設置ディレクトリの変更や、サーバーPathの構成が変わっても、プログラムの設定を書き換えなくても動作する。モチロンのことだがDB設定も同様にする。

複数のサーバーで試験するときは、上記でまかないきれない部分は、サーバー名($_SERVER[SERVERNAME])によりIF分で分岐することで対応が可能になる。

オープンソースを多数扱っていると、この書き方が染み付いてしまいます。