2012年3月16日金曜日
2012年2月20日月曜日
php ture false nullて
$hantei_txt = array(
array("","ダブルクオート空文字")
,array('',"シングルオート空文字")
,array(0,"数値ゼロ")
,array(1,"数値1")
,array(01,"数値01")
,array("0","文字列ゼロ")
,array("1","文字列イチ")
,array(TURE,"ture")
,array(FALSE,"false")
,array("TURE","文字列 ture")
,array("FALSE","文字列 false")
,array(null," NULL")
,array("null","文字列NULL")
);
$count_num = count($hantei_txt);
for($i = 0; $i < $count_num; $i++){ if($hantei_txt[$i][0]){ echo $hantei_txt[$i][1]."="; echo "hit"; }else{ echo $hantei_txt[$i][1]."="; echo "none"; } echo "
";
}
ダブルクオート空文字=none
シングルオート空文字=none
数値ゼロ=none
数値1=hit
数値01=hit
文字列ゼロ=none
文字列イチ=hit
ture=hit
false=none
文字列 ture=hit
文字列 false=hit
NULL=none
文字列NULL=hit
array("","ダブルクオート空文字")
,array('',"シングルオート空文字")
,array(0,"数値ゼロ")
,array(1,"数値1")
,array(01,"数値01")
,array("0","文字列ゼロ")
,array("1","文字列イチ")
,array(TURE,"ture")
,array(FALSE,"false")
,array("TURE","文字列 ture")
,array("FALSE","文字列 false")
,array(null," NULL")
,array("null","文字列NULL")
);
$count_num = count($hantei_txt);
for($i = 0; $i < $count_num; $i++){ if($hantei_txt[$i][0]){ echo $hantei_txt[$i][1]."="; echo "hit"; }else{ echo $hantei_txt[$i][1]."="; echo "none"; } echo "
";
}
ダブルクオート空文字=none
シングルオート空文字=none
数値ゼロ=none
数値1=hit
数値01=hit
文字列ゼロ=none
文字列イチ=hit
ture=hit
false=none
文字列 ture=hit
文字列 false=hit
NULL=none
文字列NULL=hit
2012年1月16日月曜日
smartyで文字列加工
修飾子
変数が空の場合のデフォルト値{"test1"|default:"????"}
{""|default:"????"}
エスケープ
{"
{"'
htmlタグの削除
{"test"|strip_tags}
時間
{$smarty.now}{$smarty.now+60*60*24|date_format:"%w"}
{$smarty.now|date_format:"%Y年%m月%d日%h時%M分%S秒"}
改行文字を変換
{$data|nl2br}
スペース
を変換
{$data|strip:""}
テンプレート内で変数を生成
{assign var="num" value="99999"}
テンプレート内の値は{$num}
smarty オブジェクトで操作
require_once('MySmarty.php');
require_once('user_bean.php');
$uses=array();
$uses[] = new user_bean(1,"test_1","2011/01/01");
$uses[] = new user_bean(2,"test_2","2010/01/01");
$uses[] = new user_bean(3,"test_3","2009/01/01");
$mysmarty = new MySmarty();
$mysmarty->assign('msg','hello MySmarty');
$mysmarty->assign('uses',$uses);
$mysmarty->display('index.tpl');
?>
//beanクラス
<?php
class user_bean{
//プロパティ
public $name;
public $id;
public $birth;
//メソッド
function __construct($id,$name,$birth){
$this->id = $id;
$this->name = $name;
$this->birth = $birth;
}
public function getage(){
return floor((time()-strtotime($this->birth))/(60*60*24*365));
}
}
?>
//テンプレート
{foreach from=$uses item=use}
<p>id {$use->id}</p>
<p>名前 {$use->name}</p>
<p>歳 {$use->getage()}</p>
{/foreach}
require_once('user_bean.php');
$uses=array();
$uses[] = new user_bean(1,"test_1","2011/01/01");
$uses[] = new user_bean(2,"test_2","2010/01/01");
$uses[] = new user_bean(3,"test_3","2009/01/01");
$mysmarty = new MySmarty();
$mysmarty->assign('msg','hello MySmarty');
$mysmarty->assign('uses',$uses);
$mysmarty->display('index.tpl');
?>
//beanクラス
<?php
class user_bean{
//プロパティ
public $name;
public $id;
public $birth;
//メソッド
function __construct($id,$name,$birth){
$this->id = $id;
$this->name = $name;
$this->birth = $birth;
}
public function getage(){
return floor((time()-strtotime($this->birth))/(60*60*24*365));
}
}
?>
//テンプレート
{foreach from=$uses item=use}
<p>id {$use->id}</p>
<p>名前 {$use->name}</p>
<p>歳 {$use->getage()}</p>
{/foreach}
Smarty 連想配列
//プログラム
<?php
require_once('MySmarty.php');
require_once('DB.php');
$dbh = DB::connect('mysql://root:mysql@127.0.0.1/test');
$data = array( "id" => 1,
"shimei"=>array("ue"=>"yamada",
"shita"=>"taro")
);
$mysmarty = new MySmarty();
$mysmarty->assign('msg','hello MySmarty');
$mysmarty->assign('data',$data);
$mysmarty->display('index.tpl');
?>
//テンプレート
<h1>{$msg}</h1>
{$data.id}<br />
{$data.shimei.ue}<br />
{$data.shimei.shita}<br />
//表示
yamada
taro
<?php
require_once('MySmarty.php');
require_once('DB.php');
$dbh = DB::connect('mysql://root:mysql@127.0.0.1/test');
$data = array( "id" => 1,
"shimei"=>array("ue"=>"yamada",
"shita"=>"taro")
);
$mysmarty = new MySmarty();
$mysmarty->assign('msg','hello MySmarty');
$mysmarty->assign('data',$data);
$mysmarty->display('index.tpl');
?>
//テンプレート
<h1>{$msg}</h1>
{$data.id}<br />
{$data.shimei.ue}<br />
{$data.shimei.shita}<br />
//表示
hello MySmarty
1yamada
taro
Smarty DBからレコードを取り出し、テンプレート表示 テスト
mysql> insert into test_1(id,name) values(1,'test'),(2,'test2');
Query OK, 1 row affected (0.05 sec)
//レコードの確認
mysql> select * from test_1;
+------+-------+
| id | name |
+------+-------+
| 1 | test |
| 2 | test2 |
//プログラム
<?php
$dbh = DB::connect('mysql://root:mysql@127.0.0.1/test');
//sql文の作成
$sql = $dbh->prepare("SELECT * FROM test_1");
$data = array();
$rs = $dbh->execute($sql);
//配列へ挿入
while($row = $rs->fetchRow(DB_FETCHMODE_ASSOC)){
$data[]=array("id" => $row['id'],"name" => $row['name']);
}
$mysmarty = new MySmarty();
$mysmarty->assign('msg','hello MySmarty');
$mysmarty->assign('data',$data);
$mysmarty->display('index.tpl');
?>
//テンプレート部分
<h1>{$msg}</h1>
{foreach from=$data item=datum}
<p>{$datum.id}</p>
<p>{$datum.name}</p>
{/foreach}
Query OK, 1 row affected (0.05 sec)
//レコードの確認
mysql> select * from test_1;
+------+-------+
| id | name |
+------+-------+
| 1 | test |
| 2 | test2 |
//プログラム
<?php
$dbh = DB::connect('mysql://root:mysql@127.0.0.1/test');
//sql文の作成
$sql = $dbh->prepare("SELECT * FROM test_1");
$data = array();
$rs = $dbh->execute($sql);
//配列へ挿入
while($row = $rs->fetchRow(DB_FETCHMODE_ASSOC)){
$data[]=array("id" => $row['id'],"name" => $row['name']);
}
$mysmarty = new MySmarty();
$mysmarty->assign('msg','hello MySmarty');
$mysmarty->assign('data',$data);
$mysmarty->display('index.tpl');
?>
//テンプレート部分
<h1>{$msg}</h1>
{foreach from=$data item=datum}
<p>{$datum.id}</p>
<p>{$datum.name}</p>
{/foreach}
2012年1月11日水曜日
phpとmysqlでテーブルの存在確認
<?php
$host = "localhost";
$user = "root";
$pass = "mysql";
$db = "test";
$con = mysql_connect($host,$user,$pass) or die("db接続NG");
print "db接続OK";
//テーブルチェック関数の呼出
if(table_exists($db,'item',$con)){
print "item table hit";
}else{
print "item table none";
}
mysql_close();
// テーブルの存在チェック関数の定義 start
function table_exists($db_name,$tbl_name,$db)
{
// テーブルリストの取得
$rs = mysql_query("SHOW TABLES FROM $db_name");
while($arr_row = mysql_fetch_row($rs)){
if(in_array($tbl_name,$arr_row)){
return true;
}
}
return false;
}
// テーブルの存在チェック関数の定義 end
?>
$host = "localhost";
$user = "root";
$pass = "mysql";
$db = "test";
$con = mysql_connect($host,$user,$pass) or die("db接続NG");
print "db接続OK";
//テーブルチェック関数の呼出
if(table_exists($db,'item',$con)){
print "item table hit";
}else{
print "item table none";
}
mysql_close();
// テーブルの存在チェック関数の定義 start
function table_exists($db_name,$tbl_name,$db)
{
// テーブルリストの取得
$rs = mysql_query("SHOW TABLES FROM $db_name");
while($arr_row = mysql_fetch_row($rs)){
if(in_array($tbl_name,$arr_row)){
return true;
}
}
return false;
}
// テーブルの存在チェック関数の定義 end
?>
2011年11月11日金曜日
サッサと PHP5のクラス定義解説
クラス定義
<?phpclass Hoge{
}
?>
new Hoge();
コンストラクタ
<?phpinclude 'Debug_Show.php';
class Hoge{
function Hoge(){
print "コンストラクタです";
}
}
new Hoge();
クラスメソッド
<?phpclass Hoge{
static function calc($str){
print $str;
}
}
Hoge::calc("クラスメソッド");
クラス変数
<?phpClass Hoge {
static $str = "クラス変数";
}
print Hoge::$str;
メンバー変数
<?phpClass Hoge {
public $a = "メンバー変数";
}
$hoge = new Hoge();
echo $hoge->a;
メソッド
<?php
Class Hoge {
function calc(){
print 1+1;
print "メソッド";
}
}
$hoge = new Hoge();
echo $hoge->calc();
クラス定数
<?phpClass Hoge {
const STR = "クラス定数";
}
print Hoge::STR;
thisとは?そのクラスをさします
<?phpClass Hoge {
var $a= "thisです";
function calc($a){
print $a;
print "<br />";
print $this->a;
}
}
$hoge = new Hoge();
$hoge->calc("thisではない");
#thisではない
#thisです
オブジェクトのコピー
<?phpClass Hoge {
var $a= "thisです。";
}
$hoge = new Hoge();
$obj = $hoge;
print $obj->a;
print $hoge->a;
$obj->a = "てすと。";
print $obj->a;
print $hoge->a;
$b = $obj->a;
$b = "ffff。";
print $obj->a;
print $hoge->a;
#thisです。thisです。てすと。てすと。てすと。てすと。
継承 親子関係
<?phpClass Oy {
var $a= "Oyです。";
function getA(){
print $this->a;
}
}
Class Ko extends Oy{
}
$ko = new Ko();
print get_Class($ko);
$ko->getA();
print $ko->a;
#KoOyです。Oyです。
2011年10月31日月曜日
php ファイルアップロード
<html>
<head><title>uploader.html</title></head>
<body>
<form method="post" enctype="multipart/form-data" action="up_load.php">
<input type="file" name="upfile">
<input type="submit" value="アップロードする">
</form>
</body>
</html>
<?php
$updir = "c:test_up/";
$filename = $_FILES['upfile']['name'];
if(move_uploaded_file($_FILES['upfile']['tmp_name'], $updir.$filename)==FALSE){
print("Upload failed");
print($_FILES['upfile']['error']);
}
else {
print("<b> $filename </b> uploaded");
}
?>
<head><title>uploader.html</title></head>
<body>
<form method="post" enctype="multipart/form-data" action="up_load.php">
<input type="file" name="upfile">
<input type="submit" value="アップロードする">
</form>
</body>
</html>
<?php
$updir = "c:test_up/";
$filename = $_FILES['upfile']['name'];
if(move_uploaded_file($_FILES['upfile']['tmp_name'], $updir.$filename)==FALSE){
print("Upload failed");
print($_FILES['upfile']['error']);
}
else {
print("<b> $filename </b> uploaded");
}
?>
phpでカレンダー
<form action="calen.php" method="get">
<select name="year">
<option value="2011">2011</option>
<option value="2012">2012</option>
<option value="2013">2013</option>
<option value="2014">2014</option>
</select>
<select name="month">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
</select>
<input type="submit">
</form>
<?php
class Calen{
function Calen(){
if($_GET){
$this->select_year = $_GET["year"];
$this->select_month = $_GET["month"];
}else{
$this->select_year = date("Y");//年
$this->select_month = date("n");//月
}
}
function show_calender(){
$max_day = date("t",mktime(0,0,0,$this->select_month,1,$this->select_year));//最大日
print "$this->select_year"."年"."$this->select_month"."月";
print "<table border=\"1\">";
for($day = 1; $day <= $max_day; $day++){
$day_color = date("w",mktime(0,0,0,$this->select_month,$day,$this->select_year));//曜日にナンバーを取得
if($day_color == 0 || $day == 1){ //1日か0ならtrタグ開始
print "<tr>";
}
if($day == 1){
$i = 0;
$day_color = (int)$day_color;
while($day_color > 0){
print "<td> </td>";
$day_color--;
}
}
print "<td>".$day."</td>";
if($day_color == 6){ //6ならtrタグ終了
print "</tr>";
}
}
print "</table>";
//////////
}
}
$calender = new Calen();
$calender->show_calender();
?>
2011年4月11日月曜日
phpで正規表現作業まとめ
今回ereg_replace()でDeprecated: Function ereg_replace() is deprecatedの
のエラーが多発、調べてみるとphp5.3 以降regex 拡張モジュールは非推奨となります的
なエラーでした。
解決策としてpreg_replace()を使用し解決しましたので、その時の作業内容をまとめます。
① aタグの削除
$削除パターン = "/((<a.*>)(.*)(<\/a>))/";
preg_replace($削除パターン,"","$text")
となります。「/」はパターンの最初と最後に「/」がきます。
「\/a」の\はエスケープ文字です。
②日付の抽出
$抽出パターン = "((?:[0-9]{4})(?:[\/]?)(?:[0-9]{0,2})(?:[\/]?)(?:[0-9]{0,2}))";
preg_match_all($抽出パターン,"$text","$抽出された文字列");
のエラーが多発、調べてみるとphp5.3 以降regex 拡張モジュールは非推奨となります的
なエラーでした。
解決策としてpreg_replace()を使用し解決しましたので、その時の作業内容をまとめます。
① aタグの削除
$削除パターン = "/((<a.*>)(.*)(<\/a>))/";
preg_replace($削除パターン,"","$text")
となります。「/」はパターンの最初と最後に「/」がきます。
「\/a」の\はエスケープ文字です。
②日付の抽出
$抽出パターン = "((?:[0-9]{4})(?:[\/]?)(?:[0-9]{0,2})(?:[\/]?)(?:[0-9]{0,2}))";
preg_match_all($抽出パターン,"$text","$抽出された文字列");
「?:」はモシはればです。もう少しすっきり書く事ができるんですが今回はここまで、
2011年4月2日土曜日
PHPでDao.Dto.Beansを簡単に書いてみた
<?php
//Bean
class HumanBeans
{
private $name;
private $age;
public function setName($name){
$this->name = $name;
}
public function setAge($age){
$this->age = $age;
}
public function getName(){
return $this->name;
}
public function getAge(){
return $this->age;
}
}
//Dto
class HumDto
{
private $dtolist;
private $ageTotal;
private $ageAverage;
public function HumDto(){
}
//リストをsetしサイズを返す
public function listSet($dtolist){
$this->dtolist = $dtolist;
return count($this->dtolist);
}
//Ageの合計
public function ageTotal(){
for($i = 0 ; $i < count($this->dtolist) ; $i++){
$this->ageTotal += $this->dtolist[$i]->getAge();
}
return $this->ageTotal;
}
//Ageの平均を返す
public function ageAverage(){
$this->ageAverage = $this->ageTotal/count($this->dtolist);
return $this->ageAverage;
}
}
//Dao
class HumDao
{
//今回は$humをDBのデータと見立てて使います
public $hum = array(
0 => array('name' => 'ito' , 'age' => 9,),
1 => array('name' => 'suzuki' , 'age' => 21,),
2 => array('name' => 'tanaka' , 'age' => 33,)
);
public function HumDao(){
$humlist = array();
//print_r ($this->hum);//配列データ
$humdto = new HumDto();//Dto
echo "<br>";
for($i = 0 ;$i < count($this->hum) ; $i++){
$bean = new HumanBeans();
$bean->setName($this->hum[$i][name]);
$bean->setAge($this->hum[$i][age]);
$this->humlist[] = $bean ;
}
echo $humdto->listSet($this->humlist)."データサイズ<br>";//Dtosetデータサイズ
echo $humdto->ageTotal()."Ageの合計<br>";//Ageの合計
echo $humdto->ageAverage()."Ageの平均<br>";//Ageの平均
//var_dump($this->humlist);
for($i = 0 ; $i < count($this->humlist) ; $i++){
echo "名前:".$this->humlist[$i]->getName()." ";
echo "年齢:".$this->humlist[$i]->getAge()." ";
echo "<br>";
}
}
}
new HumDao();
//Bean
class HumanBeans
{
private $name;
private $age;
public function setName($name){
$this->name = $name;
}
public function setAge($age){
$this->age = $age;
}
public function getName(){
return $this->name;
}
public function getAge(){
return $this->age;
}
}
//Dto
class HumDto
{
private $dtolist;
private $ageTotal;
private $ageAverage;
public function HumDto(){
}
//リストをsetしサイズを返す
public function listSet($dtolist){
$this->dtolist = $dtolist;
return count($this->dtolist);
}
//Ageの合計
public function ageTotal(){
for($i = 0 ; $i < count($this->dtolist) ; $i++){
$this->ageTotal += $this->dtolist[$i]->getAge();
}
return $this->ageTotal;
}
//Ageの平均を返す
public function ageAverage(){
$this->ageAverage = $this->ageTotal/count($this->dtolist);
return $this->ageAverage;
}
}
//Dao
class HumDao
{
//今回は$humをDBのデータと見立てて使います
public $hum = array(
0 => array('name' => 'ito' , 'age' => 9,),
1 => array('name' => 'suzuki' , 'age' => 21,),
2 => array('name' => 'tanaka' , 'age' => 33,)
);
public function HumDao(){
$humlist = array();
//print_r ($this->hum);//配列データ
$humdto = new HumDto();//Dto
echo "<br>";
for($i = 0 ;$i < count($this->hum) ; $i++){
$bean = new HumanBeans();
$bean->setName($this->hum[$i][name]);
$bean->setAge($this->hum[$i][age]);
$this->humlist[] = $bean ;
}
echo $humdto->listSet($this->humlist)."データサイズ<br>";//Dtosetデータサイズ
echo $humdto->ageTotal()."Ageの合計<br>";//Ageの合計
echo $humdto->ageAverage()."Ageの平均<br>";//Ageの平均
//var_dump($this->humlist);
for($i = 0 ; $i < count($this->humlist) ; $i++){
echo "名前:".$this->humlist[$i]->getName()." ";
echo "年齢:".$this->humlist[$i]->getAge()." ";
echo "<br>";
}
}
}
new HumDao();
2011年4月1日金曜日
phpでインターフェイス
<?php
interface Car
{
public function run();
public function stop();
}
//
class Mira implements Car
{
public function Mira(){
echo "Mira";
}
public function run()
{
echo "はしる";
}
public function stop()
{
echo "とまる";
}
public function tab(){
echo "ターボ";
}
}
class F1 extends Mira
{
public function F1(){
echo "F1";
}
public function run(){
echo "はやくはしる";
}
}
echo "Miraを動かします「";
$mira = new Mira();
$mira->run();
$mira->tab();
$mira->stop();
echo "』";
echo "Miraを継承「*ここでは車的に言うと 改造」したF1を動かします「";
$f1 = new F1();
$f1->run();
$f1->tab();
$f1->stop();
echo "』";
/***********結果**********/
2011年3月24日木曜日
PHPでページングの作り方
*****ページングとは?******
ブログ等で10ページの記事があったとすると、
その10ページ中で、現在見ているページが何ページにあたるかを表示したりします。
また、その現在見てるページの次のリンクを表示したり、戻るリンクを表示したりします。
******ソース*******
ちょっと作ったんでアップします。
<?php
$max = 5;//1ページあたりの表示数
$count;//記事の数が配列が代入されます
$logdata = array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z");
$count = count($logdata);//記事数をカウント
$limit = ceil($count/$max);//最大ページ数
$page = empty($_GET["page"])? 1:$_GET["page"];//ページ番号がなければ1、あればそのままで
//記事の配列を表示
for($i = 0 ; $i < count($logdata) ; $i++) {
print "[".($i+1) ;
print $logdata[$i]."]";
}
function disp_page($page,$max){
global $logdata,$count;
$start = ($page == 1)? 0 : ($page-1) * $max;
$end = ($page * $max);
print "<p>";
print "count:".$count."<br>";
print "max:".$max."<br>";
print "start:".$start."<br>";
print "end:".$end."</p>";
print "<p>";
for($i=$start;$i<$end;$i++){
if($i>= $count){break;}
print $logdata[$i]."<br>";
}
print "</p>";
}
disp_page($page,$max);
paging($limit, $page);
function paging($limit, $page, $disp=5){
//$dispはページ番号の表示数
$next = $page+1;
$prev = $page-1;
//ページ番号リンク用
$start = ($page-floor($disp/2)> 0) ? ($page-floor($disp/2)) : 1;//始点
$end = ($start> 1) ? ($page+floor($disp/2)) : $disp;//終点
$start = ($limit <$end)? $start-($end-$limit):$start;//始点再計算
if($page != 1 ) {
print '<a href="?page='.$prev.'">« 前へ</a>';
}
//最初のページへのリンク
if($start>= floor($disp/2)){
print '<a href="?page=1">1</a>';
if($start> floor($disp/2)) print "..."; //ドットの表示
}
for($i=$start; $i <= $end ; $i++){//ページリンク表示ループ
$class = ($page === $i) ? ' class="current"':"";//現在地を表すCSSクラス
if($i == $page){print "<b>";}//現在のページは大文字で表示
if($i <= $limit && $i> 0 ){//1以上最大ページ数以下の場合
print '<a href="?page='.$i.'"'.$class.'>'.$i.'</a>';//ページ番号リンク表示
}
if($i == $page){print "</b>";}//現在のページは大文字で表示
}
//最後のページへのリンク
if($limit> $end){
if($limit-1> $end ) print "..."; //ドットの表示
print '<a href="?page='.$limit.'">'.$limit.'</a>';
}
if($page <$limit){
print '<a href="?page='.$next.'">次へ »</a>';
}
/*確認用
print "<p>current:".$page."<br>";
print "next:".$next."<br>";
print "prev:".$prev."<br>";
print "limit:".$limit."<br>";
print "start:".$start."<br>";
print "end:".$end."</p>";*/
}
?>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" >
<input type="text" name="page" value="">
<input type="submit">
</form>
わたしの教科書的に本です
ブログ等で10ページの記事があったとすると、
その10ページ中で、現在見ているページが何ページにあたるかを表示したりします。
また、その現在見てるページの次のリンクを表示したり、戻るリンクを表示したりします。
******ソース*******
ちょっと作ったんでアップします。
<?php
$max = 5;//1ページあたりの表示数
$count;//記事の数が配列が代入されます
$logdata = array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z");
$count = count($logdata);//記事数をカウント
$limit = ceil($count/$max);//最大ページ数
$page = empty($_GET["page"])? 1:$_GET["page"];//ページ番号がなければ1、あればそのままで
//記事の配列を表示
for($i = 0 ; $i < count($logdata) ; $i++) {
print "[".($i+1) ;
print $logdata[$i]."]";
}
function disp_page($page,$max){
global $logdata,$count;
$start = ($page == 1)? 0 : ($page-1) * $max;
$end = ($page * $max);
print "<p>";
print "count:".$count."<br>";
print "max:".$max."<br>";
print "start:".$start."<br>";
print "end:".$end."</p>";
print "<p>";
for($i=$start;$i<$end;$i++){
if($i>= $count){break;}
print $logdata[$i]."<br>";
}
print "</p>";
}
disp_page($page,$max);
paging($limit, $page);
function paging($limit, $page, $disp=5){
//$dispはページ番号の表示数
$next = $page+1;
$prev = $page-1;
//ページ番号リンク用
$start = ($page-floor($disp/2)> 0) ? ($page-floor($disp/2)) : 1;//始点
$end = ($start> 1) ? ($page+floor($disp/2)) : $disp;//終点
$start = ($limit <$end)? $start-($end-$limit):$start;//始点再計算
if($page != 1 ) {
print '<a href="?page='.$prev.'">« 前へ</a>';
}
//最初のページへのリンク
if($start>= floor($disp/2)){
print '<a href="?page=1">1</a>';
if($start> floor($disp/2)) print "..."; //ドットの表示
}
for($i=$start; $i <= $end ; $i++){//ページリンク表示ループ
$class = ($page === $i) ? ' class="current"':"";//現在地を表すCSSクラス
if($i == $page){print "<b>";}//現在のページは大文字で表示
if($i <= $limit && $i> 0 ){//1以上最大ページ数以下の場合
print '<a href="?page='.$i.'"'.$class.'>'.$i.'</a>';//ページ番号リンク表示
}
if($i == $page){print "</b>";}//現在のページは大文字で表示
}
//最後のページへのリンク
if($limit> $end){
if($limit-1> $end ) print "..."; //ドットの表示
print '<a href="?page='.$limit.'">'.$limit.'</a>';
}
if($page <$limit){
print '<a href="?page='.$next.'">次へ »</a>';
}
/*確認用
print "<p>current:".$page."<br>";
print "next:".$next."<br>";
print "prev:".$prev."<br>";
print "limit:".$limit."<br>";
print "start:".$start."<br>";
print "end:".$end."</p>";*/
}
?>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" >
<input type="text" name="page" value="">
<input type="submit">
</form>
わたしの教科書的に本です
2011年2月13日日曜日
PHP 関数色々
自分で設定するユーザ関数以外の便利な関数を記述します。
~~~~~~~マジッククオート~~~~~~~~
やSQLインジェクションのリスクを軽減させる為の関数です。
必要ない場合は、php.initの設定を変えるか。
strinpslashes()関数で回避します。
~~~~~~~マジッククオート・SQL~~~~~~~~
mysql_real_escape_string()
SQLインジェクション処理関係の関数です。
unescaped_string の特殊文字をエスケープし、SQLを安全に実行できるようにします。
バイナリデータの場合は必ず使います。
~~~~~~~Date関数・日時~~~~~~~~
Date()
date("Y/m/d h:i:s")と記述する事で「年月日、時分秒」を表示します。
~~~~~~~~~mysql_fetch_array・SQL~~~~~~~~~~~
取得した行に対応する配列を返し、内部のデータポインタを前に進めます。
また、MYSQL_ASSOCを第二引数に指定すると連想添字のみが取得されます。
結果に同名のフィールド名が複数ある場合は、最後のカラムが優先されます。
~~~~~~~~~~改行~~~~~~~~~~~
echoで文字列を表示するときに改行を反映する関数、
nl2br()を使います。
~~~~~~~マジッククオート~~~~~~~~
get_magic_quotes_gpc()
マジッククオートは「” ’ \」等に¥を自動で付ける機能です。やSQLインジェクションのリスクを軽減させる為の関数です。
必要ない場合は、php.initの設定を変えるか。
strinpslashes()関数で回避します。
~~~~~~~マジッククオート・SQL~~~~~~~~
mysql_real_escape_string()
SQLインジェクション処理関係の関数です。
unescaped_string の特殊文字をエスケープし、SQLを安全に実行できるようにします。
バイナリデータの場合は必ず使います。
~~~~~~~Date関数・日時~~~~~~~~
Date()
date("Y/m/d h:i:s")と記述する事で「年月日、時分秒」を表示します。
~~~~~~~~~mysql_fetch_array・SQL~~~~~~~~~~~
取得した行に対応する配列を返し、内部のデータポインタを前に進めます。
また、MYSQL_ASSOCを第二引数に指定すると連想添字のみが取得されます。
結果に同名のフィールド名が複数ある場合は、最後のカラムが優先されます。
~~~~~~~~~~改行~~~~~~~~~~~
echoで文字列を表示するときに改行を反映する関数、
nl2br()を使います。
2011年1月13日木曜日
CakePHPフレームワークってどんなもんだろ?③
~~~~~~~~~フォームの記述~~~~~~~~~~~
CakePHPの場合、命名規則のルールを守る事でform等の処理もきちんと出来ます。
また、便利なライブラリもあり大変便利です。
詳しい事はこの本によく解説してあります
CakePHPの場合、命名規則のルールを守る事でform等の処理もきちんと出来ます。
また、便利なライブラリもあり大変便利です。
詳しい事はこの本によく解説してあります
CakePHPフレームワークってどんなもんだろ?②
前回表示したCakePHPのトップページですが、
プロジェクトのルートディレクトリのindex.phpが表示されているのではなく、
appフォルダの中のindex.phpが表示されています。*注意しましょう、
■コントローラ
送られてきたアドレスから実行する処理、
■ビュー
テンプレートをとおして表示されます。拡張子はhtmlです。
■モデル
データベースへのアクセスやSQLコマンド等の処理を行います
~~~~~~~~~~~CakePHPは命名規則が命~~~~~~~~~~~~~~~~
CakePHPは設定ファイルに色々こまごま書くのではなく、
指定ディレクトリに指定されたファイルを用意する形となります。
~~~~~~~~~~~MVCの配置ディレクトリ~~~~~~~~~~~~~~~~
appフォルダの中にMVC各おのおののフォルダがあるのでそこに置きましょう、
①コントローラのファイル名は、 「名前」_controll.phpとアンダーバーを付けます。
②モデルは、「テーブル名」.php
③ビューテンプレートは、「名前」フォルダ/ファイル名.ctp
④ビューテンレイアウトは、layouts/「名前」.ctp
■クラス
クラスは「名前」Controller
「名前」Modelと単語の最初を大文字にし、行こうを小文字にします。
*この方法を「キャメル記法」といいます。
■HTMLファイル
HTMLファイルはappフォルダのwebrootに置きましょう、
テストで置いてみてください、文字コードはUTF-8です。
HTMLファイルはMVCに関係なく置けます。
■コントローラを記述してみよう
をappフォルダのcontrollesフォルダに配置、
http://localhost/cake1/sample/hello等で見てみて表示されていればOK、
■controllesの設定内容
①$nameはコントロール名
②$usesはコントロールで仕様するモデル名
③$autoRenderはページのレンダリング設定、OFFだとページの表示はすべて自分で行います。
④indexメソッドはデフォルトページの処理、CakePHPではindexがデフォルト表示とないります。
■ビューを記述を記述してみよう
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<p>Sample</p>
<p>CakePHPSample</p>
</body>
</html>でappフォルダのviewsフォルダにhelloフォルダを作りそこにindex.tcpとして配置、
表示されればOK、
■viwesの設定内容
$autoLayout = falese;は自動レイアウトの無効にする、trueにするとCakePHPのヘッダ・フッターが表示されます。
$autoRender = true;はレンダリングを自動、helloにアクセスした時「hello」フォルダに中にあるテンプレートを読み込んで表示する、
次回はレイアウトを記述してみよう!!
プロジェクトのルートディレクトリのindex.phpが表示されているのではなく、
appフォルダの中のindex.phpが表示されています。*注意しましょう、
■コントローラ
送られてきたアドレスから実行する処理、
■ビュー
テンプレートをとおして表示されます。拡張子はhtmlです。
■モデル
データベースへのアクセスやSQLコマンド等の処理を行います
~~~~~~~~~~~CakePHPは命名規則が命~~~~~~~~~~~~~~~~
CakePHPは設定ファイルに色々こまごま書くのではなく、
指定ディレクトリに指定されたファイルを用意する形となります。
~~~~~~~~~~~MVCの配置ディレクトリ~~~~~~~~~~~~~~~~
appフォルダの中にMVC各おのおののフォルダがあるのでそこに置きましょう、
①コントローラのファイル名は、 「名前」_controll.phpとアンダーバーを付けます。
②モデルは、「テーブル名」.php
③ビューテンプレートは、「名前」フォルダ/ファイル名.ctp
④ビューテンレイアウトは、layouts/「名前」.ctp
■クラス
クラスは「名前」Controller
「名前」Modelと単語の最初を大文字にし、行こうを小文字にします。
*この方法を「キャメル記法」といいます。
■HTMLファイル
HTMLファイルはappフォルダのwebrootに置きましょう、
テストで置いてみてください、文字コードはUTF-8です。
HTMLファイルはMVCに関係なく置けます。
■コントローラを記述してみよう
をappフォルダのcontrollesフォルダに配置、
http://localhost/cake1/sample/hello等で見てみて表示されていればOK、
■controllesの設定内容
①$nameはコントロール名
②$usesはコントロールで仕様するモデル名
③$autoRenderはページのレンダリング設定、OFFだとページの表示はすべて自分で行います。
④indexメソッドはデフォルトページの処理、CakePHPではindexがデフォルト表示とないります。
■ビューを記述を記述してみよう
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<p>Sample</p>
<p>CakePHPSample</p>
</body>
</html>でappフォルダのviewsフォルダにhelloフォルダを作りそこにindex.tcpとして配置、
表示されればOK、
■viwesの設定内容
$autoLayout = falese;は自動レイアウトの無効にする、trueにするとCakePHPのヘッダ・フッターが表示されます。
$autoRender = true;はレンダリングを自動、helloにアクセスした時「hello」フォルダに中にあるテンプレートを読み込んで表示する、
次回はレイアウトを記述してみよう!!
2011年1月11日火曜日
最近JavaばかりだったのでPHPとの比較してみました
★★★★★★★★★画面出力★★★★★★★★★★
Javaの場合
System.out.print("String");
PHPの場合
print'text';
★★★★★★★★★変数★★★★★★★★★★
Javaの場合
int num = 10;
*Javaの場合変数型を宣言します。
PHPの場合
$num = 10;
*PHPの場合変数型を宣言しなくてもよいです。
★★★★★★★★★変数の出力★★★★★★★★★★
Javaの場合
String str = "変数";
System.out.print(str);
PHPの場合
str = "変数";
print str;
print "str";
*シングルクォーテーションで囲んだ変数は文字列として扱われます。
★★★★★★★★★演算★★★★★★★★★★
Javaの場合
int a = 123;
String b = "123tests";
System.out.print(a + b);
*エラーでコンパイルできません
PHPの場合
$a = "123";
$b = "123tests";
print $a + $b;
出力:246
*PHPの場合ゆるいです。
★★★★★★★★★制御構文★★★★★★★★★★
Java・PHPともにだいたい同じです。
PHPで九九を表示
<?php
$a = 1;
$b = 9;
print"<table border=\"1\">";
while($a <= $b){
print"<tr>";
for($c = 1; $c <= $b; $c++){
print"<td>";
print($c*$a);
print"</td>";
}
$a++;
print"</tr>";
}
print"</table>";
★★★★★★★★配列★★★★★★★★★★
Javaの場合
http://nyx.pu1.net/function/array/に詳しく配列関数があります。
$a = 0;
$arrayTest = array();
while($a < 3){
$b = 0;
while($b < 3){
$arrayTest[$a][$b] = $a*$b;
print '$arrayTest['.$a.']['.$b.']='. $arrayTest[$a][$b]."<br>";
$b++;
}
$a++;
}
★★★★★★★★★クラスからオブジェクトの生成★★★★★★★★★★
Javaの場合
class Test1{
int a = 1;
public void test(){
System.out.print(a);
}
}
*Test1クラスの生成
Test1 test1 = new Test1();//オブジェクトの生成
test1.test();//メソッドの呼び出し
PHPの場合
class Test1{
function test(){
$a = 1;
print $a;
}
}
$test = new Test1();//オブジェクトの生成
$test->test();//メソッドの呼び出し
Javaの場合
System.out.print("String");
PHPの場合
print'text';
★★★★★★★★★変数★★★★★★★★★★
Javaの場合
int num = 10;
*Javaの場合変数型を宣言します。
PHPの場合
$num = 10;
*PHPの場合変数型を宣言しなくてもよいです。
★★★★★★★★★変数の出力★★★★★★★★★★
Javaの場合
String str = "変数";
System.out.print(str);
PHPの場合
str = "変数";
print str;
print "str";
*シングルクォーテーションで囲んだ変数は文字列として扱われます。
★★★★★★★★★演算★★★★★★★★★★
Javaの場合
int a = 123;
String b = "123tests";
System.out.print(a + b);
*エラーでコンパイルできません
PHPの場合
$a = "123";
$b = "123tests";
print $a + $b;
出力:246
*PHPの場合ゆるいです。
★★★★★★★★★制御構文★★★★★★★★★★
Java・PHPともにだいたい同じです。
class kuku {
public static void main(String args[]) {
System.out.println("九九の表");
int a = 1;int b = 9
while(a <= b ) {
for( int c=1; j<=b; c++ ) {
System.out.print(a*c + " ");
}
a++;
System.out.println();
}
}
}PHPで九九を表示
<?php
$a = 1;
$b = 9;
print"<table border=\"1\">";
while($a <= $b){
print"<tr>";
for($c = 1; $c <= $b; $c++){
print"<td>";
print($c*$a);
print"</td>";
}
$a++;
print"</tr>";
}
print"</table>";
★★★★★★★★配列★★★★★★★★★★
Javaの場合
String[] stringArray = {"Sunday", "Monday", "Tuesday"};*その他コレクションクラスがありますのでArrayListなんか便利です。 import java.util.*;
class Cars {
public static void main(String args[]){
ArrayList[] cars=new ArrayList[1];
cars[0]=new ArrayList();
cars[0].add("1");
cars[0].add("1");
cars[0].add("3");
for(int i=0;i<cars[0].size();i++){
String str=(String)cars[0].get(i);
System.out.println(str);
}
}
}PHPの場合
$array = array(1, 2, 3, 4, 5); http://nyx.pu1.net/function/array/に詳しく配列関数があります。
$a = 0;
$arrayTest = array();
while($a < 3){
$b = 0;
while($b < 3){
$arrayTest[$a][$b] = $a*$b;
print '$arrayTest['.$a.']['.$b.']='. $arrayTest[$a][$b]."<br>";
$b++;
}
$a++;
}
★★★★★★★★★クラスからオブジェクトの生成★★★★★★★★★★
Javaの場合
class Test1{
int a = 1;
public void test(){
System.out.print(a);
}
}
*Test1クラスの生成
Test1 test1 = new Test1();//オブジェクトの生成
test1.test();//メソッドの呼び出し
PHPの場合
class Test1{
function test(){
$a = 1;
print $a;
}
}
$test = new Test1();//オブジェクトの生成
$test->test();//メソッドの呼び出し
2011年1月8日土曜日
XAMPP・PHP・eclipseで開発
■日本語化済みの環境のeclipseのインスト
http://mergedoc.sourceforge.jp/
より「JRE あり」と「PHP」の交差するeclipseをインスト
Cドライブの直下に解凍、
次にxamppディレクトリもCドライブ直下に、これでPHPのローカルデバッグが可能になります。
■Eclipse+PDT起動
eclipseディレクトリにeclipse.exeをクリックするとeclipseが起動します。
c:\xampp\htdocsをワークスペースに指定します。
zend_extension_ts = "\xampp\php\zendOptimizer\lib\ZendExtensionManager.dll"
zend_extension_manager.optimizer_ts = "\xampp\php\zendOptimizer\lib\Optimizer"
あと、php.iniの
1262行目
zend_extension_ts = "\xampp\php\zendOptimizer\lib\ZendExtensionManager.dll"
zend_extension_manager.optimizer_ts = "\xampp\php\zendOptimizer\lib\Optimizer"
1318行目
zend_extension_manager.debug_server_ts = "\xampp\php\zendDebugger"
を絶対パスにする
http://mergedoc.sourceforge.jp/
より「JRE あり」と「PHP」の交差するeclipseをインスト
Cドライブの直下に解凍、
次にxamppディレクトリもCドライブ直下に、これでPHPのローカルデバッグが可能になります。
■Eclipse+PDT起動
eclipseディレクトリにeclipse.exeをクリックするとeclipseが起動します。
c:\xampp\htdocsをワークスペースに指定します。
zend_extension_ts = "\xampp\php\zendOptimizer\lib\ZendExtensionManager.dll"
zend_extension_manager.optimizer_ts = "\xampp\php\zendOptimizer\lib\Optimizer"
あと、php.iniの
1262行目
zend_extension_ts = "\xampp\php\zendOptimizer\lib\ZendExtensionManager.dll"
zend_extension_manager.optimizer_ts = "\xampp\php\zendOptimizer\lib\Optimizer"
1318行目
zend_extension_manager.debug_server_ts = "\xampp\php\zendDebugger"
を絶対パスにする
2009年3月21日土曜日
require_once( dirname(__FILE__) . '/wp-load.php' );
require_once( dirname(__FILE__) . '/wp-load.php' );
はrequire_onceで一回だけrequire読み込まれます、次のdirnameでディレクトリ名を返し、(_FILE_)でwp-load.phpのフルパスを返します
require_once( ABSPATH . WPINC . '/template-loader.php' );
はrequire_once一回だけtemplate-loader.phpを読み込み、このabspath関数は、基準となるディレクトリから $path 中の ".." や "." を処理するため、存在していない場合でもパス名を返す。
はrequire_onceで一回だけrequire読み込まれます、次のdirnameでディレクトリ名を返し、(_FILE_)でwp-load.phpのフルパスを返します
require_once( ABSPATH . WPINC . '/template-loader.php' );
はrequire_once一回だけtemplate-loader.phpを読み込み、このabspath関数は、基準となるディレクトリから $path 中の ".." や "." を処理するため、存在していない場合でもパス名を返す。
登録:
投稿 (Atom)

