SSブログ

SQLiteデータベース更新 [SQLite]

SQLiteのデータベース更新ですが、以下のSQL発行APIとSQLを覚えるだけです。

resource sqlite_query ( resource $dbhandle , string $query )   
 dbhandle  SQLite データベースリソース。手続きに従って、 sqlite_open() から返されます。 このパラメータは、 オブジェクト指向言語型メソッドを使用する場合は不要です。   
 query 実行するクエリ。
クエリ内のデータは 適切にエスケープ する必要があります。  
 返り値この関数は結果ハンドルを返します。失敗した場合に FALSE を返します。 レコードを返すクエリの場合、結果ハンドルは sqlite_fetch_array()sqlite_seek() のような関数で使用することができます。クエリの型によらず、この関数はクエリが失敗した場合にFALSE を返し ます。  

SQLもさほど難しくはありません。梅酒データベースで実際に使用したSQL文です。

●レコード追加
 $query = "INSERT INTO Umesyu (title,desc,maker,materials,alcMax,alcMin,capacity,price,other1,other2,other3)VALUES(
'".$title."','".$desc."','".$maker."',
'".$materials."','".$alcMax."','".$alcMin."',
'".$capacity."','".$price."','".$smell."',
'".$sweet."','".$after."','".$other1."',
'".$other2."','".$other3."')";

●レコード削除
 $query = "DELETE FROM Umesyu WHERE id = ".$id;

●レコード更新
 $query = "UPDATE Umesyu SET title='".$Umesyu->title."',
desc='".$Umesyu->desc."',
maker='".$Umesyu->maker."',
materials='".$Umesyu->materials."',
alcMax='".$Umesyu->alcMax."',
alcMin='".$Umesyu->alcMin."',
capacity='".$Umesyu->capacity."',
price='".$Umesyu->price."',
smell='".$Umesyu->smell."',
sweet='".$Umesyu->sweet."',
after='".$Umesyu->after."',
other1='".$Umesyu->other1."',
other2='".$Umesyu->other2."',
other3='".$Umesyu->other3."' WHERE id = ".$Umesyu->id;

●全レコード読み込み
 'SELECT * FROM Umesyu';


nice!(0)  コメント(12)  トラックバック(0) 
共通テーマ:日記・雑感

SQLiteオープン/クローズ [SQLite]

PHPでSQLiteを使用する方法です。PHP5ではSQLiteライブラリを追加インストールせずにSQLiteデータベースと連携するアプリケーションを開発することが出来ます。

SQLiteの操作ですが、通常データベースオープン→SQL発行→データベースクローズのような手順となります。

今回はデータベースのオープン/クローズ関数を見てみましょう。
1.sqlite_open()
 SQLiteデータベースをオープンする。データベースが存在しない場合は作 成する 。

resource sqlite_open (
  string $filename [, int $mode = 0666 [, string &$error_message ]] )
 filename SQLite データベースのファイル名。もしこのファイルが存在しない場合、 SQLite はファイルを生成しようとします。
 mode  ファイルのモード。
 rror_message 参照として渡され、エラーが発生した場合に データベースがオープンできなかった原因を説明する 記述的なエラーメッセージを保持するために設定されます。
 返り値 成功時にリソース (データベースハンドル)、失敗時に FALSE を返します。

2.sqlite_close()
 オープンされたSQLiteデータベースを閉じる。

 void sqlite_close ( resource $dbhandle
 dbhandle  SQLite データベースリソース。 sqlite_open() の戻り値です
 返り値無し 



nice!(0)  コメント(6)  トラックバック(1) 
共通テーマ:日記・雑感

SQLiteの特徴 [SQLite]

SQLiteについて勉強しましたのでメモっておきます。

1.パブリックドメインでの提供
 著作権などの権利が放棄された状態で提供されています。なので、誰でも自由に利用でき、商用/使用を問わず無料で使用できます。

2.データベースサーバが無い
 各種ライブラリがデータベースを直接操作するため、インストールのが不要です。デスクトップアプリや携帯電話などで使用用途が考えられます。GoogleのAndroid端末でも採用されてますね。

3.1データベース1ファイル
 ファイルをコピーするだけでバックアップ可能なため、管理が簡単です。

4.データ型を意識せずに利用できる
 データ型を定義せずにテーブルを作成でき、データ型に関係なくデータを追加できます。


私はDBについてよく知らないのですが、そんな私でもSQliteなら出来そうです。 




nice!(0)  コメント(10)  トラックバック(0) 
共通テーマ:日記・雑感

twitterでフォローを増やす方法 [twitter]

最近、以下のようなデータ入力のバイトが募集されており話題になっております。これが本当ならかなり高額のバイトなので怪しいですが。

フォロー1件は1クリックで出来るので、1分間に60クリック(1秒1クリック)だと、時給54000円(15円×3600秒)ですか。ありえませんね。

私なら1秒に2,3クリックできます。

 案件No.25040 Twitterで「フォロー1件につき15円のバイト
 今、世間でハヤっているTwitterで「つぶやく」お仕事です。

給料は、1人のフォロー人数が増えたら1件15円。ドンドンつぶやいてください!
内容は、弊社が用意したTwitterアカウントでログインして頂き、そのアカウントで、「つぶやく」だけの簡単なお仕事です。
採用前にお試しをして頂いてから、以降の継続が可能かどうかを判断して頂きます。
簡単なプロフィールを記載の上、ご応募下さい。
お名前、ご住所、電話番号(携帯可)、連絡先のメールアドレス、年齢、Twitterの経験 有りor無し、1日にできるお仕事の時間
以上
よろしくお願いいたします。・・・・・・


しかも、

前回紹介したツールを使うと簡単です。

http://refollow.com/refollow/index.html

まずフォロワーが少ない人(500人以下)を探します。少ない人の方がフォロワーが被ってなかったりします。

Users who are followed by:にその人の名前を入れてUpdateを押下します。その人をフォローしている人の一覧が出てきます。

次にI'm not Following にチェックを入れると自分がフォローしていない人が絞り込めます。

あとはチェックを入れてFollowボタンを押すだけですね。





楽天市場で探す

twitterゲーム [twitter]

twitterではとにかくフォロワーの数を増やしていかなくてはならない。これはひとつのゲームのようなもので、ルールやコツをつかんでいく必要がある。

やり始めたころは、とにかくフォローしていくことで増えていたフォロワーも徐々に増えなくなってくるのだ。

そういう時は、以下のような人に絡んでみましょう。うまく返事を返してくれるとフォロワーが増えます。

1.フォローしている人の中でよくつぶやいている人

2.フォロワーの多い人

3.芸能人、有名人

中にはツールなどでつぶやいている人もいます。なかなか返事が来ないので今期よく絡んで行きましょう。

大げさでもいいので興味を引きそうな話題についてつぶやくと効果的です。

フォローしてくれた人は必ずフォローしましょう。

しかし、フォローが増えてくるとフォロー漏れを起こしてしまいます。

フォロー漏れ対策には、これを使うと便利です。

http://refollow.com/refollow/index.html

Secure Loginしてアクセス許可します。
Following Me にチェックするとフォローしてくれている人のアイコンが表示されます。そして、I'm not Followingにチェックするとその中でフォローしてない人の一覧が表示されます。

すべてにチェックを入れて、Followボタンを押下するとフォローができます。


twitterでアクセスアップ [twitter]

最近、twitterやってます。

一部のブログがtwitterに対応してたり、楽天の商品を簡単に紹介できたりするからです。

日々、フォローしてくれる人も増えて、アクセス数クリック数も一気に伸びました。

しかし、クリック数の割にアフィリエイトの実績はありません。

思うにフォローしてくれる人って、普通の人じゃないんです。

NPO代表なり、なんとかコンサルタントからネットショップ運営してたり、何らかの肩書きを持っています。その人達自身がビジネスでtwitterをしているのです。

もっと普通の人のフォローを増やさないといけないですね。

それともう一つあります。キャッチコピーです。

140文字という限られた文字数で売れるキャッチコピーを作る必要があります。





ジオプラスでAjaxできた [ジオプラス]

前回述べたようにジオプラスではコンテンツとCGIのURLのドメインが異なるため、通常でクロスドメイン問題が発生しています。

●コンテンツ(HTML)
 http://www.skillworker.net/

●CGI(Perl、PHP)
 http://cgi.skillworker.net/


そのため、通常ではAjaxを用いてサーバ側のCGIを動かすことが出来ません。ところが、CGI用のドメインを用いてもコンテンツを表示させることが出来ます。そうするとドメインが同じcgi~になるので、クロスドメインとならないのです。

現在のところは、この方法しかないですね。

Ajax(prototype.js)-PHP-SQliteを使用したサンプルです。ラジオボタンとリストボックスがまだうまく動きませんね。

http://cgi.skillworker.net/test/sqlite/umesyu.html

 





nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

ジオプラスでAjaxは鬼門 [ジオプラス]

こんにちわ。ジオプラスでAjaxサンプル作成中にハマっています。prototype.jsを使用するとブラウザを意識せずにHTTPリクエストを送信できるのですが、そのHTTPリクエストが送信されません。

 Prototype.jsは、Sam Stephenson氏を中心とするチームによって開発されているAjax対応JavaScriptライブラリです。

調べてみたところ、IEではAjaxを用いた通信を行うと、GETメソッドの場合一度実行されるとデータがキャッシュされて、2回目以降の通信はそのキャッシュされたデータを読みに行くようになってしまいます。

この回避方法ですが、HTTPレスポンスに対してブラウザがキャッシュしないよう以下のようなレスポンスヘッダを返してあげなければいけません。
header("Cache-Control:no-cache, no-store");
header("Pragma:no-cache");

しかし、これだけでもまだHTTPリクエストが送信されません。HTTPリクエスト側で何か対応しなければいけないようです。対応方法は2つあります。

①HTTPリクエストヘッダに'If-Modified-Since'を付加する。
②GETメソッドで取得する先のURLにユニークIDを付加する。

実際のソースコードは以下になります。
function sendRequest(url){
    var paramList = "time=" + (new Date().getTime());

    new Ajax.Request(url, {
        method:"get",
        requestHeaders: ['If-Modified-Since', '01 Jan 1970 00:00:00 GMT'],
        parameters: paramList,
        onSuccess: function(xmlhttp) {
        notes = eval('('+xmlhttp.responseText+')');
        refreshListBox(notes);
        }
    });
}

しかし、まだまだダメです。FireFoxではOPTIONリクエストが送信されますが、IEはウンともスンとも言いません。
なぜFireFoxではOPTIONメソッドが送信されるのでしょうか?本来はGETメソッドのはずです。FireFoxでは、仕様で一旦HTTPメソッドOPTIONSでApacheに問い合わせ、クロスドメイン通信が許可されているかを確認してからGETメソッド等で実際の通信を行なうようになっているようです。しかし、その後GETメソッドが送信されていませんのでAjaxができません。

そう、ジオプラスではコンテンツとCGIのURLのドメインが異なるため、クロスドメイン問題が発生しているのです。

●コンテンツ(HTML)
 http://www.skillworker.net/

●CGI(Perl、PHP)
 http://cgi.skillworker.net/

ちなみにJSONPを使ってみましたが、同じ結果です。最近のブラウザではセキュリティが強化されているようです。セキュリティの設定を変えればよいのかもしれませんが、サイトに来てくれるユーザに設定変更させるわけにはいきません。というよりしてくれません。
JSON with paddingの略

Javascriptの非同期通信でよく使われるXMLHttpRequestオブジェクトにはSame-Originポリシー存在し、クロスドメインアクセスができない。

一方,scriptタグを用いると,ドメインの異なるサーバに置いているスクリプトファイルを読み込むことができる。この仕組みを利用し、scriptタグのsrcに、データを取得できるAPIURLを指定し,ドメインの異なるサーバからデータを取得する仕組みの総称として、JSOPという言葉が使われる。JSONP用のAPIでは、関数名+取得データをjson形式で表記して引数とした形式(例.callbackFunc({id:1000,name:aaa}))のレスポンスが一般的で、APIから返されるコールバック関数と同じ名前の関数(callbackFunc(jsonData))をクライアント側で定義しておけば、データを読み込んだ際にそのコールバック関数が実行される。動的にscriptのDOMを生成することで、非同期でデータが取得できるようになる。


とりあえず、ジオプラス内でもAjaxが動くように対応中です。次回には対策を紹介したいと思います。あー大変。

SQLiteでも使ってみるか [SQLite]

まず、ツールをインストールしましょう。いろんなツールがありますが、ジオプラスはSQLite2(バージョン2.8.17)ですのでTkSQLite を使ってみたいと思います。
スタンドアロン版をダウンロードしましょう。


TkSQLite
Standalone executable binary (sqlite 2.8.17 / 3.4.0)
http://reddog.s35.xrea.com/wiki/TkSQLite.html


このままだと英語なので、環境変数LANGにjaを設定します。
SQLite2.jpg


起動したらメニューから、①[ファイル]→[SQLite2DBを新規作成]でDBを作成します。ジオプラスでは、アップロードできる拡張子が決まっていますのでumesyu.dbとしましょう。(umesyu.sqliteは使用できません。)


SQlite1.jpg


今回は、梅酒データベースを作ってみたいと思います。
必要となりそうなデータを挙げて見ましょう。

 変数説明 
 idINTEGER PRIMARY KEY プライマリーキー
 title text 銘柄
 desc text 説明
 maker text 製造者
 materials text 原材料
 alcMin INTEGER アルコール分
 alcMax INTEGER アルコール分
 capacity INTEGER 容量
 price INTEGER 価格
 smell  INTEGER  香り
 sweet  INTEGER  甘み
 after  INTEGER  後味
 other1 text 拡張用1
 other2 text 拡張用2
 other3 text 拡張用3

②に以下のSQL文を入力して、[データベース]→[SQL実行]を行うとDBが作成されます。
CREATE TABLE Umesyu (
id INTEGER PRIMARY KEY,
title text,
desc text,
maker text,
materials text,
alcMin INTEGER,
alcMax INTEGER,
capacity INTEGER,
price INTEGER,
smell INTEGER,
sweet INTEGER,
after INTEGER,
other1 text,
other2 text,
other3 text);

nice!(2)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

ジオプラスでJSON [ジオプラス]

Yahoo! UI LibraryやScript.aculo.usの使用法を勉強し紹介してきました。
そろそろ本格的にAjaxに入ろうとしていたところ、またまた問題発生です。

現在以下の書籍で勉強中です。
10日でおぼえるAjax 入門教室
Ajaxでサーバと通信するためJSON形式でデータを扱いたいのですが、json_encode()はPHP5.2から標準になったそうです。
私の使っているジオプラスはPHP5.1.4なのです。

どうりで、JavaScriptからAjaxが出来ないわけです。

そこで、またまた調べてみました。

●PEAR::Services_JSON
ダウンロード(http://mike.teczno.com/JSON.tar.gz)

ジオプラスの場合は、
/geo_cgi_private/JSON.php
に配置します。

使い方は簡単です。
 <?php
define( 'MYSMARTY_DIR', '/geo_cgi_private/' );
require_once ( MYSMARTY_DIR .'JSON.php' );

$arr = array(
    array(
        
"name" => "データ1",
        
"url"  => "URL1"
    
),
    array(
        
"name" => "データ2",
        
"url"  => "URL2"
    
)
);

$json = new Services_JSON;
$encode $json->encode($arr);
header("Content-Type: text/javascript; charset=utf-8");
echo 
$encode;
?>



この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。