Codeigniter の基礎の基礎について分かったので、練習がてらにメールフォームを作ってみたわ。
まずはコントローラ部分
<?php
class Contact extends Controller
{
function index()
{
// ヘルパ関数・ライブラリ呼び出し
$this->load->helper(array('form', 'url'));
$this->load->library('validation');
// バリデーションルール設定
$rules['email'] = "trim|required|valid_email|xss_clean";
$rules['subject'] = "trim|required|max_length[20]|xss_clean";
$rules['message'] = "trim|required|max_length[100]|xss_clean";
$this->validation->set_rules($rules);
// バリデーションエラー時のフィールド名設定
// 詳しくは system/language/フォルダ名/validation_lang.php
$fields['email'] = 'メールアドレス';
$fields['subject'] = '件名';
$fields['message'] = 'メッセージ';
$this->validation->set_fields($fields);
// エラーメッセージを囲うタグを設定(デフォルトはpタグ)
$this->validation->set_error_delimiters(
'<div class="err">', '</div>');
// 検証エラーまたは初回アクセス時
if ($this->validation->run() == FALSE)
{
$this->load->view('contact/form');
}
// 検証OK
else
{
// emailライブラリ呼び出し
$this->load->library('email');
// 文字コード
$config['charset'] = 'utf-8';
// 設定初期化
$this->email->initialize($config);
// 差出人
$this->email->from(
$this->input->post('email'),
$this->input->post('email'));
// 送り先(自分宛)
$this->email->to('自分のアドレス');
// 件名
$this->email->subject($this->input->post('subject'));
// メッセージ
$this->email->message($this->input->post('message'));
$data = array();
// メール送信OK
if (@$this->email->send())
{
$data['result_message'] =
'メールは正しく送信されました。';
}
// メール送信エラー
else
{
$data['result_message'] = 'メール送信エラー';
}
$this->load->view('contact/send_result', $data);
}
}
}
?>
そして問い合わせフォーム部分。site_url() は urlヘルパー関数、form_open()、form_close() は formヘルパー関数。$this->validation うんぬんは…ソース見れば分かると思う。
<html>
<head>
<link rel="stylesheet" type="text/css" href="<?=site_url()?>css/contact.css" />
<title>問い合わせ</title>
</head>
<body>
<h1>問い合わせ</h1>
<?php if ($this->validation->error_string):?>
<div id="err-box">
<?=$this->validation->error_string; ?>
</div>
<?php endif;?>
<p>CodeIgniter で作ったメールフォーム</p>
<?=form_open('contact')?>
<dl>
<dt>メールアドレス</dt>
<dd><?=$this->validation->email_error?><input type="text" name="email" value="<?=$this->validation->email?>" class="ipt-bg" /></dd>
<dt>件名</dt>
<dd><?=$this->validation->subject_error?><input type="text" name="subject" value="<?=$this->validation->subject?>" class="ipt-bg" /></dd>
<dt>メッセージ</dt>
<dd><?=$this->validation->message_error?><textarea name="message"><?=$this->validation->message?></textarea></dd>
</dl>
<input type="submit" value="送信" />
<?=form_close()?>
</body>
</html>
で、送信結果ビュー。anchor() は urlヘルパーの関数ですよ。
<html>
<head>
<link rel="stylesheet" type="text/css" href="<?=site_url()?>css/contact.css" />
<title>問い合わせ</title>
</head>
<body>
<h1>問い合わせ</h1>
<p><?=$result_message?></p>
<p><?=anchor('contact', 'もう一度'); ?></p>
</body>
</html>
これじゃあ説明足んねーよー。わかんねーよー。バーカバーカ。って方は、実際にメールフォームをいじって観察しましょう。メールは送信されないようにしてあるのでお気軽にどうぞ。
スポンサーサイト
テーマ:PHP - ジャンル:コンピュータ
CodeIgniter で へろーわーるど!ではコントローラ上で直接 Hello World を表示させていましたが、今回はビューを使って表示させたいと思ってお勉強なのだ。
まずは以下のようなビュー(hello_world_view.php)を作成して application/views に保存する。
<html>
<head>
<title>Test</title>
</head>
<body>
<h1>Hello World!</h1>
</body>
</html>
んで、コントローラ側で $this->load->view('View名'); で読み込むのだ。
<?php
class HelloWorld extends Controller {
function index()
{
$this->load->view('hello_world_view');
}
}
?>
データを渡したい場合は、$this->load->view('View名', $data); で渡すべし。$data は配列またはオブジェクトで。
配列バージョン
<?php
class HelloWorld extends Controller {
function index()
{
$data = array('hello'=>'Hello', 'world'=>'World!');
$this->load->view('hello_world_view', $data);
}
}
?>
オブジェクトバージョン
<?php
class HelloWorld extends Controller {
function index()
{
$data = new Hoge();
$this->load->view('hello_world_view', $data);
}
}
class Hoge
{
public $hello = 'Hello';
public $world = 'World!';
}
?>
下記のビューに配列・オブジェクトどちらで渡しても結果は同じ
<html>
<head>
<title>Test</title>
</head>
<body>
<h1><?php echo $hello .' '.$world;?></h1>
</body>
</html>
<?php echo 変数名;?> が面倒くさいなら config.php の $config['rewrite_short_tags'] を TRUE に設定すれば、
<?=変数名?> でもOK牧場
<html>
<head>
<title>Test</title>
</head>
<body>
<h1><?=$hello .' '.$world;?></h1>
</body>
</html>
多次元配列をループさせい場合は
<?php
class HelloWorld extends Controller {
function index()
{
$data = array('str' => array('Hello', 'World!'));
$this->load->view('hello_world_view', $data);
}
}
?>
<html>
<head>
<title>Test</title>
</head>
<body>
<h1>Loop</h1>
<ul>
<?php foreach($str as $list):?>
<li><?=$list;?></li>
<?php endforeach;?>
</ul>
</body>
</html>
で可能姉妹。
テーマ:PHP - ジャンル:コンピュータ
自分向け補足メモ。
テーマ:PHP - ジャンル:コンピュータ
CodeIgniter の設定値をいじくってみた。取りあえずいじりそうなポイントだけ上げてみた。
- index.php
- $system_folder
- システムフォルダ名を指定
- $application_folder
- アプリケーションフォルダ名を指定
- application/config/config.php
- $config['base_url']
- あなたのサイトのURL 例:http://www.example.com/ 最後のスラッシュを忘れずに。
- $config['index_page']
- indexページ名を指定
- $config['url_suffix']
- URLのおケツに色々くっつけたい場合は指定 例:".html"
- $config['language']
- 言語ファイル
- $config['charset']
- 文字コード
- $config['enable_query_strings']
- デフォルトではGETは消去されて使えないため、使いたい場合のみTRUEに。
- $config['controller_trigger']
- GET使用時のコントローラ変数名 例:index.php/blog/index → index.php?c=blog&m=index
- $config['function_trigger']
- GET使用時のメソッド変数名 例:index.php/blog/index → index.php?c=blog&m=index
- application/config/autoload.php
- $autoload['libraries']
- 自動的に読み込むライブラリ(配列で指定)
- $autoload['helper']
- 自動的に読み込むヘルパー(配列で指定)
- $autoload['plugin']
- 自動的に読み込むプラグイン(配列で指定)
- $autoload['config']
- 自動的に読み込む設定ファイル(配列で指定)
- $autoload['language']
- 自動的に読み込む言語ファイル(配列で指定)
- application/config/routes.php
- $route['default_controller']
- 指定したコントローラが無い場合に呼ばれるコントローラ
こんな感じかしらー。ウララー。
テーマ:PHP - ジャンル:コンピュータ
前回のエントリーで書き忘れていることがありました。
http://www.example.com/hoge/foo/1 は正確には http://www.example.com/index.php/hoge/foo/1 なので、前者のままでは表示されません。.htaccessファイルでrewriteしましょう。
RewriteEngine on
RewriteCond $1 !^(index\.php|css|images|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L]
多分これで http://www.example.com/hoge/foo/1 でも表示されるはずです。
テーマ:SEO対策 - ジャンル:コンピュータ
まずはお約束の HelloWorld を CodeIgniter で表示させてみたいと思います。とその前に CodeIgniter のURLについてお勉強しなければいけません。ユーザーガイドによるとセグメントベースアプローチを採用していて、検索エンジンにも人間にもわかりやすいように設計されているそうです。ふむふむ。具体例を挙げると
http://www.example.com/hoge/foo/1
の場合、system/application/controllers 内 hoge.php の Hogeクラスが呼ばれ→fooメソッドの引数に1が渡されます。Hogeコントロールクラスのコードはこんな感じ
<?php
class Hoge extends Controller
{
function index()
{
echo 'index!';
}
function foo($id)
{
echo $id;
}
}
?>
ちなみに、http://www.example.com/ にアクセスした場合は、system/application/config 内 routes.php の $route['default_controller'] で設定してあるクラスが呼ばれますよ(デフォルトは welcome)。また、http://www.example.com/hoge/ にアクセスした場合は、indexメソッドが呼ばれます。それともう一つ、必ず Controller クラスを extends しましょう。いぇい。ブギウギ。
そんな感じで、HelloWorldクラスを書いてみました。
<?php
class HelloWorld extends Controller {
function index()
{
echo 'Hello World!';
}
}
?>
http://www.example.com/helloworld にアクセスして無事表示されました。以上終わり。
テーマ:プログラミング - ジャンル:コンピュータ
前回のエントリーCodeIgniterをインストールしてみるで何事もなくインストールできたので今回は動作確認してみようと思います。CodeIgniter のディレクトリ構造は以下のようになっていて、どうやら CodeIgniter_1.5.4 フォルダ内にある index.php にアクセスすると何やら表示される見たいですわ。
おぅ、何てこったい、無事インストールできていれば「Welcome to CodeIgniter!」というページが表示されますぜ旦那。せっかくだから旦那のためにもうちっと調べてみたぜ。どうやら system/application が臭そうですぜ。system/applicateion/controllers 内の welcome.php と system/applicateion/views 内の welcome_message.php が今回の事件に関与しているようだ。
次回へ続く...
テーマ:PHP - ジャンル:コンピュータ
何となくPHPのフレームワークをお触りしたくなったので CodeIgniter のお勉強を始めようと思います。よし、まずはダウンロードだ!と思い、http://www.codeigniter.com/から、最新版の Version 1.5.4 をダウンロードしてみました。で、どうすればいいんだろう?と思ってググってみたら、CodeIgniter ユーザガイド 日本語版
という素晴らしいサイトがあったので見てみました。
インストールの解説より引用
CodeIgniter は次の4つのステップでインストールできます:
- ZIPパッケージを展開します。
- サーバに CodeIgniter のフォルダとファイルをアップロードします。通常は、index.php ファイルがルートになります。
- application/config/config.php ファイルをテキストエディタで開き、ベースURLをセットします。
- データベースを使用したい場合は、application/config/database.php ファイルをテキストエディタで開き、データベースの設定をセットします。
CodeIgniter のファイルの設置場所を隠すことでセキュリティを高めたい場合は、system フォルダをもっと周知されていない他のものにリネームできます。リネームした場合、メインファイルの index.php を開き、ページの先頭にある $system_folder
変数を付けなおした新しい名前にセットしなければなりません。
これで終わりです!
ワォ!アンビリバボー!ちょーかんたーん。
- 公式サイト
- CodeIgniter - Open source PHP web application framework
- 日本語解説サイト
- CodeIgniter ユーザガイド 日本語版
テーマ:PHP - ジャンル:コンピュータ
お手軽アフィリエイトツール adTOOL をテキストリンク、スクリプトに続き、検索フォームに対応させちゃいましたYO!検索キーワードを自分で設定出来るので、訪問者にも優しいつくりはずです。いぇい。
テーマ:アフィリエイター必須ツール - ジャンル:アフィリエイト
楽天市場限定ですがNGキーワードを設定できるように設定しました!
例えば FinePix F31fd で検索すると、アクセサリ用品がずらずらと出てきてわかりずらかったのですが、詳細検索で楽天市場のNGィキーワードを「用」、Amazonの最低金額を10000円に設定して再び FinePix F31fd を検索すると本体のみが表示されます。
あと教えて欲しいんですけど、AmazonでNGキーワードって設定できたっけ?
テーマ:アフィリエイター必須ツール - ジャンル:アフィリエイト

adTOOLをPC版に続き携帯にも対応させてみました。Javascript対応機種ならランキング広告が表示される…はず!未対応でも検索ページへのリンクが表示される…はず!それでも心配ならテキストリンクがあるのでそちらを利用して下さい。すいませんです…
テーマ:携帯でお小遣い稼ぎ - ジャンル:アフィリエイト
W-ZERO3でPerl(PerlCE)やらRuby(ruby-mswince)が動かせるのなら、phpも動かせるんじゃね?と思って調べてみたらありました。PocketHPHです。
ActiveSync経由でインストールして、スタート→プログラム→PocketHPH Serverをクリックで起動させます。Today画面に現れるHPHアイコンをクリック→statusをクリックか、IEを立ち上げhttp://127.0.0.1:9000/statusを直接打ち込んで下さい。
と、公式サイトのフォーラムに書いてあったのですが...動かない!なぜじゃーなぜじゃーと一日考え諦めかけた時、女神様は微笑んでくれました。とても単純なことなのですが、http://localhost:9000でOKでした。えへへ☆
PocketHPHの特徴を上げると
- 関数が限定されている
- 変数は必ず宣言しなければならない
- 参照渡し
- <? ?>で囲う
- エラーが出た場合はソースのエラー部分を赤く表示してくれる。
- SQLite3対応
ってところでしょうか?まだいじり始めたばかりなのでよく分かりません。あ、あともしかしたらShift-jis限定かもしれない。自分の環境だけかもしれないけど、utf-8なんかだと文字化けする...困るわぁ...
困ると言えば、ソースを書いてる時、エディタとブラウザを行ったり来たりするのが面倒なので、ブラウザ上で出来るように簡単なスクリプトを書いてみた。eval関数がなかったのでcreate_function関数で代用してみた。ちょっとした動作確認にぜひお使い下さい。
- ソース
-
- 実行結果例
-
phpなんかやりたくないよ!perlとかrubyがやりたいんだよ!というかたは下のリンクを参照してくださーい。お役に立てなくごめんなさーい。
テーマ:W-ZERO3 - ジャンル:携帯電話・PHS