2010年2月24日水曜日

SVNはチェックマーク付きフォルダ内を更新する必要があるんですね。(Tortoise)

tortoiseSVNでどうもうまくファイルが更新されない、と思って調べてみたら、
緑のチェックマークが入ったフォルダ内のファイルを更新しなくてはならないようでした。。
http://hide.xsv.info/tips/svnmanual/


最初のファイル群があったフォルダの配下にそのSVN用フォルダがローカルでつくられたのですが、
そっちのファイルを編集、更新する必要があるのですね。


色々最初は戸惑いますね。SVN..

2010年2月23日火曜日

svn checkout

svnでリポジトリから最新コピーを引っ張ってくるのが、checkoutらしい。

自分でファイルを上げているだけだから必要なさそうに思うが、
やはり大事なことのようなので、まずはやってみた。。

ほんっと、初心者ぶりを露呈していてお恥ずかしいが、うまくいって嬉しかったっす。

以下のサイトが参考になりました。
http://www.caldron.jp/~nabetaro/svn/svnbook-1.5-final/html-chunk/svn.tour.cycle.html#svn.tour.cycle.update

svnで最初にファイルをアップするには、svn import

初めてまともに、開発途中のミニアプリをsvnに上げてみました。
(backlogという無料のsubversionを貸してくれるところのサービスを使用しています。)

svn importがファイルをアップする行為だと知りました。
色々調べて、やっとアップロード(?)できて、ほっとした(^^;

2010年2月10日水曜日

配列中の特定の値を格納するindexを習得したかった。(解決)

配列の中にある特定の値を取り出したくて、どうすればいいか悩みました。

array_keysを使うと良さそうだとわかりましたが、
それだけでもだめで、
最終的にforeachを使うと望んだ結果を得られました。

以下のようにすると、 「2 7」という二つの結果が返ります。
これで、ある配列の中の特定の値を持つindexを習得できるようになりました。
よかた。

$ary=array('a','i','u','e','o','o','a','u');
$ary2=array_keys($ary,"u");
foreach($ary2 as $value){
    print $value." ";
};

それにしても、配列って、奥が深いです。。
したがってというか、配列関連の関数っていっぱいありますね。。

また、foreachも、使用法の理解がまだ漠然としています。
foreach($array as $key => $value)
なんて、使ってきてはいますが、理解がいまだにあやふやなところがあります。。

「キーと値」という言葉をしっかりとすぐ感覚的にわかるぐらい理解しなくてはいけませんね。。

ヒアドキュメントでの最終行にタブを入れてエラー

parse error, unexpected T_STRING,・・・うんぬんが出て、
ダブルクオーテーション'"'が余計だ、というエラーなのにどこにも余計なものが見つからず、
悩んでました。


すると、ヒアドキュメントの最後の行を間違ってタブでインデントを入れてしまっていたのが原因でした。。。orz


簡単なことだったっすね。

2010年2月8日月曜日

配列と日記(カレンダー)の連動。

配列って、まだよく使いこなせていません。
が、とても便利だとはわかってきました。

PHPの参考書を見ると、「条件分岐」の説明があり、大体その次ぐらいに「配列」の説明がお決まりのようにあり、「配列って大事なんだろうな」と思っていました、
が、よく飲み込めませんでした。

最近やっと分かってきたことは、
「PHPなどでは、一連の複数データを扱うことが多い」
ということで、
「そのため、配列に系統だってデータを格納すると便利である」
ということでした。

これって、分かっている方には当たり前すぎるのでしょうが、
「配列」はやっぱりプログラムに親しんでいない人間には最初わかりにくい(と思われる)ですし、
とりあえず自分はまだこんなところにいます(^^;

::::::::::::::::::::::::::::::::::::::::::

さて、今日は複数の値をMySQLからselectし、それをwhileで配列に格納していきました。
これは確かに便利でした。

具体的には、日記システムを作っていて、
一か月のカレンダーtable上の記事のある日の日付に、
 該当日記ページへのハイパーリンクをはってジャンプできるようにさせる、ということが課題でした。

while($row=mysql_fetch_array($sql)){
$diary[]=$row['id'];
$date[]=$row['date'];
}
みたいな感じで格納してゆき、
それを
array_search()を使って、各々の日に記事があるかどうかを判別し、記事がある日は$diary配列のインデックスを返す、ということをさせて、該当記事へのリンクを実現できました。

ああ、嬉しい。。。

カレンダーと日記のシステムは長年の夢でした。
漠然と「あったらいいなああああ」と思っていたことが、
PHP+MySQLで実現できてきて、
とても幸せなワタクシメです。

date型から一桁の月と日の数値を習得するときのメモ。

MySQLでdate型のデータをPHPでselectさせるとき、
一桁の月や日の前に「0(ゼロ)」が加わってしまって、処理が面倒でした。

date_formatを使うといい、ということがマニュアルでわかったので喜びました。

月は%c,日は%eで、0抜きの一桁の数値が習得できました。
http://dev.mysql.com/doc/refman/4.1/ja/date-and-time-functions.html

が、なぜかうまくselectされずまた悩みました。

原因は、
date_format("tourokubi","%Y-%c-%e")みたいにしていたのですが、
カラム名をクオーテーションで囲っていたことでした。

クオーテーションなしで、
select date_format(tourokubi,"%Y-%c-%e") as tourokubi2 というかんじにすると、無事表示されました。

バグ取り道、遥かなり。。。

sprintfでSQL文を書くときに%をうまく扱う方法(解決)

PHPでsprintfを使ってsql文を書くとき、%sなどを使うと便利ですが、
sql文でもwhere likeを使うと、where foo like 'baa%'みたいに%を使うので、
$sql=sprintf("select * from something where foo like '%s%'",$str);
みたいにするとエラーが出て困りました。

MySQLマニュアルを見てもよくわからず、PHPマニュアルを見るとちゃんと対処法が書いてありました^^
http://jp.php.net/manual/ja/function.sprintf.php の例5に書いてあります。

%%と%を二つ重ねるとリテラルとしてエスケープできるとのこと。

'%%s%'みたいにしてみたら、無事行けました。
よかった!

2010年2月1日月曜日

GD imagecreatetruecolorの背景色透過問題(解決)

GDでimagecreatetruecolor()を使うと、背景色が黒に設定されてしまいます。
他の色にするには、imagefillを使うといいのでしょうが、
透過させたい場合は困ります。

(自分は困りました。)

そんなわけで、imagecreatefrompng()をつかって、
予め作った透過PNGを
    $img = imagecreatefrompng("trans.png");
みたいに読み込ませてベースとし、
その上で色々な画像を生成させる、という方式でうまくいきました。
よかった。

以下はGDで生成した透過背景のPNG例です。


■追記
GDでPNGなどを生成すると、該当PHPファイルを指定すれば、それがそのままPNG画像としてブラウザは認識する、ということを知りました。
すごく面白いですね。使えます。
(Thanks to Kinoさん )

■追記2
なんか画像が変でした(^^;
png8で背景PNGを保存したらだめでした。PNG32で保存したらいけました。
ちょっとα値のことがよくわかっていません。要研究なり。

dechex(10進数から16進数へ)


「色彩の値を256といった10進数値からFFといった16進数に変換したいなあ」と思っていたので、関数を知れべたら、
dechex()という関数を知りました。

(dexhexと最初書いて、エラーが出ました(^^;)

これを使うと、for文で0~255までループさせ、その数値を16進数に変換して、テーブルセルのバックグラウンドカラーにprintfなどで代入できて、左の図のようなことができました。

ありがたや。

色を使ったいろいろな表現を考えているので、
dechexはお世話になりそうです。

hexdec()が逆の関数で、これもそのうち使うかな。。





一応、ソースを置いておきます。
表示は右が切れてますが、コピーしたらちゃんとコピーできますね。


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>dechexの応用による、色彩テーブル</title>

<style type="text/css">
table{border-collapse:collapse;} 
td{width:60px;text-align:center;padding:0;}
</style>

</head>

<body>
<table>
<?php
//純色で、数値を上げていく。
for($i=0;$i<256;$i=$i+16){
        $R0=sprintf ("<td bgcolor='#0%s0000'>#0%s0000</td>",dechex($i),dechex($i));
        $G0=sprintf ("<td bgcolor='#000%s00'>#000%s00</td>",dechex($i),dechex($i));
        $B0=sprintf ("<td bgcolor='#00000%s'>#00000%s</td>",dechex($i),dechex($i));
        $R =sprintf ("<td bgcolor='#%s0000'>#%s0000</td>"    ,dechex($i),dechex($i));
        $G =sprintf ("<td bgcolor='#00%s00'>#00%s00</td>"    ,dechex($i),dechex($i));
        $B =sprintf ("<td bgcolor='#0000%s'>#0000%s</td>"    ,dechex($i),dechex($i));
    if($i<16){echo "<tr>".$R0.$G0.$B0."</tr>";}
    else{echo "<tr>".$R,$G,$B."</tr>";}
}
//混色で、二色目の数値を上げていく。
for($i=0;$i<256;$i=$i+16){
        $RG0=sprintf ("<td bgcolor='#ff0%s00'>#ff0%s00</td>",dechex($i),dechex($i));
        $GB0=sprintf ("<td bgcolor='#00ff0%s'>#00ff0%s</td>",dechex($i),dechex($i));
        $RB0=sprintf ("<td bgcolor='#0%s00ff'>#0%s00ff</td>",dechex($i),dechex($i));
        $RG =sprintf ("<td bgcolor='#ff%s00'>#ff%s00</td>",dechex($i),dechex($i));
        $GB =sprintf ("<td bgcolor='#00ff%s'>#00ff%s</td>",dechex($i),dechex($i));
        $RB =sprintf ("<td bgcolor='#%s00ff'>#%s00ff</td>",dechex($i),dechex($i));
    if($i<16){echo "<tr>".$RG0.$GB0.$RB0."</tr>";}
    else{echo "<tr>".$RG.$GB.$RB."</tr>";}
}
?>
</table>
</body>
</html>

http://labo.web-do.com/php/colors/dechex2.php
にファイルを置いておきました。

テーブルだから、文字列を選択できるのがなんか嬉しい。 。