のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,689,932人
昨日:no data人
今日:
最近の注目
人気の最安値情報

元スレ【PHP】下らねぇ質問はID出して書き込みやがれ 86

php覧 / PC版 /
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
←前へ 1 2 3 4 5 6 7 8 9 10 11 12 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter

103 = :

変数展開をCPUの仕事だと思ってる日曜プログラマーって使えないよね

104 = :

よくわからんが、寝ぼけて文中に変数名入れちゃわないように
スタティックな文字列はシングルクォートにするようにしてる。

105 = :

ifとcaseと三項演算子の中からいちばん可読性の高いものを自然に選べるのがよいプログラマ?
ifとcaseと三項演算子の中からいちばん処理速度の速いものを自然に選べるのがよいプログラマ?

106 = :

そのレベルなら可読性でしょ。

数100万単位のデータ処理なら、設計の自由度と判りやすさで
RMDBSを選ぶか、またはシーケンシャルアクセスを使って独自
の高速データ処理ができる方法を選ぶかって考えなきゃいけないけど。

107 = :

コーディング規約を守れるのがよいプログラマ

108 = :

仕様書やコーディング規約通りにかけるのがよいプログラマ。

109 = :

>>106
>RMDBS

110 = :

>>109
いいじゃないかよぉ、Typoくらいよぉ(><)

112 = :

>>110
間違ったんだろ?知識なんてカケラも無いんだろ?素直になれよ?

116 :

質問です。
http://www.livein-tokyo.com/search3.php
で"市町村id={$val}" の一致したデータを出す場合
$query = "select * from 物件表 where";
foreach ($_POST['town_cd'] as $key => $val) {
 if ($key == 0) {
  $query .= " 市町村id={$val}";
  データを出すsql文
  continue;
 }
 $query .= " or 市町村id={$val}";
}
foreach ($_POST['town_cd'] as $key => $val) {
 if ($key == 1) {
  $query .= " 市町村id={$val}";
  データを出すsql文
  continue;
 }
 $query .= " or 市町村id={$val}";
}
でOK?

119 = :

>>118
環境作って実際に動作させてみた?

・上のforeachと下のforeachはそれぞれ何がしたいの?
・foreach内の$keyが0か1かで判断していいの?
・$_POST['town_cd']が無い場合(全件取得の場合?)に
 $queryは "select * from 物件表 where"になるけどそのまま実行したらエラーになるよね?

121 = :

$keyってもしかしてwhereの直後の条件(orがいらない)かどうかの判断で使ってる?
それなら、ベースとなるSQLを「select * from 物件表 where 1」と「where 1」とするのが定石。
これなら$_POST['town_cd'] が空(全件の場合)もエラーにならない。
つまりこんな感じか

$query = "select * from 物件表 where 1";
foreach ($_POST['town_cd'] as $key => $val) {
 $query .= " or 市町村id={$val}";
}

122 = :

空の場合はSQLException出さない?

123 = :

>>122
俺に言ってる?
SQLExceptionはでないと思うよ「select * from 物件表 where 1」を実行すればわかる

上の書き方だと、$_POST['town_cd']が空だったらforeachでWarningはでるけど。

124 = :

普通は例外キャッチして検索条件入れてくださいってechoするよね

125 = :

ああ・・・Javaと混ざってた。スルーしてちょうだい。

126 = :

>>124
それは要件によると思うよ
>>116 のような不動産サイトで各種条件(価格とか面積とか)を指定して物件を絞り込むような場合
条件指定しなければ全件でてくる所が多い。

127 = :

いちいち全件出すような仕様にはしないんじゃない?
転送量的にも負荷的に考えて
もし出すにしても人気のものとか売り出したいものとか数件出す程度にする
規模のおおきくなる商用サイトとかだとそういうかんじだとおもうけど
動画サイトとかは典型例
全件なら全件チェックを別途いれるんじゃないかな

128 = :

こまけえ話はいいんだよ
とりあえず>>116は勉強不足
実力に見合ったとこからやらないと
いきなり飛び級してもついていけなきゃ意味がない
かえって遠回り

129 = :

1ページ辺りの表示件数は制御するけど
条件は全部無条件にするって意味じゃね

130 = :

>>116,120,121
SQL Injection も指摘しておく

131 = :

>>130
そこまで言い出すと余計混乱すると思うw

132 = :

かもしれないが,実システムでは避けては通れない道なんだから
オミットできるものではない

133 = :

まぁSQLインジェクションなんざXSSと同じで関数1つでどうにかなる問題だけどな

135 = :

くだ質でもそこまで考慮した回答を提示しろって事か。
ただ、要点しぼらないと余計わからなくなるかもしれないし。

悩み所だな。

136 = :

PHPにはmysql_real_escape_stringとかデータベース用のエスケープ関数んだから。
インジェクションの被害は1億円超える事例もあるし(ttp://internet.watch.impress.co.jp/cda/news/2006/11/29/14076.html )
実際にネットに公開するような使い方だしさ

137 = :

XSS 対策には引数が必要な罠

138 = :

>>137
kwsk

139 = :

ENT_QUOTESだろ

140 = :

>>139
付けないとどうなんの?

141 = :

>>140
PHP: htmlspecialchars - Manual
http://www.php.net/manual/ja/function.htmlspecialchars.php

142 = :

function escape($str){
  return stripslashes(htmlspecialchars($str,ENT_QUOTES));
}
$_GET = array_map("escape", $_GET);

1つずつエスケープするのは面倒なので俺ならこうするな

143 = :

出力時にエスケープしてください

144 = :

>>141
kwsk

145 = :

>>143
出力時のうっかりエスケープ忘れを防げないよね。
なので >>142 が安全。

146 = :

うっかりエスケープ忘れしてしまうような設計なら問題あり

147 = :

無条件でstripslashes、$_GET上書きに違和感を感じるが・・・

>>145
出力時のうっかりミスを考えるなら、その関数を入れ忘れるのも考慮しないといけないんじゃ?
そしてそのリスクって変わらないと思うんだけど。
スクリプト内の色々な箇所でecho出力してるわけじゃないでしょ?

148 = :

>>142 は一か所に入れておけば済むが、
出力時のエスケープは何箇所かに及ぶため、
人間である限りうっかりが起こる。
失敗学的に 142 のようなのを一か所だけ、が安全。

149 = :

入力時にエスケープするのは意味あいが変わるじゃん
エスケープした時点で受け取った入力内容と異なるデータになっちゃう
セキュリティを考慮しても違和感のあるプログラミングは避けたほうがいいと思う
入力時にエスケープは個人的にはないわー

150 = :

>>148
やっぱり設計思想というか考え方の差だね

俺の場合は出力箇所はスクリプト内で常に1箇所にしてるのと、
出力する変数は全て一つの表示用配列に入れ、出力時に1回 >>142 のようにエスケープすれば良いようにしてる。
だから安全度は変わらないと思う。

そろそろフレームワーク使えと言われそうだw


←前へ 1 2 3 4 5 6 7 8 9 10 11 12 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / php一覧へ
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

類似してるかもしれないスレッド


トップメニューへ / →のくす牧場書庫について