MW211 EXIT

devlog
jQuery/Ajax入門(2)前回の訂正
2011年11月30日
自分で自分の一部をリロードする場合、以下のようにと書いたが認識が間違っていた。
┌──────────────────────────────────────┐
│$("#ajax").load("index.php #ajax");                                         │
└──────────────────────────────────────┘

入力側(右の#ajax)はそれ自身を示すが、出力側(左の#ajax)はそれ自身にではなく
それの中身つまり内側に出力するように指示する命令なのだ

つまり、リロードを繰り返していくと、以下のようなイメージとなり
入れ子が重なりブラウザがおかしくなってしまう。
┌──────────────────────────────────────┐
│<div id="ajax">                                                             │
│  <div id="ajax">                                                           │
│    <div id="ajax">                                                         │
│      <div id="ajax">                                                       │
│        :                                                                  │
└──────────────────────────────────────┘

なので、以下のように初期状態で段差をつけて定義してあげて…。
┌──────────────────────────────────────┐
│<div id="ajax_in">                                                          │
│  <div id="ajax_out">                                                       │
└──────────────────────────────────────┘
以下のように、出力側(左)が入力側(右)より一段上になるようしてあげねばならない。
┌──────────────────────────────────────┐
│$("#ajax_in").load("index.php #ajax_out");                                  │
└──────────────────────────────────────┘
こうすれば「#ajax_in」の一段下、つまり「#ajax_out」に
「#ajax_out」が上書されるので想定通りとなる。
分類:jQuery
PDO/SQL発行のまとめ
2011年11月29日
まずは、以下のような感じでオブジェクトを作る。
#「…」の部分は各環境で違うので省略
┌──────────────────────────────────────┐
│$dbh = new PDO(…);                                                         │
└──────────────────────────────────────┘

その後、ざっと以下のような方法がある
┌──────────────────────────────────────┐
│$dbh->exec('DELETE FROM 表;');                                              │
├──────────────────────────────────────┤
│foreach ($dbh->query('SELECT * FROM 表') as $row) {                         │
├──────────────────────────────────────┤
│$sth = $newPDO->prepare('DELETE FROM 表 WHERE ID = :id;');                  │
│$sth->bindValue(':id', $id, PDO::PARAM_INT);                                │
│$sth->execute();                                                            │
├──────────────────────────────────────┤
│$sth = $newPDO->prepare('SELECT * FROM 表 WHERE ID = :id;');                │
│$sth->bindValue(':id', $id, PDO::PARAM_INT);                                │
│$sth->execute();                                                            │
│foreach ($sth->fetchAll(PDO::FETCH_ASSOC) as $row) {                        │
└──────────────────────────────────────┘

まず、exec()メソッド、単純に更新系SQLを実行したい場合にはこちらで。
戻り値は処理結果(何件作用したか)だけなので、SELECT文の参照系SQLには使えない。

参照系SQLの場合は、query()メソッドで。
戻り値に行毎に配列でデータが返ってくる。

SQL文中に変数を使いたい場合は、prepare()メソッドを使う。
これでオブジェクトを作り、bindValue()で変数を指定し、execute()で実行。
fetchAll()を使うとデータを取得できる。(fetch()なら一件ずつ取得)
更新系SQLなら、execute()までで終わり。

ややこしいので、PDOを使うならprepare()メソッドを使う方式に統一して、
気が向いたらショートカット的にexec()やquery()を使うって感じだろうか。
#query()はexec()も兼ねているっぽいけど…
分類:PDO
jQuery/チェックしましたね
2011年11月28日
┌──────────────────────────────────────┐
│if (!$("input:checked[type=checkbox][name^=xxxx]")[0]) {                    │
│  alert("チェックしてください。");                                          │
│  return false;                                                             │
│}                                                                           │
└──────────────────────────────────────┘
先日、チェックしていない時に警告ダイアログを出す方法に触れたが、
逆にチェックした場合に警告を出したいケースもある。
「チェックしたけど、本当に更新していいの?」みたいな確認。

やり方は簡単、先の条件式を反転させるだけ。
┌──────────────────────────────────────┐
│if ($("input:checked[type=checkbox][name^=xxxx]")[0]) {                     │
│  alert("チェックしてください。");                                          │
│  return false;                                                             │
│}                                                                           │
└──────────────────────────────────────┘
分類:jQuery
PHP/ヒアドキュメントで定数を使う
2011年11月27日
ヒアドキュメントってのは以下みたいなやつだ。(かなり重宝している)
┌──────────────────────────────────────┐
│echo <<<___HTML___                                                          │
│結果は、{$result}です。                                                     │
│___HTML___;                                                                 │
└──────────────────────────────────────┘

でも、定数だと反応してくれない(この場合「成功」ではなく「RESULT」が表示される)
┌──────────────────────────────────────┐
│define(RESULT, '成功');                                                     │
│echo <<<___HTML___                                                          │
│結果は、{RESULT}です。                                                      │
│___HTML___;                                                                 │
└──────────────────────────────────────┘

ま、一旦変数に代入すりゃ回避できるのだが…。
┌──────────────────────────────────────┐
│$result = RESULT;                                                           │
│echo <<<___HTML___                                                          │
│結果は、{$result}です。                                                     │
│___HTML___;                                                                 │
└──────────────────────────────────────┘
なんか一気にやってしまいたい。

そこで、サブメソッドを使う方法。
┌──────────────────────────────────────┐
│echo <<<___HTML___                                                          │
│結果は、{$this->def(RESULT)}です。                                          │
│___HTML___;                                                                 │
│- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - │
│private function def($define) {                                             │
│  return $define;                                                           │
│}                                                                           │
└──────────────────────────────────────┘
「return $define;」の部分は「return constant($define);」ならより丁寧か。

それじゃ、静的メソッドにしちゃって
どこからでも簡単に使えるようにしたらいいじゃん、と思ってやってみた。
┌──────────────────────────────────────┐
│echo <<<___HTML___                                                          │
│結果は、{Edit::def(RESULT)}です。                                           │
│___HTML___;                                                                 │
└──────────────────────────────────────┘
答えはNG。ダメでした。
先頭の「$」が肝らしく、これがないと反応してくれない。
分類:PHP
JavaScript/リロード
2011年11月26日
毎回リロードするならこれ。
┌──────────────────────────────────────┐
│setInterval(function(){処理;}, リロード間隔);                               │
└──────────────────────────────────────┘
リロード間隔は、マイクロ秒で指定する。

一回きりのリロードの場合はこれ。
┌──────────────────────────────────────┐
│setTimeout(function(){処理;}, リロード間隔);                                │
└──────────────────────────────────────┘
これで、画面全体をリロードすれば、元に戻るので毎回リロードと同等になる。
分類:JavaScript
jQuery/Ajax入門(1)
2011年11月25日
Ajaxがよくわからないので、わかり次第記録していく(jQueryを利用しちゃう)。

まずは、部分リロードの方法。
┌──────────────────────────────────────┐
│<meta http-equiv="Pragma" content="no-cache"/>                              │
│- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - │
│<script type="text/javascript" src="js/jquery….js"></script>               │
│- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - │
│<script type="text/javascript">                                             │
│$(function(){                                                               │
│  $("button").click(function(){                                             │
│    $("#ajax").load("index.php #ajax");                                     │
│  })                                                                        │
│});                                                                         │
│</script>                                                                   │
│- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - │
│<button>最新の状態を取得</button>                                           │
│- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - │
│<div id="ajax">                                                             │
│<?php echo date('YmdHis');?>                                                │
│</div>                                                                      │
└──────────────────────────────────────┘
ボタンを押すことによって、「index.php」を画面ごとリロードしていたものを
部分的にリロードしたい場合の例。

div等のID(この場合は「ajax」)で範囲指定した部分のみ上書される。
この例だと、ボタンを押すごとに、時刻文字列のみが更新される。

キャッシュを利用されると時刻文字列に変化がおきないので
「<meta http-equiv="Pragma" content="no-cache"/>」をつける必要があるみたい。

※注意:訂正があります、jQuery/Ajax入門(2)を必ず読んでください
分類:jQuery
jQuery/チェックボックスがチェックされているか
2011年11月24日
「id="abc"」のチェックボックスがチェックされている場合に「true」、
チェックされていない場合に「false」を取得したい場合は、以下のいずれかで。

まずは、以下が推奨。
┌──────────────────────────────────────┐
│$('#abc').prop('checked')                                                   │
└──────────────────────────────────────┘
他にもいろいろある。
┌──────────────────────────────────────┐
│$('#abc').is(':checked')                                                    │
├──────────────────────────────────────┤
│$('#abc:checked')[0]                          ($('#abc:checked').length > 0)│
├──────────────────────────────────────┤
│$(':checkbox#abc:checked')[0]        ($(':checkbox#abc:checked').length > 0)│
├──────────────────────────────────────┤
│$('#abc').attr('checked')                           ※attrとpropの違いに注意│
├──────────────────────────────────────┤
│$('#abc').get(0).checked                                                    │
└──────────────────────────────────────┘
分類:jQuery
JavaScript/小数点以下桁数チェック
2011年11月23日
JavaScriptの場合は、こう。
┌──────────────────────────────────────┐
│var decimal = 値.split(".");                                                │
│var 桁数 = (decimal[1]) ? array[1].length : 0;                              │
└──────────────────────────────────────┘
分類:JavaScript
PHP/小数点以下桁数チェック
2011年11月22日
┌──────────────────────────────────────┐
│$decimal = explode('.', $値);                                               │
│$桁数 = isset($decimal[1]) ? strlen($decimal[1]) : 0;                       │
└──────────────────────────────────────┘
「123.456」の場合、小数点以下桁数「3」桁と判定できる。
分類:PHP
PHP/乱数
2011年11月21日
「0~9」の範囲で、整数の乱数を発生させたい場合
┌──────────────────────────────────────┐
│rand(0, 9)                                                                  │
├──────────────────────────────────────┤
│mt_rand(0, 9)                                                               │
├──────────────────────────────────────┤
│floor(lcg_value() * 10)                                                     │
└──────────────────────────────────────┘
昔は乱数の種を設定しないといつも同じ結果となっていたので
「rand()」では「srand()」を、「mt_rand()」では「mt_srand()」を
事前に実行する必要があったみたいだが、今は自動でやってくれるので必要ないみたい。
#「lcg_value()」は元々そういうのは不要

で、「rand()」と「mt_rand()」の違いだが、「mt_rand()」の方がよりよいらしい。
具体的には高速みたい。
「mt_rand()」を使うのがおすすめみたい。
分類:PHP
前へ 1 2 3 次へ