【PHP】下らねぇ質問はここに書き込みやがれ 45
レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん
2007/05/12(土) 16:42:48ID:???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カテゴリ)の各スレで
0951nobodyさん
2007/06/09(土) 22:28:58ID:fw4XPRkl先ほどの質問をした者ですが、
繋がらない理由を教えていただけませんか?
インターネットエクスプローラーなら繋がるのですが、
0953nobodyさん
2007/06/09(土) 22:35:39ID:???0954nobodyさん
2007/06/09(土) 22:39:26ID:fw4XPRkl先ほど質問した者ですが、localhostの意味がわからないので説明してくれませんか?
0955nobodyさん
2007/06/09(土) 22:39:33ID:???0956nobodyさん
2007/06/09(土) 22:40:40ID:???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:???0958nobodyさん
2007/06/09(土) 22:42:55ID:???スレ違いだと言っているけれど。ついでだから教えてあげる。
IEは localhost→ hostsファイルを参照→ 127.0.0.1 (自分自身) と解釈して、自分のPCに繋がるわけ。
どうせi-modehtmlシュミレータは、それを解釈できないだけでしょ。
設定画面か何かに、hostsファイルを参照するとかその辺の設定があるはず。んでそれがOFFになっていて解釈できないと。
だからPHPは全く関係ない。
0959nobodyさん
2007/06/09(土) 22:48:11ID:fw4XPRkl先ほど質問した者ですが、
設定はONにしてありますが、接続出来ないのです。
これはなぜでしょうか?
0960nobodyさん
2007/06/09(土) 22:54:21ID:???・そのシュミレータとやらを一回再起動したりした?
・あと >>948 は試してみた?
・パーソナルファイヤーウォールとかで蹴られていないか?
何故でしょうと聞かれても、エスパーじゃないから出来ない。
一つづつ可能性をつぶしていけよ。 これ以上は自分でググってがんばれ。
0961nobodyさん
2007/06/09(土) 23:01:02ID:fw4XPRkl丁寧なる改善策ありがとうございます。
お時間を取らせてしまいすみませんでした。
http://127.0.0.1/bbs.phpとしましたら接続出来ました。
ありがとうございます。
では
0962nobodyさん
2007/06/09(土) 23:12:39ID:yCd1SwCoとは書けないですよね?
$object1->object2->var
はできるのになんなのこの言語。
1 mysqlへのデータ格納時にサニタイズしなければならない文字
2 html出力時にサニタイズしなければならない文字
3 get/postでのデータ受け取り直後にサニタイズしなければならない文字
を教えていただきたいです。
また、htmlspecialcharsでjavascriptなどの特殊なスクリプトの埋め込み攻撃を完全に防げるのかどうか教えていただきたいです
また、上記すべての設定ではmagic_quote gpcの設定をonで使用することを前提としてのアドバイスをお願いいたします
0965 ◆yBEncckFOU
2007/06/09(土) 23:25:21ID:Op34nGQd0967nobodyさん
2007/06/09(土) 23:49:57ID:???SQLInjectionとXSSがごっちゃになってるような
お約束ってことで「サニタイズ言うな」
1はそれぞれDBのエスケープ用の関数なりプレースホルダーなりを使う
2はhtmlspecialchars
3はいらない
0968 ◆yBEncckFOU
2007/06/09(土) 23:55:24ID:Op34nGQdありがとうございました
0969nobodyさん
2007/06/10(日) 00:03:14ID:???「サニタイズ言いたいだけちゃうんか」
というのは置いておいて、
・どうしても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 = 'http://www.sample.com/****';
$file = file_get_contents ($url);
0971 ◆yBEncckFOU
2007/06/10(日) 00:13:58ID:isb7MrtTありがとうございました
0972nobodyさん
2007/06/10(日) 00:25:41ID:qbDoORWsMySQL + PHP で掲示板を作っているのですが、分からないことがあります。
MySQLのSQL文中にPHPの変数を入れたいです。
こんなカンジ↓
$sql = "select count(*) from post2 where tid=".$row["id"];
これで実行してみるとResource id #4 Resource id #5 Resource id #6...
といった結果が得られて思うような結果(掲示板のレス数)が得られません。
どのようにすればいいか教えてください。お願いします。
0974nobodyさん
2007/06/10(日) 00:42:49ID:???http://jp.php.net/manual/ja/ref.fileinfo.php
0975972
2007/06/10(日) 00:43:15ID:qbDoORWsレスありがとうございます。
Resource idは分かっていません・・・。
ぐぐってみましたが有用な情報は得られませんでした。
Webプログラムは検索が難しいです。
もう少し考えてみることにします。
ありがとうございました。
0976nobodyさん
2007/06/10(日) 00:49:58ID:17od7jmrANDとORのグルーピングを考えるとどうしても一つの条件を
オブジェクトまたは配列にしないとうまくできないと思った。
けど、できますか?
またはよく言われているcriteriaクラスとかはどうやってるんでしょうか。
0977nobodyさん
2007/06/10(日) 00:52:18ID:???マニュアル嫁 >>1
$ret = mysql_query($sql);
while ($a = mysql_fetch_assoc($ret)) {\
var_dump($a);
}
0980nobodyさん
2007/06/10(日) 01:03:12ID:???ID:fw4XPRklに対して感じた「いや、書かなくてもわかるから」感がなくて物足りない。
0981976
2007/06/10(日) 01:11:16ID:17od7jmrTrayクラスを作って、
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のなかに入れ子にできるようにするわけだ。
こんなんしか思いつかん。
0982972
2007/06/10(日) 01:13:59ID:qbDoORWsありがとう。
おかげでうまくいきました。
$sql = "select count(*) as reply from post2 where tid = $row[id]";
として新しいフィールドを作ってあげるとうまくできました。感謝!
0983nobodyさん
2007/06/10(日) 01:15:25ID:???そんなことしなくても取れるけどね
0985nobodyさん
2007/06/10(日) 01:35:55ID:???$sql = "select count(*) as reply from post2 where tid = {$row['id']}";
って書いたほうが俺は安心する。
0986976
2007/06/10(日) 01:39:02ID:17od7jmrところでわたくしの質問なんですが誰も答えてくれないですよねすんません。
結局WHERE以下の1文章をオブジェクトにする設計にしそうです。
0989976
2007/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:???いろいろあるだろうけど、ラムダを使って入れ子方式にすんのはどうよ。
$cond->add("uid < 79");
$cond->or(create_function('$cond','
$cond->add("uname like %a%");
$cond->add("uname like %b%");
'));
うーん、文字列で渡すのがいまいちださいな。
create_functionはor()の中で呼んでもいいね。
0991867
2007/06/10(日) 02:21:12ID:???次スレの扱いは>>867な感じでいいのかな?
過去スレリストなんかはその次でどうにかするとして。
0992nobodyさん
2007/06/10(日) 02:39:31ID:???あんま的確なレスになってないけど
ttp://www.symfony-project.com/snippets/snippets/tagged/criteria/order_by/date
とか symfonyの
symfony/vendor/propel\util/Criteria.php
とか参考にならない?
0993976
2007/06/10(日) 02:51:20ID:17od7jmr賢すぎです。馬鹿はPHP極められないなぁとか思った次第です。
symfonyのcriteriaは…紹介だけだと詳しくのってませんでした。
ソースコード見るよりとりあえず作ってみます。どうもでした。
0995976
2007/06/10(日) 06:28:21ID:17od7jmrできた。よかったら使ってください。
長いんでこのスレ埋めてしまいますすんません。
<?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;
}
}
0996976
2007/06/10(日) 06:29:47ID:17od7jmr{
$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;
}
}
0997976
2007/06/10(日) 06:31:11ID:17od7jmrclass 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;
}
}
0998976
2007/06/10(日) 06:32:25ID:17od7jmrclass 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;
}
}
0999976
2007/06/10(日) 06:33:27ID:17od7jmrclass 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:???10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。