2010年5月28日金曜日

テーブル名にハイフンはご法度

MySQLでテーブル名にハイフンを使うのは避けるのが吉。
どうしても付けたい場合は、バッククオートで囲むといいらしいが、避ける方が後々のためかな。

と思って、前にアンダースコアで命名したテーブル名を、
良く確認しないでハイフンだったと思ってselectしたら、
エラーが出て、しばし悩んだ(笑)

よって、「ハイフンご法度」と自分に覚え聞かせるために、この記事を書いています。

2010年5月25日火曜日

「三項演算子」、とっつきにくいが、覚えると便利。

三項演算子が使えると、かなりコーディングがすっきりして便利ですね。
なかなか使いこなせなかったのですが、
一度覚えると楽でした。

例えば
$var=$check==1?"checked":"";
みたいな形で書いていきますが、
if($check==1){
$var="checked";
}else{
$var="";
}
と書くより早いですね。

ありがたや。。

2010年5月23日日曜日

tortoiseSVNでのコミットショートカット(Ctrl+Enter)

tortoiseSVNでのコミットする時は、
Ctrl+Enterで一発だった。

マウスを握るのが面倒だったので、ありがたい。

2010年5月22日土曜日

PHP内でのsql文。。

PHPファイル内で、

$sql="alter table test rename to test2";
mysql_query($sql);
などとすれば(DBへの接続文はここでは省略)、
簡単にデータベースが変更できてしまうのですね。

知識として分かっていましたが、
やってみて、あまりの速さとあっけなさに、驚きを覚えました。

便利でもあり、かなり恐ろしくもあり。

2010年5月19日水曜日

等号記号は、二つで「等しい」の意味でしたね。。

Fatal error: Can't use function return value in write context in
というエラーが出て怒られて、しばし悩んでいました。

一晩寝たら、理由が思いついたのですが、
「=」(等号記号)の使い方間違いが原因でした。

要するに、=をイコール(等しい)の意味で使ってしまっていたので、
if(strlen($text)=7){・・・}
みたいな書き方をしていたのでした。。。

「==」と、二つの等号記号が必要でしたね。
いまだに間違えます。
まあ、小学校の時代から、この記号は「左右が等しい」という使い方をしてきたので、
その癖で書いてしまいますね。

以後、気をつけるべし、自分。

正規表現で、テーブルタグを一掃。

tableタグを一掃したくて、正規表現を書いてみたら、
うまくいったようなのでメモです。

$text="<tr><td><img>";
$pattern="(<t(d|r|able).*?>|<\/t(d|r|able).*?>)";
$result=preg_replace("/$pattern/","",$text);
echo $result;

今、tableで組んだ古いスタイルのサイトをリニューアル中なので、これで一気に取り組めそうです。
正規表現って、すごいすね。

「.*?」という「貪欲でない」正規表現、かなり使えますね。
これがないと、他の部分まで食ってしまう。

以下、PHPマニュアルの参照箇所です。

http://jp.php.net/manual/ja/regexp.reference.repetition.php


(■追記:&nbsp;もたくさん仕込まれていることしばしばなので、ついでに
$pattern="(<t(d|r|able).*?>|<\/t(d|r|able).*?>|&nbsp;)";
としてみました。)

正規表現のエスケープに関してのメモ

PHPにおける正規表現のメタ文字の一覧がマニュアルにあったのでメモです。
http://jp.php.net/manual/ja/regexp.reference.meta.php


[](文字クラス)内にあるかないかで、エスケープする必要のある文字が変わるのは分かっていても、
あやふやだったので、このページが参考になりました。

要するに[]内では、
\と
^と(文字クラス内の最初で使われる場合のみ)
-と
]
の四つだけのようですね。(ほんとかな。。マニュアルにはそう書いてあると自分には読めました。正確にはマニュアルをご参照ください。)

文字クラス内では、その他の文字はエスケープする必要が無い、ということでしょうか。
それなら簡単でありがたいです。

2010年5月17日月曜日

正規表現で、メルアドだけ抜き出したメモ。

正規表現で、以下のように名前の後に<>(小なり、大なり記号)でくくられた形式のメールアドレスを抜き取りたいと思い、うまくいったのでメモです。

「.*?」という正規表現がポイントでした。
「.*」が任意の一文字の0回以上の繰り返しですが、
そのままだと一番最後の「<」のところまでいってしまうので、 「?」をその前に付けてやると、”貪欲でない”選択となって、各><で囲まれた部分部分を抜き出してくれました。 「.*?」、ありがたや。 (以下のアドレスはもちろんダミーです。アットマークも全角文字になっています。)

$text="太郎<a@example.com>, 花子<b@example.com>,";
$text.="次郎 <c@example.com>,良子 <d@example.com>";
$result=preg_replace("/>.*?</",",",$text);
echo $result;

2010年5月14日金曜日

郵便番号データのインポート

郵便番号のインポートをしようと思い、方法を探していたら、以下のサイトが参考になりました。
http://plaza.rakuten.co.jp/pgmemo/diary/200512110000/


LOAD DATA LOCAL INFILE '/path/KEN_ALL.CSV'
INTO TABLE `sample_zip`
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'

というようにクエリを発行する、というのですが、
ローカルのxampp上ではどこにCSVファイルを置き、パスはどのように書くのか、少し迷いました。

で、以下のようにパスを指定したらいけました。
「¥(Web上だとバックスラッシュに化けそうなので、ここでは全角で表記しています。)」にする必要はなく、普通のスラッシュ区切りでいけました。

LOAD DATA LOCAL INFILE 'C://xampp/mysql/KEN_ALL.CSV'
INTO TABLE `zip`
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"';

0.532秒で全件を登録できた、というので、MySQL恐るべし、と感動しました。
(あ、テーブル名もzipに替えてます。念のため。。)

■追記:
データが大きすぎて、全件インポートできていませんでした。。
やはりデータを絞る必要があるかな、と。

お勉強ですな。。

order byの位置に注意。

sql文で、order byの位置を、whereの前に書いてエラーとなり、はまりました。

order byはwhere句の後ろに書かねばなりませんね。
注意すべし、自分。

URLの正規表現による自動リンク処理

正規表現で、URLを探し、自動的にリンクさせる関数のメモ。
簡易的ですが。。

長すぎるURLは60字でトリムして表示。

function url($text){
 $regex="s?https?:\/\/[a-zA-Z0-9;\/?:@&=\+$,\-_\.!~*'\(\)%#]+";
 if(strlen($text)>60){
  $text2=mb_substr($text,0,60);
  $text2=sprintf("%s...",$text2);
 }else{
 $text2=$text;
 }
 echo preg_replace("/$regex/","<a href=\"\\0\"
      target=\"_blank\">$text2</a>",$text);
}

array_search()は配列が第二引数

array_search()は第二引数が配列。第一が、探すべきvalue。

返るのは、最初に見つかったindex番号。
なければFALSEを返すはずだが、0が返ることもあるので注意。
の様子。

2010年5月13日木曜日

複数単語のハイライト

複数単語をハイライトさせようと思い、試行錯誤して出来たので、メモです。

function highlight($content,$word){
  if(is_array($word)){
   $num=count($word);
   $lighted[0]=$content;
   for($j=0;$j<$num;$j++){
    $k=$j+1; //$kを$jの先に進めておく。
//一単語ずつハイライトしていったものを格納。
    $lighted[$k]=str_replace($word[$j],
      "<span class='highlight'>{$word[$j]}</span>",$lighted[$j]);
   }
   return $lighted[$num];
  }
  else{
   $lighted=str_replace($word,"<span class='highlight'>{$word}</span>"
     ,$content);
   return $lighted;
  }
 }

2010年5月9日日曜日

tortoiseSVNで競合に悩み。

tortoiseSVNで、黄色い三角のビックリマークが出て、コミットもできず、clean upも機能しなくてまいっていました。

結局、一度exportを実行してから「edit conflict」を選択し、競合を解消する必要がありました。

黄色い三角のビックリマークは「競合」の意味だったのですね。

以下のサイトが参考になりましたm(_ _)m

http://hide.xsv.info/tips/svnmanual/conflict/

radioボタンの文字部分もクリッカブルに

radioボタンの文字部分をクリックしても選択できるようにしたいと思い、ググって実装したのでメモ。

<input type="radio" id="id1" name="name1" value="1">
<label for="id1">radio1</LABEL>

といったように、inputタグにidを命名してやり、labelでforの対象に、先ほどのidを指定してやればOKに。

ちょっと親切。

参考になったサイト:http://fefnir.com/school/5-1.htm

2010年5月7日金曜日

正規表現でURL(リンクメモ)

正規表現でURLを判別し、リンクを自動的に適用したい、と思ったので、ググったリンクメモ。

http://www.din.or.jp/~ohzaki/perl.htm#httpURL

なんかまだよく分かりませんが、
最近、正規表現のポケットリファレンスを買ったし、本気でだんだん勉強するつもりでおります。はい。

使いこなせるとかなり素晴らしいでしょうね。

千里の道も、一歩から。。

file名の取得メモ

ファイル名を取得するために、
   echo $_SERVER['PHP_SELF'];
を使おうかと思ったが、ファイル名だけ習得すればいいので、
  $dir=dirname(__FILE__).DIRECTORY_SEPARATOR;
  $file=str_replace($dir,"",__FILE__);
  echo $file;
の方が良い感じだった。

関数化してシンプルに使いたいが、今のところ外部ファイルで独自関数化すると、その外部ファイル名が習得されてしまうので、うまくいっていない。

また、定数化したら便利だろうかと思ったが、定数は一度定義されるとそのまま、と知らず、再定義ができないなど面倒だったのでパスすることに。

PHP5.3からは、__DIR__というマジック定数が用意されたようだが、まだ環境が整備されていないことがありそうなので、これもパスすることに。