ソフト作成ログ -2ページ目

xoops Criteria

xoops Criteria (条件)



Criteria クラスは 条件式クラスです。 


具体的には、SQL文の WHERE句を作るクラスです。


ソース


function Criteria($column, $value='', $operator='=', $prefix = '', $function = '') {
$this->prefix = $prefix;
$this->function = $function;
$this->column = $column;
$this->value = $value;
$this->operator = $operator;
}


function render() {
$value = $this->value;
if (!in_array(strtoupper($this->operator), array('IN', 'NOT IN'))) {
$value = "'".$value."'";
}
$clause = (!empty($this->prefix) ? "{$this->prefix}." : "") . $this->column;
if ( !empty($this->function) ) {
$clause = sprintf($this->function, $clause);
}
$clause .= " {$this->operator} $value";
return $clause;
}

function renderWhere() {
$cond = $this->render();
return empty($cond) ? '' : "WHERE $cond";
}
}

なぞぃ関数

strtoupper すべて大文字に

in_array 第二引数の中に、第一引数の値があるか


流れ


結論からいうと、criteriaクラス    WHERE column $operator '$value'

ができます。


というか、これだけですγ(▽´ )ツヾ( `▽)ゞ


ただ、function Criteria($column, $value='', $operator='=', $prefix = '', $function = '')

この関数の引数をみてわかるように、 $prefix $function がある場合は、少し変わります。


さぁどのようになるのでしょうか('-^*)/

XOOPS xoopTpl xoopsform 連結 render

XOOPS xoopTpl xoopsform 連結 render



xoopsモジュール内で、xoopsTpl(テンプレート)を使ってxoopsformを表示する方法を説明します。


コード


$xoopsTpl->assign('sample','form=>$form->render()');



以上です。



とっても簡単です。'sample'に入っている変数を調べる場合は、print_rをテンプレート上で行ってもいいですが、tplのデバックモードをすれば、簡単にわかります。


ただ、難点は自分がしらべたところ、モジュール内でxoopsformをxoopsTplに入れて表示することに使っているのをほとんど、見つけられませんでした(探すのが下手なだけ。(´д`lll)だったらいいけど )



render()


というメソッドは、XoopsFormElementの抽象メソッドです。

This method is abstract and must be overwritten by the child classes.
* @abstract


サブクラスでオーバライド(上書きして)使ってます。


たとえば、 formtext.php

function render(){
return "<input type='text' name='".$this->getName()."' id='".$this->getName()."' size='".$this->getSize()."' maxlength='".$this->getMaxlength()."' value='".$this->getValue()."'".$this->getExtra()." />";
}

つまり、render() は表示するためのものを作っているんですね。


そのため、

echo $form->render();


というソースをよく見かけたわけです。

display()


との違いを考察していきたいところですが、また次回に持ち越そうと思います:*:・( ̄∀ ̄)・:*:



XOOPS token 3

XOOPS token


具体的な使い方を本当に説明します。


ソース

".$xoopsGTicket->getTicketHtml( __LINE__ , 1800 , 'myblocksadmin' )."  //$timeout=1800秒



if( ! empty( $_POST['submit'] ) ) {
if ( ! $xoopsGTicket->check( true , 'myblocksadmin' ) ) {         //第一引数 true はPOSTであるから。
redirect_header(XOOPS_URL.'/',3,$xoopsGTicket->getErrors());
}



流れ


説明しなくても、わかると思います。 便利ですね。


これを使えば荒らしにあうことも減るはずです(;´▽`A``


xoops token 2

xoops token 具体的な使い方


tokenのクラスについては、前に説明しました。


色々なモジュールを見ていると、include/gtickets.phpのtokenがフォームの確認でよく使われています。


これは、前説明した機能にプラス、


// area as module's dirname
if( ! $area && is_object( @$xoopsModule ) ) {
$area = $xoopsModule->getVar('dirname') ;
}

  

$_SESSION['XOOPS_G_STUBS'][] = array(
'expire' => time() + $timeout ,
'referer' => $referer ,
'area' => $area ,
'token' => $token
) ;


$area の要素が追加されています。

これは、見ての通り、モジュールのディレクトリー名が入ります。


これにより、他のモジュールないから不正にアクセスされることを防ぎます。

(多分、モジュール内に脆弱性の抱えたプログラムがあり、それを使い他のモジュールを攻めることを防ぐためのものだと思います。(・∀・))


あと、ちょっとしたことなんですが、


// record referer if browser send it
$referer = empty( $_SERVER['HTTP_REFERER'] ) ? '' : $_SERVER['REQUEST_URI'] ;


$_SERVER['HTTP_REFERER']が入ってるとき、$_SERVER['REQUEST_URI'] を$refererに代入するというのが、

最初に見たときしっくりいきませんでした。


だって、$refererって参照の変数って意味でつけたんでしょ。それなのに、REQUEST_URI ってヾ(。`Д´。)ノ

('HTTP_REFERER'は、前に参照していたページのURL,'REQUEST_URI 、このページをリクエストしたURI)



しかし、このソースに答えがありました。

if( ! empty( $found_stub['referer'] ) && strstr( @$_SERVER['HTTP_REFERER'] , $found_stub['referer'] ) ) $referer_check = true ;

前にも出てきた、strstrによって、前参照していたページのURLと、セッションに格納していたものが、一致??する場合、TRUEみたいなことが、したいので$refererにしたんですね。(多分??)



最後に strstrで調べてる意味について考察したいと思います( ̄∩ ̄#


確か、クエリとかの問題だとおもうんですが。。。


調べてみます。


また、$_SERVER['HTTP_REFERER']は、偽造が簡単にできるので気をつけましょう。












Referer Check xoops

Xoops Refere Check


Refere は、前回参照していたページのことです。 もう少し柔らかくいうと、飛んできたリンクのあったURL


$_SERVER['HTTP_REFERER']でGETできます。


ソース

function admin_refcheck($chkref = "") {
if( empty( $_SERVER['HTTP_REFERER'] ) ) {
return true ;
} else {
$ref = $_SERVER['HTTP_REFERER'];
}
$cr = XOOPS_URL;
if ( $chkref != "" ) { $cr .= $chkref; }
if ( strpos($ref, $cr) !== 0 ) { return false; }
return true;
}


なぞぃ関数


strpos -- 文字列が最初に現れる場所を見つける.

第一引数には対象の文字列を、第二引数には出現位置を検索する文字列を指定する。


流れ


今回はstrposで、$refがXOOPS_URLから始まっているか確認してます。

(自分のホームページのリンクからきた場合は、XOOPS_URLから始まるからです。)