881 :
879 :2005/05/13(金) 19:53:06 ID:???
>>880 んとわかります。
ファイルの属性? 666にしないとダメですよね?
そうすると "mode" は関係なく動くような気がします。
ファイル属性 644 だと "mode" 関係なしでダメ。
>>881 マニュアルのsqlite_open()のページ
883 :
879 :2005/05/13(金) 20:11:41 ID:???
>>881 解決しました。。。 無視されるんですね。
884 :
nobodyさん :2005/05/13(金) 22:23:33 ID:MPQs+RJ/
HTML_QuickForm触ってみただけど、IEでJavaScriptエラー出るなぁ・・・。 オブジェクトを指定してくださいって出る。
>884 Smarty + QuickForm前提で話し進めちゃうけど。 ルールの指定でclientを選択しながら、 {$form.javascript} を書いていなかったりしません?
887 :
884 :2005/05/14(土) 09:14:50 ID:yiKQRA/S
>>886 書いててもエラー出ます。
インターネットオプションでスクリプトのエラーごとに表示されるように設定していると、
エラーが警告が出ます。そうじゃない場合はエラー表示でません。
(これはたぶんオフにしている人が多いと思う)
freezeさせて、validateが必要なくなった時、form.javascriptはプリントされなくなるのに、
onsubmitの方のvalidate呼び出し関数は残ったままなので、エラーとなるようです。
動作自体に影響はないんだけど、アラートでエラー表示が出るので邪魔になる・・。
>887 あー、なるほど。 自分は時間無くてとりあえずserverでのチェックだけにして逃げちゃったんですよ(苦笑 ちょっと時間見つけてコード追ってみるー。
>>887 あーそれか……
ずっと昔からそうなので,自分はもっのすごくアドホックな対処をしてる.
<script type="text/javascript">if(typeof(validate_フォーム名)=='undefined'){var validate_フォーム名=new Function("return true")}</script>
という HTML を,static エレメントとして追加してやるの.
で,フォーム遷移を管理する自作クラスにそれを組み込んで,
そのままこの問題について忘れてたw
まだ直ってなかったのか……
>887 >889 んー。まだよくわからないけどざっくりと。 ルールを記述しているJavascriptはQuickform.phpの1540行目あたり。 getValidationScript()の初めに if (empty($this->_rules) || $this->_freezeAll || empty($this->_attributes['onsubmit'])) { return ''; } とあるから何も返さなくなる。 しかし、addRule(), addGroupRule()したときに if ('client' == $validation) { $this->updateAttributes(array('onsubmit'=>'return validate_'.$this->_attributes['id'] . '(this);')); } と、onSubmitをつけている=エラーになる。 ここの判定式を$this->_freezeAllがtrueの時に通らないようにすれば大丈夫な気がするです。
891 :
887 :2005/05/16(月) 10:10:54 ID:6UiQU/az
>>889 , 890
ありがとうございます。
結局スクリプト側で、form.JavaScriptが空の時は、
アドホックに
>>889 のコードを入れることで、対応してしまいました。
ところで、HTML_QuickFormで送られた内容の控えをユーザ宛にも
メール送信したいのですが、結果HTMLを表示する要領で、
テキスト形式で結果内容を生成することはできますか?
QuickFormのcheckboxでvalueの値を1以外にする方法をみっけたので書き込んでおく。
(どっかのスレでやり方探してる人いなかったっけ?)
もし既知のことだったら知ってたらスルーして下さい。
$chk =& $form->createElement("checkbox");
$tmp = $chk;
$tmp->setName("chk[1]");
$tmp->setLabel("No. 1");
$tmp->updateAttributes(array("value"=>"NO1"));
$form->addElement($tmp);
$tmp = $chk;
$tmp->setName("chk[2]");
$tmp->setLabel("No. 2");
$tmp->updateAttributes(array("value"=>"NO2"));
$form->addElement($tmp);
名前を[1]、[2]と配列の添字を指定してやれば、GET or POST後にちゃんと
チェック状態になってくれる。
http://www.php.net/manual/ja/faq.html.php#faq.html.arrays ここみたいに添字を指定しないと、HTML_QuickForm_elementの_findValue()が値を返せないみたい。
QuickFormのnewってどれも重い気がするので、フォームが多い画面作るときは
オブジェクトをコピーしたほうがいいね。
HQFって便利なんだけど,全然慣れない・・・ マニュアルか以前に書いたソース見ないと書けない
>>891 つ ob_start();
ってまぁ,Array Renderer 使うのが正統だと思いますが.
895 :
nobodyさん :2005/05/19(木) 21:57:06 ID:ZZw6s72m
PHP4には例外処理が無いのでエラー処理が非常に面倒なので、 PEARの基底クラスを継承してPEAR_Errorを発生させようかと 思ってるのですが使い方間違ってますかね? みなさんそこまでこだわらずにメソッドの戻り値で判断させてます?
PEARのエラー処理メカニズムを使うだけなら、PEARクラスを継承する必要はないよ。 エラーを返したい場所で return PEAR::raiseError('Error message', MY_ERROR_CODE); などとするだけでいい。 呼び出した側でのエラーチェックは、常に if (PEAR::isError($result)) { // エラー処理 } で。
897 :
nobodyさん :2005/05/20(金) 00:01:48 ID:wjKv+x9s
>>896 なるほど、そんな使い方もできたんですね。
ちなみにPAERのエラー処理って、PEARライブラリ製作者用のクラス
であって、PHP4のエラー処理として推奨されているわけではないのかな?
今すごく迷っているんですけど、
PHP4のエラー処理で最も適しているのは以下のどれになりますか?
識者のご意見お聞かせ下さい。
1、メソッドの戻り値で判断する
2、標準のエラー処理用関数郡を使う
3、PEAR基底クラスのエラー処理を使う
>>895 もう 2 年くらいソレでがんがん使ってる。問題ない。っつーか快適。
デバッグ時は backtrace させて (昔は Xdebug とか PEAR::VarDump 無かった)、運用時は小山氏@雑誌連載式にログったりメール飛ばしたり。
>>897 ケースバイケースで組み合わせ。
> 例外処理が無いのでエラー処理が非常に面倒
とか見ると Java の人?と思っちゃう。
PHP の世界に入ってきたのなら、PHP の流儀を意識した方が幸せになれると思う。
ErrorStack いいらしいですね。
最近勉強してないな…
>899 例外処理なんてJava以前から余裕であるわけだが。
例外処理が無いと極端にやり難い、という人には、今まで Java やってましたというパターンが多い、 という話。
PEAR::DBでSQLiteのユーザー定義関数を作る場合、 sqlite_create_functionは使えませんか? 「Warning: sqlite_create_function() expects parameter 1 to be resource 」 というエラーが出るんですけど。 ソースはこんな感じです。 $db = DB::connect($dsn); sqlite_create_function($db, 'NOW', 'time', 0);
var_dump($db); したらnull?
>>903 Nullではないです。
サンプルではsqlite_create_functionを使う場合は
sqlite_open関数を使っているので、PEAR::DBでは
エラーになってしまうのかと思ったのですが。
> Nullではないです。 PEAR なら、エラーオブジェクトという事もある。
>>902 DB::connect() の戻り値はSQLiteのリソースハンドルじゃなくて
DB_sqliteオブジェクトなので、そのままsqlite_xxx関数には渡せないよ。
どうしても使いたいなら
sqlite_create_function($db->connection, 'NOW', 'time', 0);
のようにDB_sqliteから接続ハンドルを取り出さないと。
>>906 おっちゃん〜。できたよー!
ありがとう。助かったよー。
908 :
nobodyさん :2005/05/29(日) 00:33:18 ID:3agdROOk
PearのPHP5対応状況ってどこでわかりますか?
たいていのPEARパッケージはPHP5でも動作します。 というか、動かなかったらおそらくバグなので bugs.php.netに報告よろ
910 :
909 :2005/05/29(日) 01:09:41 ID:???
911 :
nobodyさん :2005/05/29(日) 07:39:53 ID:oziLOzHH
>>909 ありがとうございます。PHP5対応は考慮されているんですね。
それでは逆に、PHP4の互換保持は考慮されているものでしょうか?
912 :
902 :2005/05/29(日) 16:33:06 ID:???
以前、PEAR::DBでSQLiteのユーザー定義関数を作る方法で お世話になった者です。 PEAR::DBを継承させたmyDBクラスを作ってSQLiteで色々な 関数を使えるようにしてみました。 これで他のDBからSQLiteへの移行が比較的楽にできるのではないかと 思うのですがどうでしょうか? ソースは次レスで。
913 :
902 :2005/05/29(日) 16:34:16 ID:???
myDBクラス(myDB.php) <?php require_once("DB.php");// DB require_once("sqlite_func.php");// SQLite用ユーザー定義関数 class myDB extends DB { function connect($dsn) { $db =& parent::connect($dsn); // SQLiteのユーザー定義関数 sqlite_create_function($db->connection, 'NOW', 'time', 0); sqlite_create_function($db->connection, 'DATE_FORMAT', 'date_format', 2); return $db; } } ?> ユーザー定義関数(sqlite_func.php) <?php function date_format($timestamp, $format) { return strftime($format, $timestamp); } ?>
914 :
902 :2005/05/29(日) 16:34:48 ID:???
使い方 <?php require_once("myDB.php");// DB // DBオブジェクトの生成と接続 $db =& myDB::connect(DSN); // エラーチェック if (PEAR::isError($db)) { $this->error($db->getMessage()); } // データ取得 $sql = "SELECT" . " DATE_FORMAT(NOW(), '%Y/%m/%d %H:%M:%S') AS today," . " FROM t_hoge" ; $res = $db->getAll($sql, DB_FETCHMODE_ASSOC); // エラーチェック if (PEAR::isError($res)){ $this->error($res->getMessage()); } // DB切断 $db->disconnect(); ?>
915 :
902 :2005/05/29(日) 16:38:00 ID:???
以上スレ汚し失礼しました。
何がやりたいのかよく分からないが。 抽象化したいなら、抽象化度の高い MDB2、DB/MDB_QueryTool のようなクエリビルダや Propel、DBDO といった ORM 使ってみ。
>916 DBDOって判りづらいだろう。DB_DataObjectのことね。 あと、速度重視するならADODBとPDOも選択肢に追加。
918 :
nobodyさん :2005/05/30(月) 19:32:29 ID:RWhNHsSf
QuickFormでフォームを作成できるのは便利なんだけど、 フォーム中にJavaScriptを埋め込む事って可能? 例えば、select1の選択内容によって、select2の内容を変更するって感じのものを作りたいんだけど、 selectタグの属性に「onChange="hoge()"」って感じに属性を記述することは可能?
>>919 ついでにその方法教えてくれるとうれしい
教えて君でスマソ
>>920 お願いだからマニュアルくらいは読んでくれ
922 :
919 :2005/05/30(月) 21:48:31 ID:???
addElement('hierselect', 'hoge', 'hoge:');
HTML_QuickFormのvalidateだけを使いたいんだが。 なんでvalideteだけを独立して使うことはできんの?
なんでも何も、そういう風に作られてなけりゃ無理だろ
無理だったか? ルールの複数定義を嫌って無理矢理使ったような記憶があるが…
普通に addElement() して addRule() すれば validate() の結果を取れるが……? 単に display() とかを使わなければいいだけでは. addElement() したくない,ってことなら, おとなしく PEAR の Validate を使ってひとつひとつ自分でチェックすべし.
>>892 checkboxの値をupdateAttributesで更新しても、freeze()したときに、
hiddenの値が、1にならないか??
よくよくしらべていると、freeze時にhiddenを生成するときに、
getValueを呼び出してるんだが、
checkboxクラスのgetValueは、getCheckecの戻り値を返すようになってるから、
結局セットされる値が1になってしまう。。。
解決方法ある??
ガイシュツだったらスマソ
単に問題のメソッドをオーバーライドしたクラスを書けばいいだけじゃないか。
なるほど、がんばります。
>>929 PHP4ではメソッドのオーバーライドはできませんよ?
932 :
nobodyさん :2005/06/02(木) 23:12:50 ID:5Bd9W1e0
PHPって標準関数のオーバーライドもできるの?
peclの話題だろ
がいしゅつかも知れんけど、 DB_common::escapeってpregつかってるから、 もしかしてexecuteにEUC-JPな文字列突っ込んでうまくいってるのって たまたまだったのか? orz
>>936 Shift-JISなら問題出るかもしれないけど、EUC-JPやUTF-8なら大丈夫だろ。
基本的に被らないし。
ああ、たしかにそうでした。 自作アンテナなんだけど、たまに止まるからなんでかなーとおもってたんだが、 よく見たら^Mが入ってた。同じURLで改行コード混在してるページが原因。 それとったら動いたよ。 あとpregがあるのはescapeじゃなかったけど、まあいいや。 ありがとう。
....
940 :
nobodyさん :2005/06/24(金) 19:13:08 ID:pYTM6kF2
QUICKFORMの <form action="..." method="...">のname="..."の部分を消すことはできないんでしょうか?
PEAR::Configの使い方が良く分からないんですけど。 誰か実際に使ってる人いたら解説キボンヌ!
なにが分からんの?
>>940 <?php
$qf->removeAttribute('name');
?>
しかし色々とマトモに動かなくなるので実質は消すことは不可能と考えた方が.
なんで消したいのかを提示してみては? 何か別の解決策があるかもしれない.
>>943 XHTML1.0 strictは<form>にnameつけちゃだめっていうルールがあるらしくてそのためにと思ったんですが
>>944 それは,廃止予定だから使用「すべきでない」であって,使用「してはならない」ではないのでは……?
XHTML1.1 では name 属性が廃止されているけど,その場合でも,
適合ユーザエージェントは処理できない属性を無視「しなければならない」ので,問題はおきない.
そこをきちんと処理できない Validator の類ではエラーが出るかもしれないけど.
……と自分は理解しているんだけど,間違ってたら指摘おねがいよー
HTMLのパーサってPEARにあります? あったら教えて下さい。
DB_DataObject が MDB 対応だそうですよもまいら 次は pdo 対応ですかね…… 5 だと DBDO に行っちゃうのかな?
今さらMDBよりMDB2に対応して欲しいと思う今日この頃。 PHP5なら $MDB2->setFetchMode(MDB2_FETCHMODE_OBJECT, "someClass"); して、さらに $result = $MDB2->query($SQL, null, true, "MDB2_Iterator"); foreach($result as $row) { /* あれこれ */ } これ最強。
>>950 なぁ。それのどこがPEAR::DBと違うの?
大して変わらんやん。
952 :
nobodyさん :2005/07/05(火) 23:29:52 ID:BWLWbomG
Spreadsheet_Excel_Writerで format を使用して書式を変更するのは分かったのですが、 // これだと単一のセルになります $WorkSheet->write( 1, 0, "1列目", $Format1 ); シートもしくはブック全体に共通の書式を初期設定する方法がわかりません。 教えてください!
後で見た人が誤解するといかんので補足
>>950 > 今さらMDBよりMDB2に対応して欲しいと思う今日この頃。
DB_DataObject の MDB 対応は MDB2 だわ.
ていうか MDB1 は対応してないのかな.
MDB といえば当たり前のように 2 を指してるかのように書いてある.
pearサイトDB落ちてますYO!
XML_RPCがPHP4.3以降対応になってて pear upgrade-allができない…orz
quickformにて、例えば電話番号を三つのinputフォームを用意し、 三つのフォームのうち一つしか記入されていなかったら JavaScriptでエラーを出したいんだけど、方法はありますか? 三つのフォームにすべて入力されている場合と、 三つのフォームすべてが入力されていない場合は エラーを出さないようにしたいのです。
957 :
956 :2005/07/12(火) 14:06:19 ID:???
解決。 一応載せておきます $areaCode = $form->createElement('text', '', null, array('size' => 4, 'maxlength' => 3)); $phoneNo1 = $form->createElement('text', '', null, array('size' => 4, 'maxlength' => 3)); $phoneNo2 = $form->createElement('text', '', null, array('size' => 5, 'maxlength' => 4)); $form->addGroup(array($areaCode, $phoneNo1, $phoneNo2), 'phoneNo', 'Telephone:', '-'); $form->addGroupRule('phoneNo', 'Please fill all phone fields', 'required', null, 3, 'client'); $form->addGroupRule('phoneNo', 'Values must be numeric', 'numeric', null, 3, 'client');
958 :
956 :2005/07/12(火) 14:28:32 ID:???
あ、ダメだ、すべてのフォームへの入力が必須だ・・・
って、JavaScriptで出したいのか。 それは、自前で書くしかないんじゃないかなぁ?
961 :
956 :2005/07/12(火) 15:24:17 ID:???
>>959 addFormRule()ってJavaScriptでクライアント側にもチェック機能
付けられましたっけ?
962 :
956 :2005/07/12(火) 15:32:52 ID:???
>>960 やっぱりそうですか。
自前で書くのも考えましたが、quickformが吐き出すjavascriptに
書き加えるのは単純には行かないですよねぇ・・・
963 :
nobodyさん :2005/07/14(木) 12:06:23 ID:eHIEjUS2
PEAR::MDB + MySQL でSQLのインジェクション対策ってどうやってますか? DBのときはescapeSimple()関数使ってたんですが・・・。
965 :
nobodyさん :2005/07/18(月) 15:34:03 ID:qAc2zP8J
PHP5+QuickForm3.2.4pl1+Smartyでradioボタンだけ表示されないんだけどどういうこと??
966 :
965 :2005/07/18(月) 15:46:54 ID:???
自己解決しました $radio[] = &HTML_QuickForm::createElement('radio', null, null, 'hoge1', 0); $radio[] = &HTML_QuickForm::createElement('radio', null, null, 'hoge2', 1); $form->addGroup($radio, 'hegohego', 'blah'); $form->addElement('radio','','','','')だけじゃ表示されないのね。。
967 :
nobodyさん :2005/07/20(水) 21:28:44 ID:Qqvr7Dca
PEAR::DBで質問です。 nextId()でシリアル値を生成し、INSERTしているのですが、 INSERTされたシリアル値を取得することはできるのでしょうか。 SQLiteを使っています。 Postgresの場合、oidからselectして取得できるのですが、 せっかくPEARを使っているので、特定DBに依存しないやり方が知りたいです。 よろしくお願いします。
PEAR::DBについて質問させて下さい。 PEAR::DBのquery()または、execute()で実行されたSQL文をログに出力したいと考えています。 現在は、下記のようにquery()またはexecute()を実行する直前でログに出力しています。 $sql = "select * from table"; $logger->debug($sql); // ここでログに出力 $db->query($sql); しかし、このような場合は実行されたSQL文を出力できません。 $sql = "insert into table (col1, col2) values(?, ?)"; $params = array( 'val1', 'val2' ); $sth = $db->prepare($sql); $logger->debug($sql); $db->execute($sth, $params); この場合は、"insert into table (col1, col2) values(?, ?)"がログに出力されますが、 実際に実行されたSQL文(?が実際の値に置換された状態)をログに出力できません。 プレースホルダを使用した場合に、プレースホルダが置換された状態のSQLを取得するには どうすればいいでしょうか。 [環境] PostgresSQL 8.0 PHP 4.3.11 Apache 2.0.52 Windows2000 SP4 よろしくお願いします。
969 :
nobodyさん :2005/07/22(金) 01:20:46 ID:IizYuRm3
>>968 PEAR::DBでは発行されたSQLをログに残す機能はないので、
PostgreSQL側でログに取るほうが楽だと思う。
どうしてもPHP側でやりたければ、DB_pgsql::simpleQuery あたりに
ログを吐くコードを埋め込むのがいいんじゃない?
既存のPEAR::DBのコードを変更したくない場合は、DB_pgsqlを継承したクラスを
つくって、それをDB::connectの返値からうまく生成すればできると思う。
>>968 接続時に、オプションでdebug levelを上げれば、どっかでとれそうな気がする。
気がするだけなんだけど。
$db =& DB::connect($dsn, array( 'debug' => 2));
とか
>>971 > 接続時に、オプションでdebug levelを上げれば、どっかでとれそうな気がする。
それではとれない。
ソース読めば分かるけど、PEAR::DBではdebug levelはあまり使われておらず
2以上を指定したときに、各DBドライバのロード時のエラーが表示される
という目的にしか使えない。つまり役に立たない。
973 :
968 :2005/07/23(土) 00:11:48 ID:???
>>970 できれば、PEAR::DBのコードを修正せずにやりたいので、
DB_pgsqlを継承する方法を試そうとしましたが、
DB::connectの返値からDB_pgsqlを継承したクラスをうまく生成する方法が
思いつきませんでした。
今のところ、PostgreSQL側でログを取るという方法が現実的のようです。
ありがとうございました。
>>968 > プレースホルダが置換された状態のSQLを取得するには
今回は pgsql だけの話でいいのかもしれないけど,
そもそもプレースホルダの機能ってのは,
単純に文字列として ? を何かに置き換えるって話だけじゃない機能なので,
「置換された状態のSQL」なんてものは存在しない RDBMS もある.
つまり,発想自体が誤りなので,その機能を DB に要求するのは無理があると思う.
ところでそろそろ次スレの季節かな?
>>990 あたりが作ればいいのかな.
975 :
nobodyさん :2005/07/27(水) 05:36:52 ID:3RtjRt/f
HTML_QucikFormで、Filterが最後でしか効かないんですけど、 これを入力エラーで修正中や、freezeして確認する時などにも、 随時効かすようにできないですかねぇ。
getSubmitValueを使う方法しか思いつかない
exportValues() した値を最後に setConstants() とか…… ふと思いついただけだがそんな糞コードを書いてはいけないヨ?
Net_UserAgent_Mobile 0.24.0 up
PEAR::Spreadsheet_Excel_Writer使ってみたけどまだまだですな。 縦方向のalignが設定できない(アクセサが無いだけ?)のと、 マージしたセルにフォーマットを適用できないのが致命的。 これならEXCELで作った雛形ファイルをXML形式で保存して、 テキスト置換で編集した方がまし(OfficeXP以降しか読めないけど)。 早くベータ版から正式版にならんかな。
980 :
975 :
2005/07/29(金) 02:58:42 ID:??? 変な小細工するくらいなら、最初からHTML_QuickFormを使わないほうがいいかもしれませんね。 ユーザは、自分がpostした値が、どのようにフィルタされて受け取られるかを 確認できた方がいいんだけどなぁ。 なんだかHTML_QuickForm、便利は便利なんだけど、ぼみょー感を感じます・・。