2013年2月18日月曜日

UNIX 特定の文字列を含むファイルを検索

find . | xargs grep "探したい文字列"

このコマンドで検索できます。

find . I ←これは大文字のアイなのでご注意ください

2013年2月13日水曜日

ドットインストール phpの基礎(応用編)




データベースへの接続


 今回はMySQLに接続する方法を紹介

 練習用のデータベースを作成
       $ mysql -u root -p

mysql> create database データベース名(今回はTable_in_blog_app
mysql> use データベース名(今回はTable_in_blog_app) 
mysql> create table users(
  -> id int(11) not null auto_increment primary key,
  -> name varchar(50),
  -> email varchar(255),
  -> password varchar(16)
  -> );

 作業ユーザーも設定しておきましょう

mysql> grant all on データベース名(今回はTable_in_blog_app.* to 作業ユーザー名(今回はdbuser005)@localhost identified by 'パスワード'

 try - catch
  トライ以降の命令をやってみてダメだったらキャッチ以降の命令をやりなさいという意味

<?php

try{
            $dbh = new PDO
            ('mysql:host=localhost;dbname=データベース名', 'ユーザー名', 'パスワード');
                                  //dbhはデータベースハンドラのこと、
         //PDOmysqlに接続する方法
         //ここの書き方はお決まりです。
         //ここでデータベースへの接続を試みている

}catch(PDOException $e){                         //エラーが発生した時には
            var_dump($e -> getMessage());   //エラーの内容を取得
            exit;                                                                            //処理を終了
}

echo "success";                     //うまく行ったらサクセスと表示
$dbh = null;              //接続を終了

MySQLに接続してデータを取ってくる方法


<?php

try{
            $dbh = new PDO
            ('mysql:host=localhost;dbname=データベース名', 'ユーザー名', 'パスワード');
}catch(PDOException $e){
            var_dump($e -> getMessage());
            exit;
}

//処理
//全てのユーザーを取得して表示する
$sql = 'select * from users';
$stmt = $dbh->query($sql);//データベースハンドラにquery(sql文の変数)をいれると実行してくれる
foreach ($stmt ->fetchAll(PDO::FETCH_ASSOC) as $user){
            //実行した結果は$stmtfetchAllでとってこれる
            //引数にPDO::FETCH_ASSOCとすると連想配列的にとってきてくれる
            //foreachで一つ一つをユーザーとしてまわしていく
            var_dump($user['name']);
}
            //件数を表示
echo $dbh -> query("select count(*) from users")->fetchColumn(). "records found";
            //fetchColumn()queryを表示
            //切断
            //count()の間にスペースを入れると表示されないので注意
$dbh = null;


データを挿入してみよう!


== 例1 ==
<?php

try{
            $dbh = new PDO
            ('mysql:host=localhost;dbname=データベース名', 'ユーザー名', 'パスワード');
}catch(PDOException $e){
            var_dump($e -> getMessage());
            exit;
}

//処理 プリペアードステートメントを使う
// prepare()の中にsql文を書く
//valueははてなにしておく、

$stmt= $dbh ->prepare("insert into users (name, email, password) values (?, ?, ?)");
//?にはいる値を配列でexecuteに与える
//プリペアードステートメントはエスケープ処理を自動でやってくれる
$stmt ->execute(array("n", "e", "p"));

echo "done";

            //切断
$dbh = null;

== 例2 value(?, ?, ?)じゃわかりにくいという場合==

<?php

try{
            $dbh = new PDO
            ('mysql:host=localhost;dbname=データベース名', 'ユーザー名', 'パスワード');
}catch(PDOException $e){
            var_dump($e -> getMessage());
            exit;
}

//処理 プリペアードステートメントを使う
// prepare()の中にsql文を書く
//valueははてなにしておく、
$stmt= $dbh ->prepare("insert into users (name, email, password) values (:name, :email, :password)");
//(name, email, password)にはいる値を連想配列的にexecuteに与える
//プリペアードステートメントはエスケープ処理を自動でやってくれる
$stmt ->execute(array(":name" =>"n2", ":email"=>"e2", ":password"=>"p2"));

echo "done";

            //切断
$dbh = null;

プリペアードステートメントの違った書き方


<?php

//データベースへの接続
try{
            $dbh = new
            PDO('mysql:host=localhost;dbname=データベース名', 'ユーザー名', 'パスワード');
}catch(PDOException $e){
            var_dump($e->getMessage());
            exit;
}

//処理
$stmt =$dbh->prepare("insert into テーブル名(フィールド名1, フィールド名2, フィールド名3) values(:フィールド名1, :フィールド名2, :フィールド名3)");
//フィールド名プレースフォルダーを変数に当てはめてる
$stmt ->bindParam(":フィールド名1", $変数1);
$stmt ->bindParam(":フィールド名2", $変数2);
$stmt ->bindParam(":フィールド名3", $変数3);

//変数に値を入れていく
$変数1 = "n10";
$変数2  = "e10";
$変数3  = "p10";
//変数を代入したプレースフォルダーが挿入される
//executeと引数なし
$stmt -> execute();

//変数1以外は変更なしに挿入される
$変数1  ="n10x";

$stmt ->execute();
//インサートされたレコードのIDを知りたい
echo $dbh->lastInsertID();

echo "dune";

//切断
$dbh = null;

データの更新と削除の仕方



<?php
try{
            $dbh = new PDO
            ('mysql:host=localhost;dbname=データベース名', 'ユーザー名', 'パスワード');
}catch(PDOException $e){
            var_dump($e ->getMassate());
            exit;
}
//名前がnから始まる人たちのEメールアドレスをダミーに変える
$stmt = $dbh -> prepare("update users set email = :email where name like :name");
//"n%"nから始まるという意味
//update users set email = :email were name like :nameこれはname:nameで指定した形の場合はemail:emailで指定した値にしなさいということ

$stmt -> execute(array(":email" =>"dummy", ":name"=>"n%"));

//パスワードがp10のものを全て削除
//delete form users where password = :passwordとは:passwordが指定した値のもののユーザーを削除しなさい
$stmt = $dbh -> prepare("delete form users where password = :password");
$stmt -> execute(array(":password" =>"p10"));
//削除されたかを表示
echo $stmt ->rowCount() ."records deleted";
echo "done";


Cookieを設定してみよう!

<?php

//Cookie(ブラウザにデータを保存)
setcookie("クッキーの名前","クッキーの値","有効期限");

setcookie('userName', 'taguchi', time()+60*60*24*14);//2週間
setcookie('userName', '', time()-60)//有効期限マイナスにするとクッキーを削除するという命令

//このようにアクセスできる
//複数のページで使い回したいデータがあった場合に便利
echo $_COOKIE['userName'];

セッションを使ってみよう

<?php

//セッション(サーバー側にデータを保存するという仕組み)

session_start();//セッションを使うおまじない

$_SESSION['セッション変数'] = "セッションの値";//これでセッション変数に値をセット
unset($_SESSION['セッション変数']);//セッション変数を削除
echo $_SESSION['セッション変数'];// これでセッション変数の中身が表示される

クラスを使ってみよう


//オブジェクト指向
ユーザーに関するデータや関数をまとめて管理する為の考え方
/*

クラス : 設計図(どういった変数関数があるのかみたいな)
 - メンバー変数
 - メソッド(関数)(何らかの処理を行おう)
 - コンストラクタ(初期化処理、特殊なメドッド)

 インスタンス: クラスを実体化したもの(設計図を実体化)



*/
<?php
//userというクラスを作る
class User{
            //メンバー変数を定義
            public $name;//publicはどこからでもあくせすされてOK
            public $email;//publicではなくprivateにするとclassの外からはアクセスできない
           
            //実体化する時にnameemailを渡されるとすると
            //コンストラクと
            //__constructで出てくるname, emailは上で出てきたname emailとは違う
           
public function __construct($name, $email){//インスタンスかされる時に呼ばれるn引数
                        $this->name = $name; //thisをつけるとclassないでその変数にアクセスできる
                        $this->email= $email;
}


//メソッドを作れる
public function sayHi(){
            echo "hi! my name is" .$this->name;
}
}
//実体化newを使う
//同じようなやり方でいくらでもインスタンスを作れる
//こうするとtomさんやbomさんに設定した変数や関数が使えるようになる
$tom = new User("tom", "dummy@dummy.com");
$bom = new User("bom", "dummy`dummybob.com");
//トムさんの名前を表示
echo $tom->name;
//tom,bomさんのsayHiを表示
echo $tom->sayHi();
echo $bom->sayHi();

クラスの継承

Userというクラスを拡張する

<?php

class User{
            public $name;
            public $email;
           
            public function __construct($name, $email){
                        $this->name = $name;
                        $this->email= $email;
            }
           
            public function sayHi(){
                        echo "Nice to meet you".$this->name;
            }
}
//Userを拡張してSuperUserを作る
//Userのメンバー変数ファンクションメソッドを引き継いで上書きしたり別のメソッドを作ったりできる
class SuperUser extends User{
           
            public function superSayHi(){
                        echo "Hiii! my name is".$this->name;
            }
}
           
            //bomさんはSuperUserを使えるようにする
            $tom = new User("tom", "tomutomu@tomu.org");
            $bom = new SuperUser("bom", "bombom@bommm.org");
           
//$bomさんはSuperUserなのでSupserSayHi()が使える

echo $bom->SuperSayHi();

長くなってきた時にファイルを分割する方法

同じフォルだにclass.phpというファイルを作って
ーーーーーここからーーーーーー
class User{
            public $user;
            public $name;
           
            public function __construct($user, $name){
                        $this->user = $user;
                        $this->name = $name;
            }
            public function sayHi(){
                        echo "Nice to meet you".$this->name;
            }
}
class SuperUser extends User{
            public function superSayHi(){
                        echo "Hiii! my name is".$this->name;
            }
}
ーーーーーここまでーーーーーー
はりつけて、頭に<?phpと書く
こうした外部ファイルはrequire_once('ファイル名')で読み込む
ちなみに

require('..');エラーで強制停止、その都度読み込む
require_once('...'); エラーで強制停止一回だけ読み込んでほしい時につかう

include('...');エラーで警告、その都度読み込む
include_once('...'); エラーで警告、一回だけ読み込む


で、index.phpには以下のようにかいておくと分割されたclassが読み込まれて実行される
<?php
require_once('class.php');


            $tom = new User("tom", "tomutomu@tomu.org");
            $bom = new SuperUser("bom", "bombom@bommm.org");
           
//$bomさんはSuperUserなのでSupserSayHi()が使える


echo $bom->SuperSayHi();