fc2ブログ

price-change:blog

色んな情報テンコモリ

CodeIgneter で メールフォームを作ってみるの巻

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 その2

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 - ジャンル:コンピュータ

CodeIgniter のコントローラにまつわるお話

自分向け補足メモ。

  • URIの第2セグメント、いわゆるメソッド呼び出し部分は、コントローラに _remap() メソッドを追加することで再定義できる!但し、追加すると常に呼び出されるので注意!
  • データ処理済みの出力をさらに処理したい場合は、コントローラに _output() メソッドを追加して処理できる。例えば...
    
    <?php
    class HelloWorld extends Controller {
    
    	function index()
    	{
    		$this->load->view('helloworld_view');
    	}
    
    	function _output($output)
    	{
    		echo $output.'@';
    	}
    
    }
    ?>
    
    とすると、ビューに @ が追記されて表示されるようになる。_remap() メソッド同様、これも常に呼び出されるので注意!
  • メソッドの呼び出しを禁止したい場合は、メソッド名の先頭にアンダースコアを書くこと。すると http://www.example.com/hoge/_foo/ ようなURLにアクセスしても、_foo() メソッドは呼ばれない。
  • コントローラは通常 application/controllers フォルダの中に入れてあるが、ファイルが多くなったりしてフォルダ分け(サブフォルダ)した場合は、http://www.example.com/folder/class/function/ID でアクセスできる。また、URI ルーティング 機能を利用すれば、いじることも可能。
  • コントローラクラスのコンストラクタを使用する場合は、必ず parent::Controller(); で親クラスのコンストラクタを呼び出す。上書きするのを防ぐため。
  • 予約済みのメソッドがあるので注意

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

CodeIgniterの設定値をいじる

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 - ジャンル:コンピュータ

CodeIgniterと.htaccess と私

前回のエントリーで書き忘れていることがありました。

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対策 - ジャンル:コンピュータ

CodeIgniter で へろーわーるど!

まずはお約束の HelloWorld を CodeIgniter で表示させてみたいと思います。とその前に CodeIgniter のURLについてお勉強しなければいけません。ユーザーガイドによるとセグメントベースアプローチを採用していて、検索エンジンにも人間にもわかりやすいように設計されているそうです。ふむふむ。具体例を挙げると

http://www.example.com/hoge/foo/1

の場合、system/application/controllers 内 hoge.phpHogeクラスが呼ばれ→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 のディレクトリ構造は以下のようになっていて、どうやら CodeIgniter_1.5.4 フォルダ内にある index.php にアクセスすると何やら表示される見たいですわ。

ci_dir

おぅ、何てこったい、無事インストールできていれば「Welcome to CodeIgniter!」というページが表示されますぜ旦那。せっかくだから旦那のためにもうちっと調べてみたぜ。どうやら system/application が臭そうですぜ。system/applicateion/controllers 内の welcome.php と system/applicateion/views 内の welcome_message.php が今回の事件に関与しているようだ。

ci_appli_dir

次回へ続く...

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

CodeIgniterをインストールしてみる

何となくPHPのフレームワークをお触りしたくなったので CodeIgniter のお勉強を始めようと思います。よし、まずはダウンロードだ!と思い、http://www.codeigniter.com/から、最新版の Version 1.5.4 をダウンロードしてみました。で、どうすればいいんだろう?と思ってググってみたら、CodeIgniter ユーザガイド 日本語版 という素晴らしいサイトがあったので見てみました。

インストールの解説より引用

CodeIgniter は次の4つのステップでインストールできます:

  1. ZIPパッケージを展開します。
  2. サーバに CodeIgniter のフォルダとファイルをアップロードします。通常は、index.php ファイルがルートになります。
  3. application/config/config.php ファイルをテキストエディタで開き、ベースURLをセットします。
  4. データベースを使用したい場合は、application/config/database.php ファイルをテキストエディタで開き、データベースの設定をセットします。

CodeIgniter のファイルの設置場所を隠すことでセキュリティを高めたい場合は、system フォルダをもっと周知されていない他のものにリネームできます。リネームした場合、メインファイルの index.php を開き、ページの先頭にある $system_folder 変数を付けなおした新しい名前にセットしなければなりません。

これで終わりです!

ワォ!アンビリバボー!ちょーかんたーん。

公式サイト
CodeIgniter - Open source PHP web application framework
日本語解説サイト
CodeIgniter ユーザガイド 日本語版

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

adTOOLを検索フォームに対応させました。

お手軽アフィリエイトツール adTOOL をテキストリンク、スクリプトに続き、検索フォームに対応させちゃいましたYO!検索キーワードを自分で設定出来るので、訪問者にも優しいつくりはずです。いぇい。


powerd by adTOOL

テーマ:アフィリエイター必須ツール - ジャンル:アフィリエイト

検索機能にNGキーワードを追加しました

楽天市場限定ですがNGキーワードを設定できるように設定しました!

例えば FinePix F31fd で検索すると、アクセサリ用品がずらずらと出てきてわかりずらかったのですが、詳細検索で楽天市場のNGィキーワードを「用」、Amazonの最低金額を10000円に設定して再び FinePix F31fd を検索すると本体のみが表示されます。

あと教えて欲しいんですけど、AmazonでNGキーワードって設定できたっけ?

テーマ:アフィリエイター必須ツール - ジャンル:アフィリエイト

携帯アフィリエイトに対応しちゃいました

携帯アフィリエイト

adTOOLをPC版に続き携帯にも対応させてみました。Javascript対応機種ならランキング広告が表示される…はず!未対応でも検索ページへのリンクが表示される…はず!それでも心配ならテキストリンクがあるのでそちらを利用して下さい。すいませんです…

テーマ:携帯でお小遣い稼ぎ - ジャンル:アフィリエイト

PocketHPHを使ってW-ZERO3でphpを動かしてみるの巻

W-ZERO3Perl(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関数で代用してみた。ちょっとした動作確認にぜひお使い下さい。

ソース
実行結果例
PocketHPHスクリーンショット

phpなんかやりたくないよ!perlとかrubyがやりたいんだよ!というかたは下のリンクを参照してくださーい。お役に立てなくごめんなさーい。

テーマ:W-ZERO3 - ジャンル:携帯電話・PHS