トップページphp
1001コメント331KB

【PHP】下らねぇ質問はここに書き込みやがれ 45

レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん2007/05/12(土) 16:42:48ID:???
まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り

◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 45
http://pc11.2ch.net/test/read.cgi/php/1177635762/

◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。

◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0908nobodyさん2007/06/08(金) 15:20:48ID:JzH9jcRm
ふと思うんだけど
クラスの利点は再利用って言うけど
ユーザー関数郡をインクルードしたって同じじゃないの?
別に中の変数名違うのでもグローバルしなきゃ大丈夫だし
0909nobodyさん2007/06/08(金) 15:23:01ID:???
>>905
10文字づつmb_substrで配列にして
forで好きな文字はさんでもどせば?
0910nobodyさん2007/06/08(金) 15:25:31ID:6ggljLpp
>>907
ありがとうございます。
echo bcmul(bcmul('10000000000', '10000000000'), bcmul('10000000000', '10000000000'));
で百億の四乗とかやってみたかったのです。
もう少し見やすくする方法はないですよね?
0911nobodyさん2007/06/08(金) 15:35:06ID:???
>>910
> bcpow ? 任意精度数値をべき乗する
0912nobodyさん2007/06/08(金) 15:44:38ID:Xs31IcmG
>>907 >>909
ありがとうございます
とりあえず以下を作って対応しました
$test = "abcdefvhijklmnopqrstuvwxyz0123456789あいうえおかきくけこさしすてそ";
echo hohoge($test,",",10);
function hohoge($text="",$key="",$limit=100){
$max = $start = 0;
$temp = array();
if($text=="" && $limit < 0){
return false;
}
$max = mb_strlen($text);
while($max > $start){
$temp[] = mb_substr($text,$start,$limit);
$start += $limit;
}
return implode($key,$temp);
}
0913nobodyさん2007/06/08(金) 15:46:42ID:???
>>910
1e10
1E+10
0914nobodyさん2007/06/08(金) 15:57:07ID:???
>>908
それがそもそもの間違い。
よくクラスはその書き方から名前空間の付いた関数群のようなものと思われがちだが、
クラスは関数よりの概念ではない。

クラスとは型であって構造体とかもっと言ってしまえばスカラー型に近いもの。
クラスの再利用っていうのは処理の再利用ではなく型の再利用。
メソッドはクラスメンバを操作するためにある。
フィールドとメソッドを内包してカプセル化することにより、
それが一つの物として機能することに価値がある。

火打ち石で何かに火を付けるよりライター1つみたいな。

とまぁ長々書いたがとりあえずクラスとは関数群ではなく型であるということを覚えておいてほしい。
0915nobodyさん2007/06/08(金) 16:17:15ID:ORXPTs1E
Parse error: syntax error, unexpected $end in C:\xampp\htdocs\test\tenki2.php on line 59
WEB上のサンプルファイルを試してたら上記のようなエラーがでましたが
どのような意味みなるのでしょうか?
0916nobodyさん2007/06/08(金) 16:21:18ID:???
終わらすには早いよ〜何か抜けてるよーって意味だ

どうせ ;か } あたりがぬけてんだろ
0917nobodyさん2007/06/08(金) 16:30:23ID:???
>>908
一度作ってしまえば、あとは中の人が頑張ってくれるんですよ。
0918nobodyさん2007/06/08(金) 16:31:55ID:ORXPTs1E
>>916
ありがとうございます
09199142007/06/08(金) 16:38:48ID:???
>>908
ちょっと書き方が悪かった。簡潔に
自身の振る舞い方を知っている型。
と言った方がいいかもしれん
0920nobodyさん2007/06/08(金) 17:11:03ID:HgwodoIy
$test = 'abcdefvhijklmnopqrstuvwxyz0123456789あいうえおかきくけこさしすてそ';
$encode = 'Shift_JIS';
$delimiter = '/';
$limit = 16;

$str = mb_substr($test, 0, $limit, $encode);
for ($i = $limit; $i < mb_strlen($test, $encode); $i = $i + $limit){
 $str .= $delimiter.mb_substr($test, $i, $limit, $encode);
}

echo $str;//abcdefvhijklmnop/qrstuvwxyz012345/6789あいうえおかきくけこさし/すてそ

--
ちょっと前に自分で書いたのはこんな感じ
あとマルチバイト関数使うときはエンコードちゃんと指定した方がよかよ
09219082007/06/08(金) 17:43:33ID:JzH9jcRm
>>919
あー
税金というクラスがあったとして
このオブジェクトはお金を計算する型です。
この中に格納して、いろんなメソッドを指定すれば
所得税や手取り金など、簡単に取り出せます
みたいな?


0922nobodyさん2007/06/08(金) 18:14:44ID:au/61P4H
>>905
UTF-8で書いているなら、 preg_replaceを使って簡単に書けます。

$string = 'abcdefvhijklmnopqrstuvwxyz0123456789あいうえおかきくけこさしすてそ';
$string = preg_replace('/(?:^|\G)(.{10})/u', '${1};', $string);
0923nobodyさん2007/06/08(金) 18:55:15ID:Xs31IcmG
>>920
ありがとうございます
文字コード指定するようにしました

>>922
残念ながらUTF-8ではなくEUC-JPです
なので今回は利用できそうにありません
しかし次回機会があったら是非使わせていただきます
ありがとうございます
0924nobodyさん2007/06/08(金) 20:13:13ID:rQuqM37d
http://www.php.net/manual/ja/function.mb-substr.php

よくできたマニュアルだ〜。

私もこの手の文字列操作をよくしてるが、FreeBSD, PHP (.configure -enable-mbstring のみのような) 環境では、
EUC-JP以外の文字の取り扱いは、たまにお手上げのような状況にはまることがあるな〜。


0925nobodyさん2007/06/08(金) 20:56:58ID:rQuqM37d
$test = "abcdefvhijklmnopqrstuvwxyz0123456789あいうえおかきくけこさしすてそ";

for ($i=1; $i<=mb_strlen($test); $i++){
  $string.=mb_substr($test, $i,1);
  if ( ($i%10) == 0 ) {
   $string.="/";
  }
}
echo $string;

かな〜。
0926nobodyさん2007/06/08(金) 21:01:58ID:???
単純そうでやり方が思いつかないのですが
アルファベットを順番に表示させたいのですが…

< a href="hoge.html?$search=A">A行</a>
0927nobodyさん2007/06/08(金) 21:02:43ID:SfnUwTBh
<a href="hoge.html?$search=B">B行</a>
<a href="hoge.html?$search=C">C行</a>
<a href="hoge.html?$search=D">D行</a>
とリンクを作りたくて…
0928nobodyさん2007/06/08(金) 21:03:11ID:???
ねえ?
なんでくだ質系のスレは回答する人も初心者さんばかりなの?
09299272007/06/08(金) 21:11:45ID:SfnUwTBh
<?
$abc = "A";
for($i=1; $i < 27; $i++) {
echo '<a href="?alphabet='.$abc.'">'.$abc.' </a>';
$abc++;
}
?>
そんなアホなと思いつつこれでできちゃうんですね…
でも小文字は変換するしかないのかな
0930nobodyさん2007/06/08(金) 21:15:34ID:rQuqM37d
問題が初心者向けだからだ>928
0931nobodyさん2007/06/08(金) 21:16:05ID:???
>>927
for($i=65;$i<91;$i++){
echo '<a href="hoge.html?search='.chr($i).'">'.chr($i).'行</a>'."\n";
}
0932nobodyさん2007/06/08(金) 21:21:21ID:rQuqM37d
お。基本的なCの命令文(?)は、PHPマニュアルにはないから見落とす。
さすがですね。
0933nobodyさん2007/06/08(金) 21:25:55ID:???
>>931
あ!ありがとうございます
chr()調べにいきます…
0934nobodyさん2007/06/08(金) 21:35:22ID:8TLyKZoa
すみませんが教えてください
$user_arr = array(
 1 => array('1','pop','0'),
 2 => array('2','red','1'),
 3 => array('3','dream','1'),
 4 => array('4','braian','0'),
 5 => array('5','boy','0'),
 6 => array('6','test','0')
);
この$user_arr配列を pop,red,dream...の項目でソートすることは
出来ないでしょうか?
0935nobodyさん2007/06/08(金) 21:45:29ID:/7xjylPa
>>934
usort()
0936nobodyさん2007/06/08(金) 21:54:03ID:???
>>934
$user_arr = array(
 1 => array('1','pop','0'),
 2 => array('2','red','1'),
 3 => array('3','dream','1'),
 4 => array('4','braian','0'),
 5 => array('5','boy','0'),
 6 => array('6','test','0')
);


function cmp($a,$b){
return strcmp($a[1],$b[1]);
}
usort($user_arr,"cmp");
echo print_r($user_arr);
0937nobodyさん2007/06/09(土) 03:12:26ID:???
mysqlをはじめてつかうならiはあとからにしろ
0938nobodyさん2007/06/09(土) 03:13:06ID:???
iは拡張版みたいなもんじゃね?
0939nobodyさん2007/06/09(土) 03:13:15ID:???
>>934
↑↑↓↓→←→←
0940nobodyさん2007/06/09(土) 11:39:16ID:???
$hoge[0]['name'] = "C";
$hoge[0]['value'] = "シー";
$hoge[1]['name'] = "A";
$hoge[1]['value'] = "エー";
$hoge[2]['name'] = "B";
$hoge[2]['value'] = "ビー";

上のような配列 $hoge を $hoge[$i]['name'] の名前順に並べ変えたいのですが
どうすればよいでしょうか?

つまり
$hoge[0]['name'] = "A";
$hoge[0]['value'] = "エー";
$hoge[1]['name'] = "B";
$hoge[1]['value'] = "ビー";
$hoge[2]['name'] = "C";
$hoge[2]['value'] = "シー";
のように変更したいと考えています

0941nobodyさん2007/06/09(土) 11:52:54ID:???
>>940
キーワード
・foreach
・代入
0942nobodyさん2007/06/09(土) 12:22:29ID:j2tEU2dd
mbstring.internal_encoding = EUC-JP
mbstring.http_output = SJIS

この設定のとき、EUCで作成したファイルはSJISの問題に関する対処を入れておくべきでしょうか?
0943nobodyさん2007/06/09(土) 12:23:08ID:???
ftp_put()使ったときに
多くのFTPクライアントみたいに
改行コードを自動的に書き換えるようにしたいのですが、
普通にstr_replaceあたり使ってシコシコするしかないですかね?
なんか簡単な方法ないでしょうか。
改行コードの識別時点でかなりだるそうなのですが。
0944nobodyさん2007/06/09(土) 12:39:41ID:???
\n に統一 str_replace(array("\r\n", "\r"), "\n", $str)
\r\n に統一 preg_replace("/(?<!\r)\n|\r(?!\n)/", "\r\n", $str)
0945nobodyさん2007/06/09(土) 12:42:04ID:???
>>940
<?php
$hoge[0]['name'] = "C";
$hoge[0]['value'] = "シー";
$hoge[1]['name'] = "A";
$hoge[1]['value'] = "エー";
$hoge[2]['name'] = "B";
$hoge[2]['value'] = "ビー";
foreach ($hoge as $key => $row) {
$name[$key] = $row['name'];
}
array_multisort($name, $hoge);
print_r($hoge);

かな
それかユーザ関数作る
09469402007/06/09(土) 12:52:17ID:???
>>945
神サンクス!!
0947nobodyさん2007/06/09(土) 20:43:27ID:RIHYcObC
正規表現で文字列を検索したいのですが、
""や''内は検索の対象外としたいです。
どうすれば可能でしょうか?
0948nobodyさん2007/06/09(土) 22:00:20ID:fw4XPRkl
携帯からですみません。
iモードhtmlシュミレーターで
http://localhost/bbs.php
にアクセスしようとしても接続出来ません。と出るのですが、
どうしたらよいでしょうか?
WindowsでApacheを使っています。
0949nobodyさん2007/06/09(土) 22:17:11ID:???
>>947
何がしたいのか、漠然としすぎてて答えにくいが、PHPの中で検索したいのか?
タグ内の文字列を検索条件から取り除きたいのなら、まずstrip_tagsした後に、抽出するとか
0950nobodyさん2007/06/09(土) 22:25:35ID:???
>>948
スレ違い
まず適当なindex.htmlを作って設置してみて、
http://localhost/index.htmlに繋がるか試せ。どうせ繋がらないはず。

0951nobodyさん2007/06/09(土) 22:28:58ID:fw4XPRkl
>>950
先ほどの質問をした者ですが、
繋がらない理由を教えていただけませんか?

インターネットエクスプローラーなら繋がるのですが、
0952nobodyさん2007/06/09(土) 22:33:55ID:???
>>951
そもそもlocalhostって何か理解してますか?
0953nobodyさん2007/06/09(土) 22:35:39ID:???
大人が小学1年生を相手にしているような流れですね
0954nobodyさん2007/06/09(土) 22:39:26ID:fw4XPRkl
>>952
先ほど質問した者ですが、localhostの意味がわからないので説明してくれませんか?
0955nobodyさん2007/06/09(土) 22:39:33ID:???
小学6年生が1年生の世話を嫌々見ているようなインターネッツですね
0956nobodyさん2007/06/09(土) 22:40:40ID:???
案外多いのなwww
http://www.google.co.jp/search?q=localhost%E3%81%AE%E6%84%8F%E5%91%B3&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:unofficial&client=firefox-a
0957nobodyさん2007/06/09(土) 22:41:32ID:???
あまりにもPHPと関係がないことに感心します。
0958nobodyさん2007/06/09(土) 22:42:55ID:???
>>954
スレ違いだと言っているけれど。ついでだから教えてあげる。

IEは localhost→ hostsファイルを参照→ 127.0.0.1 (自分自身) と解釈して、自分のPCに繋がるわけ。

どうせi-modehtmlシュミレータは、それを解釈できないだけでしょ。
設定画面か何かに、hostsファイルを参照するとかその辺の設定があるはず。んでそれがOFFになっていて解釈できないと。

だからPHPは全く関係ない。
0959nobodyさん2007/06/09(土) 22:48:11ID:fw4XPRkl
>>958
先ほど質問した者ですが、
設定はONにしてありますが、接続出来ないのです。
これはなぜでしょうか?
0960nobodyさん2007/06/09(土) 22:54:21ID:???
>>959
・そのシュミレータとやらを一回再起動したりした?
・あと >>948 は試してみた?
・パーソナルファイヤーウォールとかで蹴られていないか?

何故でしょうと聞かれても、エスパーじゃないから出来ない。
一つづつ可能性をつぶしていけよ。 これ以上は自分でググってがんばれ。
0961nobodyさん2007/06/09(土) 23:01:02ID:fw4XPRkl
>>960
丁寧なる改善策ありがとうございます。
お時間を取らせてしまいすみませんでした。
http://127.0.0.1/bbs.phpとしましたら接続出来ました。
ありがとうございます。
では
0962nobodyさん2007/06/09(土) 23:12:39ID:yCd1SwCo
$object->arrayvar[$key]
とは書けないですよね?
$object1->object2->var
はできるのになんなのこの言語。
0963nobodyさん2007/06/09(土) 23:17:47ID:???
>>962
書けるが…?
0964 ◆yBEncckFOU 2007/06/09(土) 23:21:22ID:???
文字の取り扱い、重荷サニタイズについての質問です。
1 mysqlへのデータ格納時にサニタイズしなければならない文字
2 html出力時にサニタイズしなければならない文字
3 get/postでのデータ受け取り直後にサニタイズしなければならない文字
を教えていただきたいです。
また、htmlspecialcharsでjavascriptなどの特殊なスクリプトの埋め込み攻撃を完全に防げるのかどうか教えていただきたいです
また、上記すべての設定ではmagic_quote gpcの設定をonで使用することを前提としてのアドバイスをお願いいたします
0965 ◆yBEncckFOU 2007/06/09(土) 23:25:21ID:Op34nGQd
アゲ忘れです(TT;
0966nobodyさん2007/06/09(土) 23:44:35ID:???
>>964
先ほど質問した者ですが、 質問は1人1つまででお願いします
0967nobodyさん2007/06/09(土) 23:49:57ID:???
>>964
SQLInjectionとXSSがごっちゃになってるような
お約束ってことで「サニタイズ言うな」

1はそれぞれDBのエスケープ用の関数なりプレースホルダーなりを使う
2はhtmlspecialchars
3はいらない
0968 ◆yBEncckFOU 2007/06/09(土) 23:55:24ID:Op34nGQd
>>967
ありがとうございました
0969nobodyさん2007/06/10(日) 00:03:14ID:???
>>964
「サニタイズ言いたいだけちゃうんか」
というのは置いておいて、

・どうしてもmagic_quote gpc on なんですか
・DB格納用のエスケープ処理と、XSS対策を一緒くたにすんな
・mysql内部の文字コード、php側の文字コードは?
・ユーザの入力にhtmlを許可するのか?しないのか?
・LGPL使っていいのなら、http://htmlpurifier.org/ とか面白い。


あと、
ttp://cgi36.plala.or.jp/tera5/v/security/webap_sec2/chap01.html へんとか
ttp://cgi36.plala.or.jp/tera5/v/security/char_xss1/chap01.html へん
とかは一読の価値ありか。
0970nobodyさん2007/06/10(日) 00:05:30ID:???
不特定のURLから取得したファイルについて、
ファイルの内容(テキスト、画像、動画など)を判別する方法を教えてください。

$url = 'http://www.sample.com/****';
$file = file_get_contents ($url);
0971 ◆yBEncckFOU 2007/06/10(日) 00:13:58ID:isb7MrtT
>>969
ありがとうございました
0972nobodyさん2007/06/10(日) 00:25:41ID:qbDoORWs
MySQL総合から誘導されてきますた


MySQL + PHP で掲示板を作っているのですが、分からないことがあります。

MySQLのSQL文中にPHPの変数を入れたいです。
こんなカンジ↓

$sql = "select count(*) from post2 where tid=".$row["id"];

これで実行してみるとResource id #4 Resource id #5 Resource id #6...
といった結果が得られて思うような結果(掲示板のレス数)が得られません。

どのようにすればいいか教えてください。お願いします。
0973nobodyさん2007/06/10(日) 00:28:56ID:???
>>972
先ほど質問した者ですが、Resource id の意味わかってますか?
0974nobodyさん2007/06/10(日) 00:42:49ID:???
>>970
http://jp.php.net/manual/ja/ref.fileinfo.php
09759722007/06/10(日) 00:43:15ID:qbDoORWs
>>973
レスありがとうございます。
Resource idは分かっていません・・・。
ぐぐってみましたが有用な情報は得られませんでした。
Webプログラムは検索が難しいです。

もう少し考えてみることにします。
ありがとうございました。
0976nobodyさん2007/06/10(日) 00:49:58ID:17od7jmr
SQLを出力するクラスにWHERE情報を加えたいんだが、
ANDとORのグルーピングを考えるとどうしても一つの条件を
オブジェクトまたは配列にしないとうまくできないと思った。
けど、できますか?
またはよく言われているcriteriaクラスとかはどうやってるんでしょうか。
0977nobodyさん2007/06/10(日) 00:52:18ID:???
>>975

マニュアル嫁 >>1

$ret = mysql_query($sql);
while ($a = mysql_fetch_assoc($ret)) {\
var_dump($a);
}
0978nobodyさん2007/06/10(日) 00:52:27ID:???
>>976
先ほど質問した者ですが、前半はコード出して
後半はググれ
0979nobodyさん2007/06/10(日) 01:02:53ID:???
>>976
エスパーレスすると

where
1=1 and ほげ
or
(0=1)

とか工夫汁

0980nobodyさん2007/06/10(日) 01:03:12ID:???
「先ほど質問した者ですが、」が気に入ったのはわかったけど、IDを出してやってくれないと
ID:fw4XPRklに対して感じた「いや、書かなくてもわかるから」感がなくて物足りない。
09819762007/06/10(日) 01:11:16ID:17od7jmr
コード出すというか概念を話すと、WHERE条件を複数持つことのできる
Trayクラスを作って、
var $connection="AND";
var $elements=array();
function elementtray($connection)
{
$this->connection=$connection;//(ANDかOR)
}
function addelement($element)
{
$this->elements[]=$element;
}
でこの$elementのデータ型もまたオブジェクトなわけ。
そんで
function output
{
$ret="SELECTうんぬん。";
foreach($this->elements as $element){
$ret.= $element->output();
}
}
というかんじにする。ここをポリモって、
elementクラスにもoutputメソッドを入れといて、
elementtrayのなかに入れ子にできるようにするわけだ。
こんなんしか思いつかん。
09829722007/06/10(日) 01:13:59ID:qbDoORWs
>>977
ありがとう。
おかげでうまくいきました。

$sql = "select count(*) as reply from post2 where tid = $row[id]";

として新しいフィールドを作ってあげるとうまくできました。感謝!
0983nobodyさん2007/06/10(日) 01:15:25ID:???
フィールドじゃないし
そんなことしなくても取れるけどね
0984nobodyさん2007/06/10(日) 01:22:00ID:???
>>980
先ほど質問した者ですが、これやってる人ウザいよね
やめろ
0985nobodyさん2007/06/10(日) 01:35:55ID:???
>>982
$sql = "select count(*) as reply from post2 where tid = {$row['id']}";
って書いたほうが俺は安心する。
09869762007/06/10(日) 01:39:02ID:17od7jmr
男は黙ってsprintf

ところでわたくしの質問なんですが誰も答えてくれないですよねすんません。
結局WHERE以下の1文章をオブジェクトにする設計にしそうです。
0987nobodyさん2007/06/10(日) 01:45:29ID:???
>>986
すまん、配列のelementに入ってくる引数の$elementsが何なのか
分からん
0988nobodyさん2007/06/10(日) 01:50:11ID:???
>>986
便利なクラス作ってうpってくれ
09899762007/06/10(日) 01:50:12ID:17od7jmr
説明不足すぎました。
$elementは、WHERE以下の1つの条件文をもつオブジェクトです。
たとえばWHERE uid< 79 AND (uname like %a% OR uname like %b%)
というWHERE以下の条件に対して、一つのelementオブジェクトは
uid<79または
name like %a%または
uname like %b%であるということです。
この括弧で括る「グルーピング」をうまく表現したかったんです。
0990nobodyさん2007/06/10(日) 02:17:19ID:???
>>989
いろいろあるだろうけど、ラムダを使って入れ子方式にすんのはどうよ。
$cond->add("uid < 79");
$cond->or(create_function('$cond','
 $cond->add("uname like %a%");
 $cond->add("uname like %b%");
'));

うーん、文字列で渡すのがいまいちださいな。
create_functionはor()の中で呼んでもいいね。
09918672007/06/10(日) 02:21:12ID:???
たまたまこのタイミングで見ててよかった。
次スレの扱いは>>867な感じでいいのかな?

過去スレリストなんかはその次でどうにかするとして。
0992nobodyさん2007/06/10(日) 02:39:31ID:???
>>989
あんま的確なレスになってないけど
ttp://www.symfony-project.com/snippets/snippets/tagged/criteria/order_by/date

とか symfonyの
symfony/vendor/propel\util/Criteria.php
とか参考にならない?
09939762007/06/10(日) 02:51:20ID:17od7jmr
いろいろとありがとうございます。ラムダを使って入れ子とか、
賢すぎです。馬鹿はPHP極められないなぁとか思った次第です。
symfonyのcriteriaは…紹介だけだと詳しくのってませんでした。
ソースコード見るよりとりあえず作ってみます。どうもでした。
0994nobodyさん2007/06/10(日) 04:16:51ID:???
>>993
ま、これぐらいたいしたことじゃねぇってw
09959762007/06/10(日) 06:28:21ID:17od7jmr
>>988
できた。よかったら使ってください。
長いんでこのスレ埋めてしまいますすんません。
<?php
//WHERE以下の条件クラス
class element
{
var $field;//DBのフィールド値
var $value;//値
var $relation;//fieldとvalueの関係。=とかlikeとか。

//コンストラクタはプロパティのセットのみ
function element($field,$value,$relation="=")
{
$this->field=$field;
$this->value=$value;
$this->relation=$relation;
}

//DB用の「サニタイズ」
function trimforquery($value)
{
if(is_numeric($value)){return $value;}
elseif(is_string($value)){return $this->strforquery($value);}
else{
error("element->trimforquery:UNKNOWN DATATYPE ".$value);
return $value;
}
}
09969762007/06/10(日) 06:29:47ID:17od7jmr
function strforquery($str)
{
$strforquery=addslashes(trim($str));
$strforquery="'".$strforquery."'";
return $strforquery;
}

//SQLフォーマットで出力します。
function render()
{
$condition=sprintf(" %s %s %s ",$this->field,$this->relation,$this->trimforquery($this->value));
return $condition;
}
}

09979762007/06/10(日) 06:31:11ID:17od7jmr
//複数のelementを格納したオブジェクト。自身もelementとなりうる(入れ子が可能)
class elementtray extends element
{
var $elements=array();//ここにelementオブジェクトが入る。
var $connection="AND";//element同士の接続。Tray内では常に同じ接続。別にしたきゃ別のTrayを作れ。

function elementtray($connection="AND")
{
$this->connection=$connection;
}

//elementを加えるメソッド
function add($element)
{
$this->elements[]=$element;
}

//elementを$connectionでつないで、括弧でくくって出力します。
function render()
{
if($this->elements!==array()){
$condition=" ( ";
foreach($this->elements as $element){
$condition.=trim($element->render());
$condition.=" ".$this->connection." ";
}
$condition=substr($condition,0,strlen($condition)-strlen($this->connection)-2);
$condition.=" ) ";
}
return $condition;
}
}
09989762007/06/10(日) 06:32:25ID:17od7jmr
//SQLをつかさどる抽象クラス。elementtrayと同様に、elementを複数持てます。
class query extends elementtray
{
var $order;//ORDER BYとかの機能ものちに追加したいが自分が今必要ないからプロパティだけ作っとく。
var $sql="";

function query($connection="AND")
{
$this->elementtray($connection);
}

//SQLを出力します。$this->sqlは子クラスに任せています。
function render()
{
$sql=$this->sql;
if($this->elements!==array()){
$condition=" WHERE ";
foreach($this->elements as $element){
$condition.=trim($element->render());
$condition.=" ".$this->connection." ";
}
$condition=substr($condition,0,strlen($condition)-strlen($this->connection)-2);
$sql.=trim($condition);
}
return $sql;
}
}
09999762007/06/10(日) 06:33:27ID:17od7jmr
//SELECT ほげ FROM をしてくれるクラス
class selectquery extends query
{
function selectquery($field,$table,$connection="AND")
{
$this->query($connection);
$this->sql=sprintf("SELECT %s FROM %s ",trim($field),trim($table));
}
}

//INSERT INTO ほげ してくれるクラス。$arrofnewの順序および数はテーブルのフィールドと一致している必要があります。
class insertquery extends query
{
function insertquery($table,$arrofnew)
{
$values="";
foreach($arrofnew as $value){
$values.=$this->trimforquery($value);
$values.=",";
}
$values=substr($values,0,strlen($values)-1);
$this->sql=sprintf("INSERT INTO %s VALUES(%s);",trim($table),$values);
}
}
?>
1000nobodyさん2007/06/10(日) 06:34:16ID:???
1000
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。