fc2ブログ

OpenStreetMap と YOLP

OpenStreetMap が Google Map の一部有料化ののち
注目を浴びつつあります

チェックインサービスとして有名なFoursquare、
iOS端末用の写真編集アプリiPhoto
などで利用されています

OpenStreetMap がオープンソースというのも
人気の理由かもしれません

最近話題のOpenStreetMapがYOLPで利用可能に!
に具体的な使い方が載っていたので
実際に使って試してみようと思います

また、
OpenStreetMap#01 入門
という動画もありましたので、こちらも参考にしてみました

実際にこのAPIを使いAndroid アプリを作られたかたもいました
Android と OpenStreetMap と HexRinger
に詳細が掲載され、ソースコード
野良アプリともに公開されています

私も Android アプリ作成の勉強していますので
参考にさせていただいています
スポンサーサイト



テーマ : プログラミング
ジャンル : コンピュータ

CSSで重なり順を決める zindex

CSS では、重なり順を zindex という番号で管理しています
デフォルトは0(auto)

番号が大きくなるほど前面に表示されます

同じ番号だと、後ろの要素が前面に表示されます

これを使えば、マウスが要素に重なった時点で
その要素の zindex の値を一番大きくすれば
最前面に表示することができます

これを行うには
var zindex = 1;
というように値を初期化

次に、
.mouseover() の内部で

$(this).css({"zIndex": ++zindex});
というようにカウントアップすればOKです

テーマ : プログラミング
ジャンル : コンピュータ

jQuery UI でドラッグ処理

ドラッグで移動出きるようにする処理は
jQuery のプラグインである
jQuey UI を使うと便利です

ドラッグ処理をするには
Draggable というモジュールを使います

ちなみに、jQuey UI を使う場合
Javascript のライブラリと レイアウトを行うCSSファイルの両方が必要になります

やり方は自分のサーバーにダウンロードして読み込むか
もしくは
CDNから読み込むようにします

CDNから読み込む場合は

ライブラリなら
<script type="text/javascript" src="http://code.jquery.com/
ui/1.8.16/jquery-ui.min.js"
></script>

レイアウトを行うCSSなら
<link rel="stylesheet" href="http://code.jquery.com/
ui/1.8.13/themes/base/jquery-ui.css"
>
というように
URLの指定を行います

これで、準備OKです

あとは、要素をドラッグできるように
.draggable()
を追記すればOKです

テーマ : プログラミング
ジャンル : コンピュータ

javascript で検索アルゴリズム

まず、ready() を作成し
検索ボタンがクリックされたら
テキストフィールをの値を引数にして検索を実行

クリアボタンがクリックされたら、div エレメントの内容をクリアするというもの

まず
ready() の中身から

search属性のボタンがクリックされたら
val() でテキストフィールドの値を取り出して
それを引数にして searcyh() を呼び出し
ちなみに。search() は自作関数

続いて、クリアボタンがクリックされたら、
empty() を使って
display 属性のついている内容をクリア
さらに
title 属性のついているテキストもクリアする

コードにすると
[php]
$(funcrion(){
//検索を実行
$("#search").click(function(){
search($("keyword").val());
});

//検索結果をクリア
$("#clear").click(funcrion(){
$("#display").empty();
$("#title").text("");
});
});
[/php]
となります

続いて
検索する search() という関数の自作

function search(keyword){
//ローディング中
$("#title").text("Loading .....");

$.ajax({
dataType:"jsonp",
data:{
"term":keyword,
"country":"jp",
"media":"music",
"entity":"album",
"limit":"10"
},
url: "http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/wa/wsSearch",
success: funcrion(data){
$("#title").text("");
$.each(data.results,function(i, item){
$("")
.attr("href", item.collectionViewUrl)
.appnd("")
.mouseover(function(){
$("#title").text(item.collectionName);
})
.appendTo("#display");
});
}
});
}

$("#title").text("Loading .....");
は読み込み中の時に表示する文字列です
ネット速度が早いとでないかも...


data:{
"term":keyword,
"country":"jp",
"media":"music",
"entity":"album",
"limit":"10"
},

iTunes Store Web API に送信するパラメータの指定です

ちなみに、
term はキーワードですが、これを
keyword という変数にしておくことで
検索キーワードで調べることが可能になっています
このkeyword は

<input type="text" id="keyword">
で得たデータになっています

ちなみに、jsoncallback は指定していないけど
自動的に設定されるので問題無し

url: "http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/wa/wsSearch",

Web API のURLとなります

最後の
success: funcrion(data){
$("#title").text("");
$.each(data.results,function(i, item){
$("
")
.attr("href", item.collectionViewUrl)
.appnd("")
.mouseover(function(){
$("#title").text(item.collectionName);
})
.appendTo("#display");
});
はデータ取得成功のときの処理で
.attr("href", item.collectionViewUrl)
はhref 属性を web API へ

.mouseover(function(){
$("#title").text(item.collectionName);
はマウスを乗せたときの処理で
これにより 画像にマウスを乗せると
アルバム名が表示されます

ちなみに、iTunes の Web API を使っているため
アルバム画像をクリックすると
iTunes の画面に飛びます

これとアフィリエイトと組み合わせるといろいろとおもしろいことができそうです

iTunes Store Web Service Search API アフィリエイト
と検索すると、ヒントなどがでてきます

テーマ : プログラミング
ジャンル : コンピュータ

iTunes Store Web Service Search API その2


Web API へのリクエストはこのURLに続いて ? を記述
その後に
パラメータ=値 のペアを & で接続して記述して送信します

構文にすると
http://アドレス?パラメータ1=値1&パラメータ2=値2&パラメータ3=値3

というように書きましたが
さすがにこれだけだとわかりにくいので
実際にパラメータをつけてみました

まず、パラメータの解説です

term
キーワード

country
国コード(jp)

media
(音楽なら music)

entity
(種類 音楽アルバムならalbum)

limit
最大データ数

となります

検索結果はJSON形式なので
これをJSONPにするには
callback=関数名を最後に加えます

ちょっと長いので、数行にわけましたが
実際には1行になります

http://ax.phobos.apple.com.edgesuite.net/
WebObjects/MZStoreServices.woa/wa/
wsSearch
?term=autumn
&limit=5
&country=jp
&media=music
&entity=album
&callback=myFunc

このURLをブラウザでアクセスするとJSONPデータがそのまま表示されます

テーマ : プログラミング
ジャンル : コンピュータ

iTunes Store Web Service Search API

マッシュアップサイト作成のため、勉強中です

今回の参考書籍は JavaScript & jQueryレッスンブック―最新jQuery対応





今回、使用するのは iTunes Sore内の製品を検索することのできる
iTunes Store Web Service Search API
です


URLは
http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/wa/wsSearch

Web API へのリクエストはこのURLに続いて ? を記述
その後に
パラメータ=値 のペアを & で接続して記述して送信します

構文にすると
http://アドレス?パラメータ1=値1&パラメータ2=値2&パラメータ3=値3

というようになります

この API は
WAFL でも紹介されています
http://wafl.net/apis/iTunes+Store+Web+Service+Search+API

iTunes Store Web Service Search API
で検索するといろいろとでてきます

また、 wafl では、マッシュアップサイトも紹介されていますので
スキルアップのためにいろいろと調べるのもおもしろいと思います

例えば、今回の場合ですと
iPhoneアプリ人気ランキング&使い方
では使用しているAPI、サイトURLが掲載されています

機能ごとのAPIでも検索できます

テーマ : プログラミング
ジャンル : コンピュータ

ajax()について

Java Script だけでJSONPのデータを受け取って処理するには
script 属性を動的に生成する必要があるので、面倒ですが

ajax()を使うと簡単に記述できます

ということで、構文の解説です

$.ajax(
{
dataType:'jsonp',
data:{ }.
url: 'Web API の URL',
jsonpCallback: 'コールバック関数',
success: function (data){ },
}
)

となります

これだけではわかりにくいので、もう少し解説です

dataType はデータタイプですので
jsonp を指定しています

data: {} には
もし、Web API に渡すデータがあるなら
キーと値のペアで指定します
なければ省略します

url にはそのままの意味です
Web API のURL指定です

jsonpCallback:'コールバック関数'
ですが
これは一般的なWeb API だと
jQuery が Web API とやりとりして関数名をランダム設定しますので
ほとんど不要です

success: function(data){}
ではデータ取得が完了したら行う処理を記述します

テーマ : プログラミング
ジャンル : コンピュータ

コールバック関数について

JSONP について
で外部ファイル sample.js を作成し
これを読み込むことで myFunc() を呼び出し
JSONデータを処理するようにしました

このように、呼び出して処理するような関数を
コールバック関数といいます

まぁそのままのネーミングですが...

この方法はマッシュアップとか WEB API 活用などで
多く使われます

Web API の場合
<script> の src= の後にweb API のURLを指定します

ただし、JSONPを使うにあたって、
関数を知っておく必要があります

プログラミングをおこなうときに、ある程度は関数を知っていないと
プログラムがつくれないように、web API を使う場合にも
関数を知っておく必要があります

次回は、ajax() について書こうと思います

テーマ : プログラミング
ジャンル : コンピュータ

JSONP について

java script だけでは
web APIは使えません

理由は
Java Scriptはクロスドメイン制約で
webベージをロードしたドメイン以外の
サーバとは通信できないから
解決策は
phpで中継プログラムを作成する
もしくは
jsonpを使う
ということになります

jsonp は json with padding のこと

ただし jsonp を使うなら
web APIが jsonp形式でレスポンスを返すことが条件です

以下は
JSONデータから jsonpへの変換です

まずjson形式について

{"name" : "田中一郎",
"mail";"ichiro@example.com"}

これを jsonp形式にすると
myFunc(
{"name" : "田中一郎",
"mail" : "ichiro@example.com"
})

これをみてわかるように
myFunc() の中に
json データを記述しただけです

これを.js拡張子で保存し
<script>で呼び出せば使えるようになります

ちなみに
使うときには
java scriptのプログラムで
function myFunc(data){
処理内容
}
とすればok

要領としては
PHP C java の外部ファイル呼び出しとか
ソースファイル分割と同じ要領です

テーマ : プログラミング
ジャンル : コンピュータ

AmazonEC2 へ iPod touch と IS04 でアクセス

AmazonEC2 でサーバ構築をしていますが
さすがに最初から何度も構築するのはかなり面倒です

イメージを保存して、そこから再度行えばいいのですが
テスト環境を構築するときには
やはり最初から作り直すこともあります

そんなときに、シェルスクリプトで設定できるようにしておき
そしてこれを scp で転送すれば
かなり効率的に作業できます

通常、クライアントとしている ubuntu からなら
公開鍵認証で 端末から簡単にアクセスできるうえ
ファイル転送も scp コマンドで転送できるのですが

電車の中とか、とっさのときにノートパソコンを開ける状況とはかぎりません
念のため、Android 携帯とか、 iPod touch などで
アクセスしたり管理できるようにしておきます

まず、いくつか必要なアプリをいれます
ssh はパスワードではなく、公開鍵認証に対応した
SSHクライアントが必要になります

まず、ipod touch もしくは iPhone なら
Prompt

Android なら
ConnectBot

が使いやすいと思います

次に、ファイル転送ですが、残念ながら
公開鍵認証対応の scp が使えるものは
Android の AndFTP Pro
ぐらいで
ipod touch のほうではみつかりませんでした
SFTP とか対応はあるのですが、公開鍵認証でファイル転送だとまだみつかりません

とりあえず、これでサーバー管理が少しは楽になります

テーマ : Linux
ジャンル : コンピュータ

アプリを使って vim の練習

Linux サーバーを使うと
vim を使うことが多いと思いますが windows テキストエディタから
きた場合、まず操作方法で困ります

そこで、なにかアプリとかで練習できないかな
と調べてみたらありました

Vim検定
というアプリで
iPhone android ともに対応しています

なれるにはよい機会になると思いますので
試してみてはいかがでしょうか

テーマ : Linux
ジャンル : コンピュータ

開発環境をLinux にするときの参考サイト

メインのデスクトップマシンから開発環境まで、自宅のほぼすべての

マシンが Linuxにしてからだいぶたちます

もっとも、周辺機器などは windows でないと動かなかったり
FXとか株とかは、未だに windows での動作しかしないなど問題は
あるわけで、そんなときには windows 使うか
もしくは Vmware Player で仮想化したwindows 使うという
ようにしています

Windowsにサヨナラだ!!~ Fedora15 ~【1/6】
という記事にメリット、デメリットが載っていました

そして、
XAMPPでWeb開発などをしている人は直ぐにVMPlayerに変えたほうが良い【1/8】
に仮想マシンにサーバーを構築する方法が掲載されていますので
これを参考に仮想マシンを構築すれば、サーバー管理などの練習もできます


ちなみに、web サイトをみるときにRSS使うとかなり便利に情報収集できます
おすすめは Google リーダーです
これと、Google アラート と Gmail を組み合わせると
とても快適な情報検索になります

まず、Google アラートで検索したいキーワードを登録
次に、送信先を Gmail に指定
そして、届いたリンク先を開き、RSS対応なら Google リーダーに登録

これで検索する時間がないときにも
ほぼおまかせで検索しておくことができます

ただし、適切なキーワードが必要になりますが...

この方法と、質問などを行えるQ&Aサイトなどを使えば
かなり効率的に問題解決もできます

Linux関連のエラーの場合、エラーメッセージを
コピペして検索したり、
実行したコマンドも一緒に掲載して質問すれば
回答を得られる可能性も増えます


テーマ : Linux
ジャンル : コンピュータ

require を使って共通プログラム作成

C言語や java のソースコード のように
PHPも複数のソースコードに分けることができ、
そしてそれを共有することもできます

例えばDB接続の

<?php
mysql_connect('localhost','root','') die (mysql_error());
mysql_select_db('mydb');
mysql_query('SET NAMES UTF8');
?>


dbconnect.php というファイルに記述し

index.php で呼び出すには
require('dbconnect.php');
というように

require('ファイルパス');
というように記述します

ソースを分割するメリットは多くありますが
セキュリティ関係の向上や、メンテナンスのしやすさなどがあります

また、マッシュアップなどにも応用ができますので、
ぜひ覚えておきたいものです

マッシュアップ関連の書籍としては
アフィリエイターのための Web APIプログラミング入門



がわかりやすくおすすめです

テーマ : プログラミング
ジャンル : コンピュータ

データの一覧画面を作る場合

今回は DBから データを取得し、
一覧画面にする方法です

最初に PHPで MySQL のDB接続を行います

mysql_connect('localhost','root','') or die(mysql_error());
mysql_select_db('mysql');
mysql_query('SET NAMES UTF8');

続いて テーブルからデータを取得し、結果を変数 $recordSet へ格納します

$recordSet = mysql_query('SELECT * FROM my_items ORDER BY id DESC');

DESC を指定すると小さい順に並び替えします

そして、while文を使い、このループ機能を使うことで
全データを書き出します

while($table = mysql_fetch_assoc($recordSet){

print(htmlspecialchars($table['id']);
print(htmlspecialchars($table['maker_id']);
print(htmlspecialchars($table['item_name']);
print(htmlspecialchars($table['price']);
}

これで、データを表示することができます

print()で表示する時に
htmlspecialchars() を使っているのは
html で特殊な文字として扱われる記号などを表示するためです

詳しくは
特殊文字をHTMLエンティティに変換する
に載っていましたが
&lt; と記述しないと HTMLでは < となりません

こういった文字を適切に変換するために
htmlspecialchars() を使っています

ちなみにこれだけだとわけのわからない出力になってしまうため
テーブルにまとめます

<table width="100%">
<tr>
<th scope="col">ID</th>
<th scope="col">メーカー</th>
<th scope="col">商品名</th>
<th scope="col">価格</th>
</tr>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</table>

ちなみに、 scope="col" はCSSの設定です

次に、PHPの処理を組み込みます
PHPのコードは <?php?>
で囲むことで、HTMLの中に部分的に組み込むことができます

<table width="100%">
<tr>
<th scope="col">ID</th>
<th scope="col">メーカー</th>
<th scope="col">商品名</th>
<th scope="col">価格</th>
</tr>
<?php
while($table = mysql_fetch_assoc($recordSet)){
?>

<tr>
<td><?php print(htmlspecialchars($table['id']));?></td>
<td><?php print(htmlspecialchars($table['maker_id']));?></td>
<td><?php print(htmlspecialchars($table['item_name']));?></td>
<td><?php print(htmlspecialchars($table['price']));?></td>
</tr>
<?php
}
?>

</table>

赤字にしたのが PHPを組み込んだ部分です

参考にした書籍では
PHPだけでなく
HTMLのタグ、そしてCSSの知識が必要なため、ある程度の経験が必要になっています


ちなみに、
メーカーを番号ではなく人の名前にするには
mysql_query()

$recordSet = mysql_query('SELECT * FROM my_items ORDER BY id DESC');
となっているのを

$recordSet = mysql_query('SELECT m.name, i.* FROM makers m, my_items i
WHERE m.id=i.maker_id
ORDER BY id DESC');
へ変更し


<td><?php print(htmlspecialchars($table['maker_id']));?></td>


<td><?php print(htmlspecialchars($table['name']));?></td>
と変更し保存します

テーマ : プログラミング
ジャンル : コンピュータ

Android上で動作する開発環境「AIDE」

イマドキのIDE事情 (126) ついに登場! Android上で動作する開発環境「AIDE」

Android上で動作する開発環境「AIDE」
について取り上げられていました

これで、Android 端末そのものでアプリ開発などができるように
なってくるようです

ただ、どのくらいのものが作れるのかはまだ調べている途中なので
また情報が入り次第掲載してみようと思います

android アプリ開発とは別に
公開鍵認証の使えるアプリなど、サーバー管理に使うアプリについても調べてみました

android サーバー管理と検索するとでてきます
最近では安価な値段で AmazonEC2 なども使えますし
レンタルサーバーなどのアプリもでてきています

以前はノートパソコンのみでしたが
電車の中で操作するにはスマートフォンのほうが使いやすいと思いますので
緊急のこともかんがえて、いれておこうと思います

サーバー管理用 Androidアプリ
に載っていましたので、いくつか入れてみました

得に Overlook Fing を使うことが多くなりそうです

テーマ : プログラミング
ジャンル : コンピュータ

フォームからの入力をDBへ保存する場合

今日はちょっと難しめですが、フォームから入力した情報をDBへ保存する場合の処理です

$sql = sprintf('INSERT INTO my_items SET maker_id=%d,
item_name="%s", price=%d, keyword="%s"',
mysql_real_escape_string($_POST['maker_id']),
mysql_real_escape_string($_POST['item_name']).
mysql_real_escape_string($_POST['price']),
mysql_real_escape_string($_POST['keyword'])
);

mysql_query($sql) or die(mysql_error());

このように
%d や %s というようにすれば、入力した数値や文字などを
DBへ POST 送信できるようになります

ちなみに、%s が "" で囲ってあるのは、文字列だからです

%d は数値
%s は文字列の入力に使います

C 言語とかでも使いますので覚えておくと便利です

$_POST は POST 送信するという定数です
GET と POST がありますが
GET だと
GETでは日本語などの全角文字を送信できない
とか
GETには送信できる情報量に制限がある

そして
GETの場合は送信内容がURLとして渡される
つまり内容丸見えです
これは非常にセキュリティを考えるとまずいので
極力POSTを使いましょう

もっと詳しい解説として
GETとPOSTの違い
に解説が載っています

また、重要なことですが
mysql_real_escape_string() は
SQLインジェクション対策です

これは
フォームからの情報で
' OR ''='
つまり
SELECT * FROM testtable WHERE password='' OR ''='';
という実行と同じで
意味は
password フィールドが空 または空が空の場合という条件となっています

これが実行されると、すべてのレコードに条件があてはまり
パスワードによる認証が無効化され、データが盗み出されます

このため、対策として
mysql_real_escape_string()
を使うことで、入力される文字列でSQLにとって危険とされる文字を無効化しておきます


そして、今回は sprintf() を使って書き込みしていますが
$sql = sprintf('INSERT INTO my_items SET maker_id=%d,
item_name="%s", price=%d, keyword="%s"',
mysql_real_escape_string($_POST['maker_id']),
mysql_real_escape_string($_POST['item_name']).
mysql_real_escape_string($_POST['price']),
mysql_real_escape_string($_POST['keyword'])
);


$sql = 'INSERT INTO my_items SET maker_id='
.mysql_real_escape_string($_POST['id']) .' ,
'.item_name="' .mysql_real_escape_string['item_name']) .'",
.price=' .mysql_real_escape_string($_POST['price']) . ',
keyword="' .mysql_real_escape_string($_POST['keyword']). '"';
としても
同じ意味になります

テーマ : プログラミング
ジャンル : コンピュータ

よくわかるPHP正誤サポート




よくわかるPHPの教科書
に修正箇所がかなりあったので、正誤サポートが載っているURLを
メモしておきます

http://book.mycom.co.jp/support/pc/php/
に正誤一覧が載っています

ちなみに、ここからサンプルソースもダウンロードできます

テーマ : プログラミング
ジャンル : コンピュータ

配列のキーはASを使用する

PHP + mysql で
mysql_query() で COUNT を使って件数を取得すると
キーがわかりにくくなります

$recordSet = mysql_query('SELECT COUNT(id) FROM my_items');
$data = mysql_fetch_assoc($recordSet);
とすると

画面に出力するためには

echo '件数は' .$data['COUNT(id)'].'件です';
というようにしますがわかりにくいです

ちなみに . は PHPで文字をつなげる効果ですので、
COUNT(id) が1なら
件数は1件です
というように表示されます

しかし、これではわかりにくいので
このため、対策として AS を使います

というわけで AS でわかりやすさ重視にします

$recordSet = mysql_query('SELECT COUNT(id) AS record_count FROM my_items');
$data = mysql_fetch_assoc($recordSet);

で画面に表示するには
echo '件数は' .$data['record_count'].'件です';

というように、微妙にわかりやすくなります

まぁ実際には出力される結果は同じなのですが
見やすさ重視ということです

コードをかくときに、改行しなくても
C , java PHP などは書けますが
あとでメンテなどのときを考えると見やすいコードをかくことを心がけたいものです

テーマ : プログラミング
ジャンル : コンピュータ

アクセス解析の結果反映は設定後から

数日前、アクセス解析の設定を行いました

ここで判明したのが、アクセス解析のサービスを開始しても
実際に解析されるのは、
設定をしてからということです

つまり、残念ながらその前のアクセスについては解析されません

このため、アクセス解析の設定は早めに行っておくべきということです

アクセス解析の設置の仕方は
アクセス解析を設置しよう! (FC2ブログの場合)
に載っています

テーマ : インターネット
ジャンル : コンピュータ

レコードセットについて

mysql_query() の返り値を
レコードセットと言います

これは、セットという名前のとおりでレコードのセットです

前回実行した
mysql_query('SELECT * FROM my_imtems');
の場合、この検索結果すべてが
レコードセットとして格納されます

この中からデータをとってくるのが
mysql_fetch_assoc()
ですが、

書籍によると言葉の意味が載っていました

fetch とってくる
assoc 連想

ということで、連想配列としてとってくるという意味になるそうです

こういう解説をみていると英語の単語の意味がわかるようになると
プログラムの解読もしやすいのかもしれません

ちなみに、

$recordSet = mysql_query('SELECT * FROM my_items');
$data = mysql_fetch_assoc($recordSet);
echo $data['item_name'];
$data = mysql_fetch_assoc($recordSet);
echo '<br/>'.$data['item_name'];
というようにすると
続けて次のデータが表示されます

.$data のところですが
PHP では . を使うことで、文字列をつなげることができます
主に変数に格納したものを表示するときなどにつかわれます

とくに、HTTPSとHTTPの区別をしたいときとか、切り替え要素のときに
つかうことが多いです

ただし、さすがに毎回書き足していくと、facebook アプリなどで
これを行っていたら、さすがに人力では限界があります
facebook の友達は5000人まで増やせますが
5000回も繰り返すのは正気ではできません

なので、繰り返し処理を行う
while 文なども使います


while($data = mysql_fetch_assoc($recordSet)){
echo $data['item_name'];
echo '<br/>';
}

となります

これで、すべての item_name の内容が記述されます


ほかの関数もありますが、代表的なのが
mysql_fetch_row()
レコードを単純配列として取得
フィールド名にこだわらずに処理するときに使用

mysql_fetch_array()
通常配列と、連想配列の両方を得られる
たぶん、これが一番つかうかも

http://php.net/manual/ja/book.mysql.php
に mysql 関連が載っていますので、用途に応じて使いましょう

テーマ : プログラミング
ジャンル : コンピュータ

変数へ mysql 検索結果の格納

PHP で MySQL を実行する時には

mysql_query() で実行するのですが
SELECTを実行する時には、一度変数に保存します

ちなみに、変数に格納するという方法は、
web api を使ってサイト構築したり、マッシュアップするときにも使われる方法です

今回は

$recordSet = mysql_query('SELECT * FROM my_items');
というように
$recordSet に格納しています

でも、格納しただけでは使えないので
mysql_fetch_assoc() を使います

変数に格納しただけだと
int i=1;

と宣言しただけと同じなので、これだけでは無意味です

この mysql_fetch_assoc() ですが
$data = mysql_fetch_assoc($recordSet);
というように、別の変数にデータを入れるようにします

ちなみに、PHPの場合、
$data のように、
C , java などのように
int とか long とかで宣言せずとも変数を使えたりします

逆に、javascript のようにスクリプト関連でも
var を使って変数宣言するということもありますので
逆にわかりにくいのかもしれませんが....

少々ずれてしまいましたが
解説に戻ると

$recordSet = mysql_query('SELECT * FROM my_items');

変数に
選択するDBテーブルを格納します
今回なら $recordSet に格納しています

$data = mysql_fetch_assoc($recordSet);

検索結果を
変数に格納します
今回なら $data に格納しています

最後に
echo $data['item_name'];

一番最初の
データが表示されます

echo $data['item_name'];
のところは、配列なので、
() ではなく [] で囲っているところに注意しましょう

テーマ : プログラミング
ジャンル : コンピュータ

スタイルクラスの追加と削除


を参考に jQuery の勉強を始めました

java script をある程度行っているなら
比較的覚えやすいと思います

最近では スマホサイト作成に jQuery Mobileを使うため
覚えておくと役立ちそうです

今回はちょっとメモしたかったのが
スタイルクラスの適用する
addClass メソッド

そして
スタイルクラスを除外する
removeClass メソッドです

<style type="text/css">
.sample{
CSS 設定
};
<style>

の設定を
$('li.js').addClass('sample');
で適用

$('li.js').removeClass('sample');
で除外となります

そして、マウスクリックのときに使えそうなのが
toggleClass メソッドです

これは最初に記述すると適用
次は除外
というように交互に作動するものです

$('li.js').toggleClass('sample');
で適用
$('li.js').toggleClass('sample');
で今度は除外となります

ちょっとわかりにくいですが、あとあと使うことが多くなりそうです

テーマ : プログラミング
ジャンル : コンピュータ

php でDB接続

PHP + Mysql のつまづくこともあるので、メモしていきます

mysql で作成したDBへ PHPからアクセスするには

mysql_connect('ホスト名','ユーザ名','パスワード');
でアクセスします

ほとんどの場合、ここにエラー処理も加えるので
mysql_connect('localhost',user','passwd') of die(mysql_error());
というようにして
使います

次に、DBを選択する場合ですが
mysql_select_db('データベース名') or die(mysql_error());
とします

続いて、DBの文字コード設定です
ほとんどの場合UTFー8なので
mysql_query('SET NAMES UTF8');

ちなみに、文字コード設定を間違えると入力したもじが
文字化けします
私は NAMES を NAMEとして文字化けしたことがありました...
修正がかなり面倒でした


そして DB へ接続した状態で SQL を実行するときには
mysql_query(’実行するsql’) or die(mysql_error());
となります


例えば、INSERT を使いたいなら
mysql_query('INSERT .....') or die(mysql_error());
というようになります

ちなみに、'' で囲っているので、sql を実行する時には
""を使うようにします

例えば
INSERT INTO my_items SET item_name='もも';
をじっこうしたいときに、このままだとエラーなので、
INSERT INTO my_items SET item_name=”もも”;
というように "" で囲むようにします

テーマ : プログラミング
ジャンル : コンピュータ

phpMyAdmin でのバックアップ

今回は phpMyAdmin で SQLのバックアップについてです

phpMyAdmin へログインして
DBを選択して
エクスポートをクリックします

エクスポート方法の 詳細をクリックし
出力をファイルに保存する
になっていることを確認し
実行をクリックします

すると、
データベース名.sql
というファイルで保存されます


とりあえず、実際に復元できるかを実験してみます

まず、作成したDBを削除します

削除完了したら、今度は復元です

もう一度同じDB名で作成し
称号順序を
utf8_general_ci
を選択します

次に、インポートで、さきほど保存した SQLファイルを指定して
実行すれば、DBが復元できます

今回、参考にしたPHPの書籍


では
DBを復元する場合、手動で行う必要があるとかかれていましたが
Linux を使っているなら
sql ファイルをコマンドを使うことで実行することもできます

参考サイトとして
サーチマンさんのサイト
ファイルにsqlを書いて、そのファイルを実行する
に掲載されていましたので
Linux 環境ならこちらの方法での復旧もできます

また、phpMyAdmin では、環境にもよりますが
扱えるファイルの大きさに上限があるようなので、
コマンドによる復旧も覚えておいたほうがよさそうです

テーマ : プログラミング
ジャンル : コンピュータ

ubuntu へのPhoneGap インストール

PhoneGapで「ハイブリッドアプリ」を作ろう
という記事をみたので、試しに使ってみたいのですが

なにぶん、開発環境が ubuntu 32bit なので、
32bit ubuntu でもできるか検索してみました

AndroidアプリのためのPhoneGap環境
にその方法が掲載されていました

今週は時間があまりありませんが
現在取りかかっている facebook アプリの勉強でも活用できるかもしれません

これで、facebook アプリをネイティブアプリにできれば面白いと思います

テーマ : プログラミング
ジャンル : コンピュータ

バリューコマースへの登録にはアクセス数が必要


バリューコマース登録のためには
ブログが必要となります

ブログはFC2であるけど
問題は登録するときに記入するアクセス数の記入

アクセス数が一日どのくらい必要かを調べる必要があるということで

さっそくFC2ブログでの
アクセス解析を調べることに

まずは検索で
fc2 アクセス数 取得で
検索し
http://help.fc2.com/analysis/manual/Home/secchi.html
に載っていたので、これを元に設置してみました

アフィリエイト関連の場合、審査があるため、
ある程度の内容を作成しないと審査を通過できない可能性があるようです

テーマ : プログラミング
ジャンル : コンピュータ

ASで名前変更

SELECT i.item_name ,SUM(c.count) FROM my_items i, carts c WHERE i.id=c.item_id GROUP BY c.item_id;
これを実行すると
SUM(c.count)
という名前で表示されますが
意味がわかりにくいです

そんなときに使うのが AS
これを使うことで
出力される名前を
SUM(c.count) から変更できます

ということで
SELECT i.item_name ,SUM(c.count) AS sales_count FROM my_items i, carts c WHERE i.id=c.item_id GROUP BY c.item_id;
とすれば
SUM(c.count) から
sales_count というように名前が変更され出力されます
(ちなみに、表示だけで、実際のデータは変わりません)

これでわかりやすくなります

とくにこまらないのなら、あまり使わないかもしれませんが

テーマ : プログラミング
ジャンル : コンピュータ

DISTINCT BETWEEN IN LIMIT

DISTINCT は 重複をなくす

SELECT item_id FROM carts
を実行すると、全部でてきますが

SELECT DISTINCT item_id FROM carts;
とすれば重複するID がない状態で表示されます


お次に
BETWEEN
これは~の間という使い方をします

SELECT * FROM `my_items` WHERE price>=50 AND price<150;
だと
50円以上、150円以下のものがでます
でもBETWEENを使うともっと簡単にかけます

SELECT * FROM my_items WHERE price BETWEEN 50 AND 149;

これで 50 ~ 149 までの指定になります

で IN の解説
INは複数の値を一気に指定したい場合に使用します

1と3を取り出すには
SELECT * FROM my_items WHERE id=1 OR id=3;
でしたが
INを使えば
SELECT * FROM `my_items` WHERE id IN (1,3);
でOKです
今回は少ないのであまり効果が実感できませんが、後々役立ちます


LIMIT は件数制限をかけます
何万件もあると、検索するのが大変になってくるので
LIMITをつけて制限します
SELECT * FROM carts LIMIT 2;
なら2件に絞れます

また、範囲指定も加納です
SELECT * FROM carts LIMIT 30.10;
とすれば31~40のみに絞り込みできます

30からにはならず、指定した次の番号からになるので注意です

顧客名簿とかの管理とかに使うこともあります

使い方は LIMIT 開始位置, 件数
となります

30,40 というように範囲指定じゃないので注意しましょう

ちなみに、30としたのに31からなのは
データベースなどの配列は0からカウントするからです

プログラムを組むときにもこのルールが摘要されるので
注意しましょう

テーマ : プログラミング
ジャンル : コンピュータ

外部結合(LEFT JOIN,RIGHT JOIN)

UPDATE `carts`set item_id=1,count=2 WHERE id=6;
を実行して

SELECT i.item_name, SUM(c.count) FROM my_items i , carts c WHERE i.id=c.item_id GROUP BY c.item_id;
を実行して、もし値が0だとデータが表示されない

この場合、0を表示するには外部結合を使います

ちなみに、いままで実行したのは内部結合で
こちらは
両方のテーブルにデータが存在していないと結合されないので
データがでてこない

外部結合なら、一方のテーブルにデータがあれば必ず表示されるというもの
ゲーム開発とかには使うかも

では、今度は外部結合してみます

SELECT i.item_name, SUM(count) FROM my_items i LEFT JOIN carts c ON i.id=c.item_id GROUP BY c.item_id;
とすると、0で表示されなかった
ブルーベリー がNULLで表示されます

外部結合には
LEFT JOIN ... ON というように使います

書式で書くと
SELECT FROM ... テーブル1 LEFT JOIN テーブル2 ON 結合条件 WHERE ...

テーブル1はメインなので、全部表示
そのうえで
テーブル2で追加データがあれば、表示するというもの

つまり、今回の例なら
FROM my_items i
なので、
my_items は全部表示

LEFT JOIN carts c
なので、
差分で
carts を表示

差分条件は
ON i.id=c.item_id GROUP BY c.item_id;
なので、
id の値が同じものということになります

ちなみに、RIGHT JOIN というのもあるけど、
要は基準が逆になって右がメインになる
ということです

テーマ : プログラミング
ジャンル : コンピュータ

java script メモ

java script で変数を使うには

var で宣言してから使います
最新記事
検索フォーム
GREEハコニワ攻略サイト
リンク
カテゴリ
月別アーカイブ
フリーエリア
最新記事
FXプライムレート
最新コメント
最新トラックバック