【PHP】下らねぇ質問はID出して書き込みやがれ 81 at PHP
[2ch|▼Menu]
[1からを表示]
50:nobodyさん
09/02/19 14:51:13
パス指定してやればいいじゃん

51:nobodyさん
09/02/19 14:59:40 4v4/gEqf
$str = '1' * 8;
print $str;

とした場合、

8

になってしまいますが、

'11111111'

のように出力させるにはどうすればよいでしょうか?

52:nobodyさん
09/02/19 15:00:41
>>51
str_repeat

53:nobodyさん
09/02/19 15:11:16
>>40
$str = '1' * 8

これで

'11111111'

が出力されるだろうという発想が凄い。俺には無いわ。

54:51
09/02/19 15:14:06
>>52
即レス、サンクス。助かりました。

55:nobodyさん
09/02/19 15:15:47
>>53
rubyだと動いちゃうんですよ、それで。


56:nobodyさん
09/02/19 15:17:26
>>53ってPHPしかしらないの?w

57:nobodyさん
09/02/19 15:26:43
こういうゴミみたいな関数が役立つんだよな
Javaでやろうと思ったらめんどくさくてしょうがない

58:nobodyさん
09/02/19 15:37:45
>>55
マジでか!
世の中何があるかわからねーな。

>>56
すまん、勉強不足だ。
C/Java/PHPしかわからないんだ、許してくれ。

59:nobodyさん
09/02/19 15:38:26
perlだと
$str = '1' x 8;

うう〜ん直感的にわかりやすい

60:nobodyさん
09/02/19 15:40:00
PHPの場合は''や""で囲ってあっても
計算式であればintになるし、連結であればstringになるからなぁ


61:nobodyさん
09/02/19 15:40:47
>>58
vb/c/c++/java/cobol/python/ruby/perl/php/basic
これぐらい勉強してからでなおしてこい

62:nobodyさん
09/02/19 15:42:39
>>61
今時VBいるか?C#だろう、そこは。

63:nobodyさん
09/02/19 15:43:46
>>62
>>61は三十路VBおじさん

64:nobodyさん
09/02/19 15:43:48
>>59
Perlもそれで
'11111111'
になるのか?

65:nobodyさん
09/02/19 15:52:17
>>62
銀行系ではVBも使われてるの知らんのか

66:nobodyさん
09/02/19 15:57:42
>>65
今時ありえねーよ。

67:49
09/02/19 15:58:00 Y6HkRPoJ
>>50
毎回指定するということでしょうか?
どこかに設定ファイルがあるのでしょうか?

68:nobodyさん
09/02/19 16:02:26
>>67
いや、インストールする場所を指定しろってことだよ
何がしたいの?
/usr/share/php/PEARにインストールしたいんじゃないの?

69:nobodyさん
09/02/19 16:04:55
>>66
学生は黙ってろ

70:nobodyさん
09/02/19 16:06:01
>>69
待てよ。
VBつっても.netだよな?6じゃねーよな?

71:nobodyさん
09/02/19 16:09:19
>>65は既存アプリのこと言ってるんだろ。既存言い出したらなんでもあるわな

72:nobodyさん
09/02/19 16:22:50
>>64
URLリンク(q.hatena.ne.jp)

perlだと'1' x 8 で '11111111'で、
ruby、pythonだと'1' * 8 で '11111111'だな。


73:nobodyさん
09/02/19 18:53:18 wRj5eNSW
ファイルの文字コードを調べたいのですが
何かそのような関数はありませんでしょうか?

74:nobodyさん
09/02/19 19:09:05
>>73
マニュアルのmb_〜からはじまる関数を読み漁れば見つかりますよね

75:73
09/02/19 19:12:43 wRj5eNSW
>>74
先ほどから見てますが検討がつきません
一度文字列に格納してから調べろということなのでしょうか?

76:nobodyさん
09/02/19 19:17:38
>>73
何のために調べるの?

77:73
09/02/19 19:21:27 wRj5eNSW
>>76
ファイルをPHPの内部エンコードにあわせるのが目的です
mb_convert_encodingの第三引数にautoを渡したところ
うまく動作しなかったので
取得したものを第三引数にセットしようと思った次第です

78:nobodyさん
09/02/19 19:22:37
>>77
用意したファイルを内部エンコードにしておけばいいんじゃね?

79:73
09/02/19 19:23:17 wRj5eNSW
>>78
外部から第三者ガアップロードするものなので不可能なんです

80:nobodyさん
09/02/19 19:33:59
>>73
ファイルを読み込む前にチェックするっていうのは現実的じゃない。
それはわかるよな?

判定コードを書くのが面倒だったら nkfに通すとか。

81:nobodyさん
09/02/19 19:40:07
autoは設定されてないと使えないから
"SJIS,EUC-JP,UTF-8,JIS"みたいに書いてみそ

82:emi
09/02/19 19:46:09 62n5Tebm
スレ違いだったらすみません。質問です。
PHPとjavascriptを連携させるにはどうしたらいいのでしょうか。
<?php
$fp = fopen('http://自分のHP/GPS/20090109.txt', 'r');
$count = 0;
$remove_row_list = array(1, 2, 3, 4);
while ($data = fgetcsv($fp, 10000)) {
if (!in_array($count % 5, $remove_row_list)) {
echo $data[1] ."<br>\n";
echo $data[2] ."<br>\n";
echo $data[4] ."<br><br>\n";
}
{
$count++;
}
}
fclose($fp);

?>

83:nobodyさん
09/02/19 19:51:14
>>82
そのソースのどこにJavaScriptが出てきてるんだ?

84:82
09/02/19 19:53:50 /38upbVh
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "URLリンク(www.w3.org)">
<html xmlns="URLリンク(www.w3.org)">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>Google Maps JavaScript API Example</title>
<script src="URLリンク(maps.google.com)" type="text/javascript"></script>
<script src="c.php" type="text/javascript">
//<![CDATA[

function load() {
if (GBrowserIsCompatible()) {

//表したい場所の地図の表示
var map = new GMap2(document.getElementById("map"));
map.setCenter(new GLatLng(○,△), 16);
    //○=PHPのデータ $data[2]、△=PHPのデータ $data[4] を出したい
//特定の箇所にピンを立てる
var marker = new GMarker(new GLatLng(○,△));
map.addOverlay(marker);
}
}

//]]>
</script>
</head>
<body onload="load()" onunload="GUnload()">
<div id="map" style="width: 500px; height: 500px"></div>
</body>
</html>
これらをまとめてHTMLで表したい場合どのようにすればよいのでしょうか。


85:nobodyさん
09/02/19 19:54:13
>>82
連携してJavaScriptに何やらせたいのか書かないとわからん
サーバでPHP処理→ブラウザでJavaScript実行の順番はわかってるのか?

86:nobodyさん
09/02/19 19:56:22
var data2=<?=$data[2]?>;
var data4=<?=$data[4]?>;

//表したい場所の地図の表示
var map = new GMap2(document.getElementById("map"));
map.setCenter(new GLatLng(data2,data4), 16);
    //○=PHPのデータ $data[2]、△=PHPのデータ $data[4] を出したい
//特定の箇所にピンを立てる
var marker = new GMarker(new GLatLng(data2,data4));
map.addOverlay(marker);

でOK

87:73
09/02/19 19:56:55
>>80
レスどうもありがとうございます
kccコマンドが使えるのですができればコマンドラインは回避したいです

>>81
どうもありがとうございます
JISだとだめみたいだったのでISO-2022-JP,SJIS,EUC-JP,UTF-8
とやったところ4種類に対応することができました
全てに対応させるのは限界がありそうなので妥協してこの方法にしたいと思います

皆さんどうもありがとうございました

88:nobodyさん
09/02/19 19:56:58
>>82
その手の質問はよくあるけど、結論「無理」
できても、PHPでJavaScriptを書き出すくらい(変化に応じて書き出せる)
PHPから動的に読み込むにはAjaxを使えばできる

ちなみにその辺使うなら、ある程度JavaScriptは勉強しておいたほうがいい


関係ないが、無駄にAjax使いすぎるやつがいてうぜぇ・・・
しかも、JavaScriptをPHPのechoで吐き出してるから修正すらダルい

89:nobodyさん
09/02/19 20:04:10
その修正、手でやんのか?
まるっとキャプチャしちまえばいいじゃねぇか

90:nobodyさん
09/02/19 20:05:07 nJvgqLn9
sjsやeucで作られたスクリプト中に
echo "あ";
echo 'あ';

というを"と ' を使ったら書き方をするとクロスサイトスクリプティングが発生するみたいなのですが
これはなぜでしょうか?

91:82
09/02/19 20:06:16 /38upbVh
>>85
PHPのほうのテキストデータはサーバから読み込んだものなので
ブラウザからPHPで処理できるのかと…
>>88
やはり無理なのでしょうか?
すみません初心者なものなので知識はないのですが↓
でしたらPHPで出力したデータをjavascriptで扱うにはどうすべきなのでしょう?

92:nobodyさん
09/02/19 20:06:50
ダメ文字でググれ

93:nobodyさん
09/02/19 20:08:25
>>91
PHPでJavaScriptを書き出せばいいんじゃね?一番簡単な方法なら


function javascript() {

<?php
for($i = 0 ; $i < 5 ; $i++) {
echo "var test[$i] = '{$array[$i]}'\n";
}
?>

}

94:nobodyさん
09/02/19 20:20:19
>>90
>というを"と ' を使ったら書き方をすると
この辺日本語で頼むわ

95:90
09/02/19 21:13:27
すいません書き直します

echoを使うとき「"」で文字列を囲むのと、「'」で文字列を囲む記述がありますが
この"と'を統一せず、入り組んで使うとsjisとeucではクロスサイトスクリプティングになるのですがなぜなんでしょうか?


echo "テスト";
echo "こんにちは";
echo 'はじめまして';
echo "ありがとう";

96:nobodyさん
09/02/19 21:17:53
>>95
その質問は間違っている。
その例に出てきたもので、XSSが起きるわけじゃない。
しかし、君にそのクイズを出した人が言わんとしていることには二つ以上の可能性がある。
一つは、htmlspecialcharsのENT_QUOTESとENT_COMPATの動作の問題
もう一つはSJISの5Cの問題。
他になんか意図があるかもしれんが、仮定が間違ってるので、何を言っても意味がないだろう。

97:nobodyさん
09/02/19 21:19:55
あぁ、ちなみにHTML要素内の5CでXSSは起きない。

98:90
09/02/19 21:24:50
一応参考URLも載せておきます
URLリンク(d.hatena.ne.jp)
どなたかお願いします

99:nobodyさん
09/02/19 21:25:53 SUg9mjPG
csv、tsv、xml、jsonなどのデータフォーマット以外にphpで扱えるデータフォーマットを教えてください

100:nobodyさん
09/02/19 21:26:33
すいませんIDがJPG

101:nobodyさん
09/02/19 21:30:18
>>98
そのURLのソース試してみたか?
問題ないぞ。

102:nobodyさん
09/02/19 21:31:03
>>99
何だって良いんじゃない?
<>sv なんてのも可だし

103:nobodyさん
09/02/19 21:32:32
つうか、htmlspecialcharsの第2引数と第3引数をちゃんと指定していれば問題なし。

シングルクォートとダブルクォートをミックスすると表示は崩れるがXSSはできない。

104:nobodyさん
09/02/19 22:20:00
>>82
echo htmlspecialchars($data[1])
echo htmlspecialchars($data[2])

105:nobodyさん
09/02/19 22:25:13 NhJwmPwv
DWでPHP書いてますがeclipseで開発するメリットを教えてください

106:nobodyさん
09/02/19 22:27:41
ない

107:nobodyさん
09/02/19 22:42:26
DWの方が絶対良い
データベースとか楽に構築できるしね

108:nobodyさん
09/02/19 22:56:12
>>105
スレチと思ったが開発環境スレが落ちてるな
Eclipseのいいところは、
クラスや関数のアウトライン参照、コンテキストに沿ったコード補完、リファクタリング(まだまだ貧弱だが)、
ブレークポイントやステップ実行、その際の変数参照、
プラグインを導入すればバージョン管理システムやDBMSともIDE上から作業できる
これらに興味がなければ無理して乗り換える必要もないかな

109:nobodyさん
09/02/19 23:01:15
DWでもCVSやSVNと接続できるけどな。
PDT使ったら、DWには戻れない。

まぁ、でも、サイトにすぐアップできるとか、いいよね。
でも、コードカラーリング崩れない? > DW

110:nobodyさん
09/02/20 00:57:08
DWはIDEじゃないから比較するものじゃないでしょ
使ったことないから知らないけどデバッガとかついてないでしょ?

111:82
09/02/20 01:21:04 w405pQbs
>>86
>>104
ありがとうございます。
あと、たとえば$data[2]はたとえば3645.5218のような数字なのですが
桁を変えて36.455218にしたうえで10進から60進にしたいんです。
度 = int(36.455218) = 36
分 = int(0.455218 * 60) = int(27.31308) = 27
秒 = int(0.31308 * 60 *1000) / 1000 = 18.7848
= 36°27′18.7848″といったような感じにしたいんです。

112:nobodyさん
09/02/20 01:37:44 r16tK4jF
Smartyの質問なのですが、、PHPと関連するので質問させていただきます。

テンプレートを表示する時
$smarty->display("index.html");

で表示できますが、display()の中を変数にする事って出来ないでしょうか?
それが出来たら、DBに保存しているHTMLをSmartyに反映させることが
出来るのですが、$smarty->display($html);とする方法では無理でした。

113:nobodyさん
09/02/20 02:41:12
demiru

114:nobodyさん
09/02/20 05:22:05 nLAMcH0P
PHPのメモリって勝手に開放されるのですか?
デストラクタでunsetとかしないでも大丈夫ですか?

115:nobodyさん
09/02/20 07:29:32
自動的に開放する。
無闇にunsetすると非効率になることが多いらしい
が、処理時間の長いジョブとかの場合は開放した方がいい場合もある

116:nobodyさん
09/02/20 08:38:58
>>112
URLリンク(www.smarty.net)
これでできないか?

117:nobodyさん
09/02/20 09:18:57
はい?
$template = 'index.html';
$smarty->display($template);
で普通にできるのでは?


118:nobodyさん
09/02/20 10:16:20 P+ZCl9Zr
昨日今日からの初心者です。
<html><body>
<?php
if(!適用条件)
{ echo "適用外"; exit;}
// 適用条件内
...
?>
</body></html>
と書くと適用条件外の場合"</body></html>"が出力しないようなのですが仕様なのでしょうか?
その場合回避策としてタグの終りにジャンプとか抜けるみたなことは出来るのでしょうか?
(適用条件内を1スコープにして括弧で括る、は出来ればしたくないので…)

119:nobodyさん
09/02/20 10:29:22
>>118
exitじゃなくて、goto ラベル;にしたらいいよ

120:nobodyさん
09/02/20 10:39:43
>>119
5.3以降でしか使えない変な物を教えるな

>>118
条件外の時はexitしてるからそれ以降が実行されないので
それ以降の</body></html>が出力されない
そういう風に書くなら

if (適用条件) {
 条件内処理
}
else {
 条件外処理
}
にすればいい
あと、こっちのスレのがオススメ
スレリンク(php板)

121:nobodyさん
09/02/20 10:45:06
条件内処理をブロックに入れたくないって言ってるんだから、>>120は無理でしょ。

せめて、
{ echo "適用外</body></html> "; exit;}
だな。

122:nobodyさん
09/02/20 11:05:37
低級者向け:関数化すれ
中級者向け:テンプレエンジン使え
上級者向け:フレームワーク使え

123:nobodyさん
09/02/20 11:05:49
いや、なんでそこでexit使うか分からんな。
>>118はexit使わなくても問題ないし。

124:nobodyさん
09/02/20 11:06:54 /aL6hv6c
>>122
逆じゃない?PHPで自分で作れないからフレームワーク使うんだろ?

125:nobodyさん
09/02/20 11:06:57
exitしないと、適用外のときでも、適用内の出力がまざっちまうじゃねぇか

126:nobodyさん
09/02/20 11:08:20
まず、初心者がくくりたくないとかいうわがままを許していいのかってことじゃねぇか。

127:nobodyさん
09/02/20 11:10:01
>>125
適用外のときは別途処理すればよくね?

128:nobodyさん
09/02/20 11:10:28
>>118
なぜ「出来ればしたくない」のか聞かせてくれ。

129:nobodyさん
09/02/20 11:18:07
>>127
詳しく

130:nobodyさん
09/02/20 11:23:24 P+ZCl9Zr
回答・説明ありがとうございます。
取りあえず出来る書き方で書いて、天に祈りが届いたと思ってPHP5.3を待つ事にします。

>>128
Cで例外処理の場合はgoto文を使いたい(条件文が増えるとネストが深くなったりコードが重複したりするので)
みたいなものです、プログラム思想みたいなものなので余りこれ以上の突っ込みはご勘弁を…

131:nobodyさん
09/02/20 11:25:54
gotoの方がよっぽど悪質だよww

132:nobodyさん
09/02/20 11:34:03
try-catch

133:nobodyさん
09/02/20 11:39:58
こんなところでtry-catchを持ち出そうとするからPHPerは糞だって言われるんだ

134:nobodyさん
09/02/20 11:41:19
>>133
すまん
例外処理と聞いて反射的に貼り付けただけなんだ

135:nobodyさん
09/02/20 11:56:07
>>130
それは貴方のロジックとかが悪いだけ

136:nobodyさん
09/02/20 11:56:21
gotoが許されるのはHSPだけです

137:nobodyさん
09/02/20 11:59:50
finallyを実装しなかった罪は思い

138:nobodyさん
09/02/20 12:55:37
設計が悪いのにプログラム思想がうんぬん言われてもな…w
困るんだわ…w

139:nobodyさん
09/02/20 13:12:10
せっ・・・けい・・・?

140:nobodyさん
09/02/20 15:34:00
PHPのデバッガで、gdbのようなものはありますか?
主にコマンドラインプログラムが対象です

attachの機能(すでに起動しているものを乗っ取れる)が
必須なんですが

141:nobodyさん
09/02/20 16:27:31 DGCUxhS+
組込Linux C/C++ なドライバ屋(PHP歴は5日w)が質問させていただきます。
// 赤の他人の尻拭い中

識者いらっしゃいましたら助けてください。
よろしくお願いします。

【OS名】Linuxカーネル 2.6.18-92 (RHEL5.3)
【PHPのバージョン】php5.1.6
【連携ソフトウェア】Akelos
【質問内容】
XHTML 1.0 / UTF-8 な日本語ページ(タイトルも日本語)を出力する view があります。
IEやFireFoxなどのブラウザ、docomo iモードでは期待する内容が表示されます。
が、ezwebで文字化けします。

UTF-8が問題かと思ったのですが、同ページをPCブラウザ上で表示させ、
ソースを xx.html として保存。
このxx.html をezwebで表示すると、文字化けせずに期待通りの表示になります。

ezweb のブラウザ側の問題の可能性もあるかもしれませんが、回避策など
ありましたら、教えてください。

--- xx.html の内容
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"URLリンク(www.w3.org)">
<html xmlns="URLリンク(www.w3.org)">
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<title>たいとる</title>
// 以下略


142:nobodyさん
09/02/20 16:33:21
どうしてもUTF8でやりたいのなら
ezwebだけ出力するときだけsjisに変換したら?

143:nobodyさん
09/02/20 16:35:22
>>141
URLリンク(www.au.kddi.com)
> また、EZwebでサポートする文字コードはShift-JISです。

144:141
09/02/20 16:44:08
>>142,143
返答ありがとうございます。
Shift-JISに変換して出力するようにします。

ですが、.html拡張子のUTF-8なページは文字化けしないのが疑問のままなのは
ちょっとモヤモヤが残ります。
識者いらっしゃいましたら、引き続きよろしくお願いします。

145:nobodyさん
09/02/20 18:39:08
>>144
header送信はどうやってる?

146:nobodyさん
09/02/20 18:58:54 QkuM0xlT
PHPの中から、apache上で走っているのか
バッチファイル的に使われているのか(シェル上で、php hoge.php)を
判断する方法を教えて下さい

147:nobodyさん
09/02/20 19:04:26
>>146
phpinfo保存してdiffして好きなのを使うとか

148:nobodyさん
09/02/20 19:12:40
>>147
ありがとうございます
それをヒントにして$_SERVERを比較したところ
SHELLというキーが、シェルから呼んだ場合には設定されていました

149:nobodyさん
09/02/20 19:17:35
URLリンク(jp.php.net)
もろそういう用途の関数がありますよ

150:nobodyさん
09/02/20 20:55:16
php_sapi_name()ならpearのgo-pearを参考にしてもいいかも。
URLリンク(pear.php.net)

151:nobodyさん
09/02/20 21:07:24
めちゃめちゃPHP覚えてきた
自分の才能がコワイお(´・ω・‘)

152:nobodyさん
09/02/20 21:09:59
ほう,じゃ最近学んだこと何か語ってみてくれ

153:nobodyさん
09/02/20 21:34:19 JGeRmwBm
URLのうち、ドメイン直下の最上位ディレクトリを抽出するにはどうしたらいいですか?
str系の関数組み合わせて3個目の/が何文字目で4個目が何文字目で…
ってやれば出来るでしょうが、非効率というかアホっぽいので、正規表現でバキっと出す方法を
教えてください
よろしく御願いします

154:nobodyさん
09/02/20 21:37:09
>>153
scandirが使えるバージョンならドメイン直下のディレクトリ名を取得すればおk
使えないならopendirとreaddirでググレカス

155:nobodyさん
09/02/20 21:44:06
>>141
GWの文字コード変換対象はtext/〜から始まるコンテンツのみ。
SSLも変換噛まさないけ

156:nobodyさん
09/02/20 22:16:34
>>152
文字コードがshift-jis、Euc-jpだとSQLインジェクションされる
かといってutf-8は安全?というとそうでもない。

157:nobodyさん
09/02/20 22:24:54
php関係ねー
氏ねや

158:nobodyさん
09/02/20 22:27:27
そ・・・そんなん 必死に覚えてきたお(´・ω・‘)

159:nobodyさん
09/02/20 22:37:43
>>158
世の中にはいくらやっても報われないことが二つある
ひとつは賽の河原の石積み
もうひとつはお前のPHPの勉強だ

160:nobodyさん
09/02/20 23:27:51 r16tK4jF
SQLインジェクション対策は、
基本的に外部入力値をhtmlspecialcharsしていれば良い

って考えは間違い?

161:nobodyさん
09/02/20 23:31:06
>>160
大間違い


162:nobodyさん
09/02/20 23:34:48
htmlspecialcharsで防げるだろ
>>161はhtmlspecialcharsを使用しても抜けられる穴について説明よろ

163:nobodyさん
09/02/20 23:39:40
>>160
htmlspecialchars(,ENT_QUOTES)で防げるのは「Script Injection」。
Javascript埋め込みとかそんなヤツ。

「SQLインジェクション」は別問題。
「PHPサイバーテロの技法」を買って読んどけ。

164:nobodyさん
09/02/20 23:47:18
>>162
LIKEのとこに%とか*突っ込んでみるとか。
select * from table where name like '%' ;


165:nobodyさん
09/02/21 00:28:20
>112
$str = '<font size="10">でっかい</font>';
$smarty->assign('tag', $str);
$smarty->display('hoge.tpl');

---hoge.tpl---
<body>
{$tag}
</body>

とかいう意味だったら笑う。

>162
>164の変数名のところに「' OR 1=1」と入れるとレコードが全件変数に入り個人情報大暴露大会。
「'; DROP なんたらかんたら」と書くとテーブルがぶっ飛ぶ。レプリケーション先も全部死ぬからサービス復旧不能で店じまい、会社は倒産。
MySQLの設定が甘いと、管理テーブルを書き換えられてroot奪われるとかもあるな。

166:nobodyさん
09/02/21 00:32:30
あーっと、ENT_QUOTESだったか。死んでくる。

167:nobodyさん
09/02/21 00:38:03
>>160
addslashes

168:nobodyさん
09/02/21 00:44:54
>>167
addslashesも大間違い

169:nobodyさん
09/02/21 01:19:11
mysql_escape_string

170:nobodyさん
09/02/21 01:34:53
>>169
それも%とかをエスケープできないので間違い
mysql_real_escape_string

171:nobodyさん
09/02/21 01:47:18
可能な場合常にプレースホルダを使う、でFAだろ
クエリの9割以上はカバーできるはずだ

172:nobodyさん
09/02/21 02:05:10
めんどいから ' と ; は削っちゃえ

173:nobodyさん
09/02/21 02:17:42
mysql_escape_stringって%エスケープしないのか
ありえねーな
likeを使ってなかったらだいじょうぶ?

174:nobodyさん
09/02/21 02:35:53 60WB0UqA
addslashesじゃだめなの?
ある本にmysql_escape_stringより良いって書いてあったのに、早いって。。
純朴な素人をバカにしやがって

175:nobodyさん
09/02/21 02:37:42
お前は何を言ってるんだ
本にWebに書いてあることを鵜呑みにすることが「勉強」じゃないぞ?

176:nobodyさん
09/02/21 02:44:35
何ぬかしてる、mysql_real_escape_string() は非推奨の mysql_escape_string() と機能は同じ
だいたいこの関数はSQLステートメントとして成立する文字列リテラルを作るためのものだ
%を勝手に殺したりする用途に使うもんじゃない

177:nobodyさん
09/02/21 02:45:52
%殺されちゃたまらないな。しかも%なんてSQLインジェクションには使えないだろ
エスケープする必要ない

178:nobodyさん
09/02/21 02:46:31
PDOで解決

179:176
09/02/21 02:46:46
悪いアンカーが抜けていた
>>176>>170,173へのレス

180:nobodyさん
09/02/21 02:49:17 RWcdEiGu
phpでhtmlのinputのtype="text"でreadonly='true'して
printしているのですが、これってもしreadonlyに対応していない
ブラウザとかだったら変更可能ですかね?ブラウザとか関係なく、
もし確実じゃなければ、それに代わる確実な方法を実現したいのですが
何か方法があれば教えてください。

181:nobodyさん
09/02/21 02:58:27
>>180
変更されてはならないものはクライアントに持たせない
セッション変数なりストレージなりに保持しておく

182:nobodyさん
09/02/21 05:32:46
>>118
phpにおけるexitは強制終了。
それに続くタグとかは、一切実行も表示もされない。

183:nobodyさん
09/02/21 12:05:11
>180
そもそも、ブラウザなんぞ無くともデータは送受信可能だ。
HTTPなんて、テキストデータを送受信してるだけだからな。
クライアントに渡した全ての値は改竄され得るし、クライアントから送信される値は全て信用ならない。
input type="select"の中に、選択肢にない文字列が入ってくるなんてのはよくある事だ。

184:nobodyさん
09/02/21 12:05:51
<select><option>だったか。まあいいや。

185:nobodyさん
09/02/21 13:04:41
ちょっと気になったんだが、>>165が書いている方法も

SELECT * FROM test WHERE name='".htmlspecialchars($_POST["name"],ENTQUOTES)."'

としていれば大丈夫なんじゃないのか?
「%」の件もlike使わなければいいわけだし。
like使う用途って「検索」が多いだろうから、表示されても良いデータだろうし。

186:nobodyさん
09/02/21 13:10:29
>>183
>選択肢にない文字列が入ってくる

てっきりvalueにテキストを挿入してるかと思ったwwww

187:nobodyさん
09/02/21 13:10:58
>>185
そのセンス、感服するわ。
htmlspecialcharsで変換される文字君たちは検索にかからなくなるわけだが、
SQLにlikeを使わなきゃいいって制約を追加するわけだが、

188:nobodyさん
09/02/21 13:14:04
なんでそこまでしてhtmlspecialcharsに拘るのかが理解できない。
mysqlなら何も考えずmysql_real_excape_stringが一番安全確実簡単だろ。
htmlspecialchars使うと、<や>、&のような文字が全部変換されてDBに入力されてしまう。
検索なら対象がうまくヒットしなくなるし、画面表示文字列だとエスケープ/アンエスケープのタイミングを考慮しないといけない。
DBからCSVに書き出したくなったらどう変換すればいいんだ?JavaScriptに渡す時は?

mlsql_real以下略なら、入力データはそのままの形でDBに格納されるし、そのままの形で検索される。この上なく分かりやすい。

189:nobodyさん
09/02/21 13:16:13
>>187
うん?クラスの処理とかすべて書けば良かったか?
単純かしたことに「こいつ馬鹿だwww」と感服したのかもしれないが。

そもそも、出力する時もフィールド指定するだろ。
だから、like使ってもパスワードが漏れないよな。
全件出力されるとか書いてたけど、普通limit指定するし。

>htmlspecialcharsで変換される文字君たちは検索にかからなくなるわけだが
かからなくていいんじゃないか?検索させない場合は、変換入れるだろうが。

190:nobodyさん
09/02/21 13:16:27
未だにDBで何をエスケープしておけばいいかわからないやつ多いよな。

基本的には「'」と「\」だけでいいんだぜ

191:nobodyさん
09/02/21 13:19:03
>>188
「そのままの形で格納されると困る」んだよ。

お前、WEBアプリケーション作ったことあるか?
または、会員制サイト作って誰かに利用させたことあるか?

その際、htmlspecialcharsで変換されない文字があるとどうなるかわかるだろ。
それに、htmlspecialcharsだけでも、CSV出力やJavascript(AJAX)の利用は出来る。

192:nobodyさん
09/02/21 13:25:16
>>189
おいおい、
記事中から、bread&butterって検索したくてもできないじゃないか。

193:nobodyさん
09/02/21 13:26:33
zend server
人柱だれかよろ
URLリンク(sourceforge.jp)

194:nobodyさん
09/02/21 13:27:24
>>191が作ったWebアプリケーションは穴だらけ、バグだらけだろうなぁ。
ご愁傷様

195:nobodyさん
09/02/21 13:27:36
Zendワロタwwwwwwwww
よく開発続けられるよなwwwww不人気なのにwwwwwww

196:nobodyさん
09/02/21 13:29:18
htmlspecialcharsをDBアクセスで使用するバカ
後輩とかに指摘されて恥かくまでずっとやってろ

197:nobodyさん
09/02/21 13:30:31
俺はforeachのことを「フォレーチ」って読んでた
先輩は「フォー・イーチ」って読んでた

別に恥ずかしくないんだからねっ!これからも「フォレーチ」って読むわ

198:nobodyさん
09/02/21 13:32:44
>>191
なぁ、ちょっと確認していいか?
入力->フィルター->エスケープ->DB -> 取り出し-> フィルター -> html適合化 -> 表示
おまえこの流れは理解してるってことでいいんだよな?



199:nobodyさん
09/02/21 13:34:46
xamppに代わる開発環境になるかな?

200:nobodyさん
09/02/21 13:35:45
>>199
ネーミングが悪かったかもしれない
XAMPPは初心者もなじみやすい名前だから、暫くはそっちが流行ると思うな

201:nobodyさん
09/02/21 13:36:24
>191
会員制の課金の発生する、バックエンドでCSVとTSVでレポートを吐くwebアプリを仕事で書いてるが、
・DBに渡す際にPDOのプレースホルダで渡す、あるいはmysql_real_escape_stringなどでクエリを構成する
・画面表示する際にはビューに渡す時点で原則全ての値をhtmlspecialcharsでエスケープ
 (タグを書き出さないといけない箇所や、HTML以外の箇所などの例外は慎重に検討したうえでエスケープせず渡す)
・DBには、例えばフォームからの入力なら入力値がそのままの形で格納される
このルールが一番分かりやすいし、安全だし、汎用性がある。

出力部で「この文字列はDBから来た値だからhtmlspecialcharsは不要、こっちはクライアントからの入力値だから必須…」とかやってると、絶対変換ミスが発生する。
何も考えずルールにさえ従ってさえいれば脆弱性が発生しない事をシステムが担保してくれる形にするのが一番安全なんだよ。
俺はMySQLでの危険文字を全て列挙すら出来ない低能だし、職場には俺以下の屑が溢れているが、このルールに従う限り絶対安全だとシステム側で保障できるコードを組める。

202:nobodyさん
09/02/21 13:41:28
>>198
してるわけないだろ。関数の使いどころすらわかってないんだから

203:nobodyさん
09/02/21 13:41:54
>>201
それでOKなんだけど、>>191はフィルターやバリデーターとDB登録時のエスケープを混同してるらしいからw

204:nobodyさん
09/02/21 14:03:40

俺が使ってるサービスで
↓を混同してるプログラマがコード書いてませんように・・・

・DB入力時(SQLインジェクション)
・画面出力時(Scriptインジェクション)


205:nobodyさん
09/02/21 14:14:16
>>193
雑談はネタ不足気味な雑談スレで。
スレリンク(php板)


206:nobodyさん
09/02/21 14:20:49
>>198
ああ。実際に>>201が書いているようなことはしているよ。
例として>>185みたいな簡単な1行ソース出したから
「こいつ何も知らない馬鹿だなwww」と煽りたい気持ちも分かる。
だが、1から10までここに書けないだろ。

入力時、出力時にそれぞれ適切に変換するのは、初歩中の初歩だと思う。
201がああだこうだ書いてるが、俺は自作クラス作ってDB処理をしているから
変換ミスがどうのこうのはない。

ま、そういう自分の事はどうでも良くて、>>185の意見を出しただけなんだが
なぜか俺自身を煽りたい馬鹿がいるな。そんな事しても無駄だろ

207:nobodyさん
09/02/21 14:22:00
>>185みたいなコードが出てくる時点でお前が一番馬鹿だよ

208:nobodyさん
09/02/21 14:26:20
>>207
>だが、1から10までここに書けないだろ。

ちゃんと読めよ・・・わかりやすいように簡単に書いたって言ってるだろ

それに、htmlspecialcharsで変換しないでそのまま格納したとする
その場合、phpMyAdminなどで管理する時。どうなるかわかるよな?

209:nobodyさん
09/02/21 14:27:37
>>208
こんだけ書かれてまだわかんないのか。
そこでhtmlspecialcharsはおかしいってことだろ。
代わりに何を使うべきか考えてみろ

210:nobodyさん
09/02/21 14:28:10
>>206
荒れるだけだから黙っててくれ。

211:nobodyさん
09/02/21 14:28:10
>>185>>191みたいなこと書いてたら馬鹿にされるのあたりまえだろ
>>206が仕事ではなく趣味でPHPいじってるだけであることを祈る

212:nobodyさん
09/02/21 14:28:18
>>208
うん、あれはhtmlspecialcharsで変換されて出力されるね
ってかphpMyAdminなんか使ってるのかよ

213:nobodyさん
09/02/21 14:28:48
>>209
わかる・わかんないの、俺に対しての批判はどうでも良いんだよ。
「なぜhtmlspecialcharsは駄目なんだ」って事だ



214:nobodyさん
09/02/21 14:29:08
>>208
phpMyAdminをなめてんの?
別にスクリプトが混入したって何もおきないよ。
もし、そこでスクリプトインジェクションされんならIPA行きだお

215:nobodyさん
09/02/21 14:30:21
>>213
> 「なぜhtmlspecialcharsは駄目なんだ」
既出

216:nobodyさん
09/02/21 14:30:27
お前ら、自分の視野で物事考えすぎだよ。

「phpMyAdminなんて使ってるの?」って言葉がここで出てくると思わなかったぜw
ここのスレの役割考えろや。どうせ個人叩きしかできないくせに。

217:nobodyさん
09/02/21 14:30:31
>>208
全部わかったうえで一部分だけ簡単に書いてます、って言ってるやつの文章じゃないよそれ
結局DB格納時にhtmlspecialchars使ってるんじゃん

218:nobodyさん
09/02/21 14:31:22
>>216
phpMyAdmin → 画面出力時のお話

SQLインジェクションからかけ離れてきました・・・

219:nobodyさん
09/02/21 14:32:07
>>206
> 俺は自作クラス作ってDB処理をしているから変換ミスがどうのこうのはない。
変換とか言ってる段階で、その自作クラスが穴だらけに1000カノッサ

220:nobodyさん
09/02/21 14:36:47
> それに、htmlspecialcharsで変換しないでそのまま格納したとする
> その場合、phpMyAdminなどで管理する時。どうなるかわかるよな?

phpMyAdminは出力時サニタイズをすっかり忘れてる、ってこと?

221:nobodyさん
09/02/21 14:38:07
サニタイズってトイレにでも行く気?

222:nobodyさん
09/02/21 14:38:47
>>185
ENTQUOTES
ENTQUOTES
ENTQUOTES
ENTQUOTES
ENTQUOTES
ENTQUOTES
ENTQUOTES
ENTQUOTES

223:nobodyさん
09/02/21 14:40:08
おまえらとどめは刺さないよなww

224:nobodyさん
09/02/21 14:40:18
>>219
>>201が「俺はMySQLでの危険文字を全て列挙すら出来ない低能」と
言ってる意味を理解できていない、に1000カノッサ上乗せ

225:nobodyさん
09/02/21 14:46:08
>>185
語る以前にエラーになる件

226:nobodyさん
09/02/21 15:07:41
↓アクセスするとGoogleに飛ぶんですがどういう仕組みですか?
URLリンク(www.yahoo.xxco.jp)

227:nobodyさん
09/02/21 15:11:56
%はあんまり伝わらなかったみたいだなー。
SQLとHTMLでは、特殊な扱いになる文字が違うよってことだけど。

htmlspecialchar()でも問題なく見えるのは、たまたま、だと思ったほうがいいよ。
偶然にも、置き換え対象になる文字がSQLでエスケープが必要な文字と同じだったってこと。

ついでに言えば、エスケープの仕方は実際はDB依存だから
addslashes()じゃなく、DB専用の関数を使ったほうがいい。


228:nobodyさん
09/02/21 15:13:44
>>160 からの流れ、断ち切っておくか・・・

・DBに渡す際にPDOのプレースホルダで渡す、または専用関数(mysql_real_escape_string)でクエリを構成。
・html出力時にhtmlspecialchars(,ENT_QUOTES)をする。

※DBに渡す際にhtmlspecialcharsするのは間違い。
→ 理由 >>188
→ それでも分からない。 >>163の本を読め。


229:nobodyさん
09/02/21 15:18:48
>>226
GET / HTTP/1.1
Host: www.yahoo.xxco.jp
(略)

HTTP/1.x 302 Found
Date: Sat, 21 Feb 2009 06:15:31 GMT
Server: Apache/2.2.9 (Fedora)
X-Powered-By: PHP/5.2.6
Location: URLリンク(www.google.co.jp)
Content-Length: 0
Connection: close
Content-Type: text/html; charset=UTF-8


230:nobodyさん
09/02/21 16:10:53
素人だけど、俺より酷いプロらしき人が入るのを見て安心したような不安になったような…

231:nobodyさん
09/02/21 16:11:49
>>226
xxco.jpの管理人が、
www.yahooo.xxco.jpへアクセスした場合に
「Location: URLリンク(www.google.co.jp)」へリダイレクト(302)するようにしているだけ。

<?php
header('Location: URLリンク(www.google.co.jp)', True, 302);
?>

232:nobodyさん
09/02/21 16:25:04
>>231
サンクス
xxcoってドメインか

233:nobodyさん
09/02/21 16:35:25
べ・・・別に!
僕レンタルサーバー使ってるからね!
エスケープしなくても安全よっ!

234:nobodyさん
09/02/21 19:59:23 230PJjNE
【OS名】MacOS X (MAMP)
【PHPのバージョン】php5.2.5
【連携ソフトウェア】mysql
【質問内容】
Webアプリケーションで、ウィンドウ毎に違う情報を引き継いで処理をしていく物を作っています。
uniqid()でセッションIDを割り振って、formのhiddenに入れると引き継げるのは分かりました。
しかしこれだと、link(aタグ)で機能を選択した場合に、セッションIDが引き継げないように
思います。ですよね??何か良い方法はありませんか?
リンクのパラメータに追加するとなると、全部のリンクに書き足す必要があって大変だし、
POSTとGETの両方の評価が必要になると煩雑だし、そもそもurlにセッションIDを出すのが
微妙に避けたいので・・・。
お知恵を拝借したいです。よろしくお願いいたします。

235:教えて
09/02/21 20:15:36 1h/i9qY8
これだと1回で20数全部でます。1回1数でかぶらずに20回出したです。
<?php
$numbers = range(1, 20);
shuffle($numbers);
for($i = 0; $i < 20; $i++) {
echo $numbers[$i]."<br>\n";
}
?>

236:nobodyさん
09/02/21 20:16:32
ふつうセッションIDはCOOKIEで渡す
ケータイの場合はGET渡ししかない

237:nobodyさん
09/02/21 20:17:25
>>235
出したんなら良かったな

238:nobodyさん
09/02/21 20:21:23
モバゲーで鳴らした俺はこの程度の日本語崩壊くらいなんて事は無い
モバゲーではこの程度の言語障害者珍しくも無い
マジ日本はどこへ向かうんだ

$numbers = range(1, 20);
shuffle($numbers);

echo array_pop($number);
// なんか処理
echo array_pop($number);
// なんか処理
echo array_pop($number);

1ページ内の処理ならこれでいける。
2枚以上の画面にわたって変数を持って行きたいならセッションを使うしかない。

239:234
09/02/21 20:33:28 230PJjNE
>>236
COOKIEですか・・・ちょっと調べてみます。ありがとうございます。
クライアントはパソコンなので、GETでもPOSTでも使えます。
COOKIEでもウィンドウ毎って可能なんですか?

240:nobodyさん
09/02/21 20:38:24
>>239
パソコンならhiddenを使う必要ない。セッションはクッキーが勝手に確立してくれる
GETやらPOSTも意識する必要ない。セッションに少し慣れればすべて解決する

別ウインドウのことを言ってるのだとしても
リンクやフォームから作成された別ウインドウは同一セッションとなる

241:234
09/02/21 20:51:05
>>240
同一セッションでは困るんですが・・・ウィンドウ毎に分けたいので・・・

242:nobodyさん
09/02/21 20:54:07
>>241
であればウインドウごとにID発行してそれをセッションで持ちまわす

243:242
09/02/21 20:58:18
ごめん、うそついた
同一セッションで別ID発行してもセッションが上書きされるだけだからダメか

244:nobodyさん
09/02/21 20:59:36
入力->フィルター->エスケープ->DB -> 取り出し-> フィルター -> html適合化 -> 表示
で質問。
入力->フィルター->エスケープ->DB -> 取り出し->
ここまではわかるが。
その後なんでまたフィルタにかけるの?
while文でたとえば
<? while ( $item = mysql_fetch_array( $result ) ) { ?>
<tr>
<td><?= $item['item_id'] ?><?= $item['item_id2'] ?></td>
<td><?= $item['item_name'] ?></td>
<td><?= $item['author_name'] ?></td>
<td><?= $item['publisher_name'] ?></td>
<td><?= date( 'Y年m月d日', strtotime( $item['release_date'] ) ) ?></td>
<td><?= $item['list_price'] ?></td>
<td><?= $item['sale_price'] ?></td>
<td><?= get_category_name( $link, $item['category_id'] ) ?></td>
<td><?= $item['quantity'] ?></td>
<td><?= $item['state'] ?></td>
<td>
<nobr>[<a href="admin_edit_item.php?item_id=<?= $item['item_id'] ?>">編集</a>]</nobr>
<nobr>[<a href="admin_del_item1.php?item_id=<?= $item['item_id'] ?>" onClick="return confirm( '完全に削除されます。よろしいですか?' )">削除</a>]</nobr>
</td>
<? $n ++; } ?>
でまわしてはいかんのかね?


245:nobodyさん
09/02/21 21:09:52
>>244
俺も取り出しのあとのフィルターってのはよくわからん
DBには正しいものが入ってるはずだしな
でもhtml適合化は必要だろ。そのコードだとScript実行されるよ

246:234
09/02/21 21:10:06
>>243
そうなんです。>234の様にformかurlに入れれば、
とりあえずウィンドウ毎に別の情報を引き継げます。
だけど、formとurlの両立が難しい。
何か、簡単にウィンドウ毎を識別する方法があれば・・・

247:244です。
09/02/21 21:15:34
htmlspecialcharsか

248:nobodyさん
09/02/21 21:17:49
>234
まったく同一のページを2ウィンドウ開くのならば、URLかPOST値にセッション情報を含めないとダメだな。
手を抜くならセッションキーGET渡しで
・Smarty使ってるならポストフィルタで全サイト内リンクにセッションキーを追加する
・JavaScript経由で全リンクをセッションキー付きに書き換える
辺りか。

リンクを書き換えないなら、複数ウィンドウシステムに入った時点で
index.php/hogehoge/
index.php/fugafuga/
のような固有URLを割り振り、これをセッションキーにするのも手。
index.php/hogehoge/menu から <a href="./information">で
index.php/hogehoge/information に遷移させられるから記述が多少楽になる。
ただし、セッション情報がリクエストヘッダでだだ漏れだし、外部リンクに気を払う必要も出てくる(REFERERで漏れる)。

249:nobodyさん
09/02/21 21:20:12
>>244
>入力->フィルター->エスケープ->DB -> 取り出し-> フィルター -> html適合化 -> 表示
どこにそんなことが書いてある?

入力 -> エスケープ -> DB -> 取り出し -> サニタイズ -> 表示
これでいい

250:nobodyさん
09/02/21 21:26:33
>>249
サニタイズってのは、入力値に不正な値や壊れた文字列が入っていないかをチェックするもの。
やるなら、入力の直後だが、サニタイズって言うと、>>249みたいな誤解をするやつがいるから、
入力後にやるのが、バリデート+フィルター。

251:nobodyさん
09/02/21 21:28:51
DBからの取り出し後にフィルターを書ける理由
DBってのはデータストア。
収録されたデータをすべて出力していいとは限らないし、
形式によってはフィルターをかける必要がある。jk

252:nobodyさん
09/02/21 21:33:13
>>250
入力段階でチェックするのはvalidate
sanitizeは表示段階で、浄化、つまり悪意のあるスクリプトやタグを無効にするもの


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5372日前に更新/104 KB
担当:undef