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

【PHP】質問スレッドpart19【php】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん04/07/16 07:12ID:KvHeypq/
・PHP全般の質問スレです。
・新規質問の方は上げてください。age進行でお願いします。
・質問する際には環境も明記。
・正しい日本語で分かりやすく。
・レスがつかないからって逆切れする厨お断り。
・解決しなくてもこたえてもらったら礼を。


■本家
 http://www.php.net/

■日本 PHP ユーザ会
 http://www.php.gr.jp/

■PHP マニュアル
 http://www.php.net/manual/ja/

■PEAR マニュアル
 http://pear.php.net/manual/ja/

過去スレ, 関連スレ等>>2-4


抜けているものがあったら補足願います
0077nobodyさん04/07/18 18:52ID:ajil2/nN
--with-dom-xslt=/usr --with-dom-exslt=/usr --with-xmlrpc=shared \
--with-pcre-regex=/usr --with-zlib --with-layout=GNU --enable-bcmath \
--enable-exif --enable-ftp --enable-magic-quotes --enable-safe-mode \
--enable-sockets --enable-sysvsem --enable-sysvshm \
--enable-discard-path --enable-track-vars --enable-trans-sid \
--enable-yp --enable-wddx --without-oci8 --with-pear=/usr/share/pear \
--with-imap=shared --with-imap-ssl --with-kerberos --with-ldap=shared \
--with-mysql=shared,/usr --with-pgsql=shared --enable-ucd-snmp-hack \
--with-unixODBC=shared --enable-memory-limit --enable-bcmath \
--enable-shmop --enable-calendar --enable-dbx --enable-dio \
--enable-mcal --enable-mbstring --enable-mbstr-enc-trans \
--enable-mbregex --with-apxs2=/usr/sbin/apxs \

$ make
# make install

でhttpd.confに
LoadModule php4_module modules/libphp4.so
を加えてapacheを再起動したら
[Sun Jul 18 18:44:53 2004] [warn] module php4_module is already loaded, skipping
と怒られた。それ以前にLoadModule php4_module modules/libphp4.soやAddType application/x-httpd-php .php
がhttpd.confに書いてないんだけどなんでかな
00787304/07/18 19:00ID:???
>>74
今は自前鯖なんで、httpd.confに書いてたり^^;。
ゴメンヨ・・・。

配布とか考えた時に.htaccessが使えないレンタル鯖とかも
あると想われるので何か良い手だてはないものかと・・・。
0079nobodyさん04/07/18 19:44ID:Sl8hc8ID
php.iniの更新して、Apacheの再起動したら幸せになれるかも。
その際、register_globalをOnにしときなされ。
0080nobodyさん04/07/18 20:17ID:???
>>78
データベースにバイナリを書く方法あるが、普通はそんなことせんからなぁ。
htaccess使えないところはサポート外にしとけ
0081nobodyさん04/07/18 20:56ID:???
>>72
WinXPの場合はphp4ts.dllをsystem32に放り込めばいいと教えてもらったけども…
リナックスはわからんね
0082nobodyさん04/07/18 20:58ID:???
>>80
処理を重くするのもどうかと思いますしね・・・
ファイル名をややこしくするだけにしておきたいとおもいます
0083nobodyさん04/07/18 21:01ID:???
>>81
4.3.6をちゃんと削除してからインストールした?
httpd or apacheは再起動させた?
0084nobodyさん04/07/18 21:39ID:???
質問です。

<select name="asdasd[]" size="5" multiple="multiple">
<option value="a">あ</option>
<option value="b">い</option>
<option value="c">う</option>
<option value="d">え</option>
<option value="r">お</option>
<option value="f">か</option>
<option value="g">き</option>
<option value="h">く</option>
</select>

こういうフォームをつくって、これをGETメソッドで送り、
parse_str 関数で処理したのですが、
配列 asdasd[] の個数が、選択した要素の数*2になってしまいます。
つまり、2つ選択して送るとcount($asdasd) が4になるということです。
どうしてこうなるんですか?
0085nobodyさん04/07/18 22:07ID:???
>>84
独特なformだね
00867204/07/18 22:22ID:???
>>83
前のバージョンをアンインストールしていなかったので
# rpm -e php
で関連パッケージを削除してmake install し直してphp.iniをphp.ini_dist
をコピーしてhttpdを再起動しようとしたら今度は
Syntax error on line 199 of /etc/httpd/conf/httpd.conf:
Cannot load /etc/httpd/modules/libphp4.so into server: /etc/httpd/modules/libphp4.so: cannot open shared object file: No such file or directory
と怒られてしまいました
libphp4.soはどこ行っちゃったんでしょうか
0087nobodyさん04/07/18 23:16ID:???
>>84
2バイトが二つで4でしょ
0088nobodyさん04/07/18 23:26ID:???
>>87
ハァハァ(*´д`*)━( *´д )━(  *´)━(  )━(゚   )━(Д゚  )━( ゚Д゚ )ハァ?
0089nobodyさん04/07/18 23:55ID:???
>>84
あ行が怪しいぞ
0090nobodyさん04/07/19 00:27ID:eJnEJcBx
PHPUnit2の使い方がわからん・・・
だれかおしえてください
0091nobodyさん04/07/19 00:52ID:qsqOem7W
phpでmds的なファイル分割形式を用いたUPローダー作成を考えているのですが
実現可能でしょうか?どこか参考になるサイト等ありましたらお教えください。
0092nobodyさん04/07/19 09:07ID:???
初歩的な質問で申し訳ないが
掲示板をつくり、1つの記事を削除する場合は
その記事意外を再度上書きすればいいんだよな?
0093nobodyさん04/07/19 09:25ID:???
>>92
ソーダ 
0094nobodyさん04/07/19 10:26ID:zI9w6JFi
質問です。バージョンはphp-4.3.3です。

$a = array('田中太郎<>12<>りんご<>','山田太郎<>16<>なし<>','吉田太郎<>12<>すいか<>');
のような配列を<>で分割した2番目の要素(12,16,12)でソートするにはどうすればいいんですか?
ソート後は
山田太郎:16才:好物なし
田中太郎:12才:好物りんご
吉田太郎:12才:好物すいか
のように2番目の要素(12,16,12)以外も表示したいんです。
0095nobodyさん04/07/19 11:04ID:???
PHPをちょっと勉強してみようかなと思い
ttp://www.yumenara.com/pwp/
のサイトを読んで
現在の時刻を表示させる<?php echo date("n月j日") ?>を入れてみたんですが
何故か文字化けして「79」としか表示されません
どうすればいいんでしょう?
PHPバージョンは4.3.8でサーバーはApache2.0.49
OSはWinXPです
ちなみにp2というPHPで作られた2chビュアーは文字化けせずに正常に表示されます
00969504/07/19 11:04ID:JjQNbyQZ
上げ忘れました
すいません
0097nobodyさん04/07/19 11:06ID:???
普通はusort、大きな配列の時はarray_multisort使った方が速い。
function myCompare($x, $y) {
 if ($x[1] == $y[1]) return 0;
 return ($x[1] < $y[1]) ? -1 : 1;
}
function myExplode($z) {
 return explode('<>', $z);
}

$a = array('田中太郎<>12<>りんご<>','山田太郎<>16<>なし<>','吉田太郎<>12<>すいか<>');

$b = array('name' => array(), 'year' => array(), 'favorite' => array());
foreach ($a as $str) {
 list($b['name'][], $b['year'][], $b['favorite'][], ) = myExplode($str);
}
array_multisort($b['year'], $b['name'], $b['favorite']);

$c = array_map('myExplode', $a);
usort($c, 'myCompare');

var_dump($a, $b, $c);
0098nobodyさん04/07/19 11:18ID:???
>>95
文字化けって分かってるなら文字コードの設定も書かないと。
というか、書いているうちに原因に気づくんだろうけどねぇ。
http://www.php.net/manual/ja/ref.mbstring.php
0099nobodyさん04/07/19 11:25ID:???
>>97に自己レス。
array_multisort使うならこの方がいいかな。

$a = array('田中太郎<>12<>りんご<>','山田太郎<>16<>なし<>','吉田太郎<>12<>すいか<>');
$b = array(); // 並べ替えたい配列
$c = array(); // 並べ替えの基準にする配列
foreach ($a as $key => $value) {
 $b[$key] = explode('<>', $value);
 $c[$key] = $b[$key][1];
}
array_multisort($c, $b);
var_dump($b);
01009504/07/19 11:35ID:JjQNbyQZ
>>98
mbstringは導入してました
php.iniの設定も色々変えてみましたが直りませんでした
全角の文字が表示されていないようなんですが…(全て全角で入力すると何も表示しませんでした)
0101nobodyさん04/07/19 11:48ID:???
>>95 >>100
なんでここできいてんだ?
0102nobodyさん04/07/19 11:49ID:???
>>95 >>100
なんでわざわざあげてんだ?
01039504/07/19 11:51ID:???
>>101
質問スレなんで…

>>102
ID出さなくてもいいんですか?
0104nobodyさん04/07/19 12:00ID:???
>>100
だからどういう設定になってるのか訊いてるんだよ
日本語解らないの?
0105nobodyさん04/07/19 12:04ID:???
>>103
文字エンコーディングの設定はどうなってるの?
ソースのそれはどうなの?
やらなきゃいけないのは正しい設定にすることで、
闇雲に変更することじゃない。
どうしたらいいのか分からない場合は>>98のEUC-JPの設定にして
ソースもEUC_JPで書くのがお勧め。
01069504/07/19 12:19ID:???
>>104-105
文字エンコーディングはSJISでやってます
EUC-JPはp2で設定ファイルを編集する時文字化けしたので止めました
ソースは
<HTML LANG="JA">

<HEAD>
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=Shift_JIS">
<TITLE></TITLE>
</HEAD>

<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" ALINK="#FF0000" VLINK="#800080">

<P>今日は<?php echo date("n月j日") ?>です。</P>

</BODY>

</HTML>
0107nobodyさん04/07/19 12:29ID:???
>>106
php.iniの設定はどうなってるの?って訊いてるんだけど
釣りか?
01089504/07/19 12:38ID:???
>>107
ttp://www.php.net/manual/ja/ref.mbstring.php
これのSJISユーザ用のphp.iniの設定です
0109nobodyさん04/07/19 12:45ID:???
>>108
・・・。
アンタさっきphp.iniの設定をいじったって言ってたけど
今はそのページの内容に戻ってるって事かい?

自分の環境のphp.iniのmb_string関連の部分をコピペしろよ
01109004/07/19 12:48ID:???
ぐぐったら見っけた。
ダウンロードしたPHPUnit2のアーカイブにサンプルが入ってるらしい。

ttp://inagi.himitsukichi.com/~aozora/blog/
ttp://inagi.himitsukichi.com/~aozora/cgi-bin/pukiwiki/pukiwiki.php?PHPUnit2%A4%F2%BB%C8%A4%C3%A4%C6%A4%DF%A4%EB

すまね。
0111nobodyさん04/07/19 12:48ID:???
もう放っといた方が良いよ。自分で理解する気もないみたいだし。
0112nobodyさん04/07/19 13:18ID:???
釣りとしか思えねー
01139404/07/19 13:51ID:???
できました。答えてくれた方ありがとうございました。
0114nobodyさん04/07/19 14:07ID:???
<A href="./index.php">あああ</A>
リンク「あああ」をクリックした時に、
同時に変数を代入(例えば$name="yamada"など)できないでしょうか?
0115nobodyさん04/07/19 14:11ID:???
>>114
href=index.php?name=yamada
ってことかい?
011611404/07/19 14:13ID:???
>>115
なるほど、皆そうしているのですか!
有難うございます><
011711404/07/19 14:23ID:???
<?php
if ($main == "kikaku")
$page = "./page/kikaku/index.html"
?>

クリックしてmainがkikakuになった状態で上の文を記述していれば
<?php echo $page ?>の部分に上のファイルが開かれるんですよね?
011811404/07/19 14:25ID:???
ページが

「./page/kikaku/index.html」とそのまま表示されますた;;
011911404/07/19 14:30ID:???
<?php
if ($main == "kikaku")
$index = "./page/kikaku/index.html";

$page = file($index);
?>

にしたら「Array」になりました・・・
どなたか助けてください;;
0120nobodyさん04/07/19 14:44ID:???
なんか参考書でも読んでこい。

なにがしたいか知らんが、おそらくincludeでできる
012111404/07/19 14:46ID:???
includeトカ全然シラナイヤ
012211404/07/19 14:48ID:???
>なにがしたいか知らんが

PHPのページの一部に他のページを貼り付けるということです
012311404/07/19 14:58ID:???
デキター!
回答してくれた方ありです!
0124nobodyさん04/07/19 16:13ID:???
夏ですなぁ
0125nobodyさん04/07/19 17:06ID:???
あと1ヶ月ちょいは耐えるしかない
0126nobodyさん04/07/19 21:11ID:???
すみませんが教えてくだちぃ。
ファイルアップロードで、下記のformでアップロードした場合、
どうやって、「fname」の値ってとるんでしょうか?
$_POST['fname'] でおけ?
なんかうまく取れない・・・

<form enctype="multipart/form-data" action="upfile.php" method="post">
<input type="file" name="upfile">
<input type="text" name="fname">
<input type="submit" value="upload">
</form>

0127nobodyさん04/07/19 21:31ID:???
>>126
upfile.phpの最初にphpinfo()書いてよく眺めればわかるよ
0128PHP04/07/19 21:51ID:4+OKTR+f
PHPで配列自体をソートするときってどうしたらいいの?
Array[0](A0,B0,C0)
Array[1](A1,B1,C1)
Array[2](A2,B2,C2)
でBの項目でソートしたいときってどうしたらいいの?
012912604/07/19 21:59ID:???
>>127
うん、よくわかった。さんくす!!!
0130nobodyさん04/07/19 22:15ID:???
>>128
>>94あたりの話を応用。
0131 ◆JirmzAivjs 04/07/20 00:43ID:???
>>128
http://www.teu.ac.jp/chiit/~dsuzuki/phpdoc/function.array-multisort.html
<?php
$list[0] = array('A2','A1','A0');
$list[1] = array('B1','B2','B0');
$list[2] = array('C0','C1','C2');
//ソート前
print("ソート前<br>\n");
for ($i=0;$i<sizeof($list);$i++) {
for ($j=0;$j<sizeof($list[$i]);$j++) {
$str = $list[$i][$j];
print("$str\n");
}
print("<br>\n");
}
array_multisort ($list[1],SORT_DESC,SORT_STRING,$list[0],$list[2]);
//ソート後
print("ソート後<br>\n");
for ($i=0;$i<sizeof($list);$i++) {
for ($j=0;$j<sizeof($list[$i]);$j++) {
$str = $list[$i][$j];
print("$str\n");
}
print("<br>\n");
}
?>
これを自分なりに変えてみ。
http://pc5.2ch.net/test/read.cgi/jisaku/1089171507/
でがんばってまつ。
0132xxx04/07/20 01:57ID:zj8DyYfz
ごめんなさい!本当に分からないです。
Array ( [0] => 2004072000<>0<>xxx<>2<>0 [1] => 2004072000<>0<>index<>0<>0 )
の配列を中の[3]の配列の値でソートして、[2]の値のついたdatファイルを読み込んで表示させたいんです。
どうしたらいいか分かりません…。
どうしたらいいんでしょう?
0133nobodyさん04/07/20 02:34ID:TlHHsRNJ
すいませんが解決法あったら教えてください。
HTML中の一部を繰り返したいのですが、

<html>
<body>
<?php
for(i=0;i<10;i++){
?>
test<br>
<?php
}
?>
みたいに書くことってできないんですか?JSPのように。
なんかエラーになってしまったんですが。
013413304/07/20 02:37ID:???
ごめん。
<?
for($i=0;$i<10;i++){
?>
だった。<?だけでいいんだね。↑は$もついてないし。
ごめん。
マジごめん。
0135xxx04/07/20 02:58ID:zj8DyYfz
<html>
<body>
<?php
for($i=0;$i<10;$i++){
print("test<br>\n");
}
?>
じゃだめなの?
0136 ◆JirmzAivjs 04/07/20 03:50ID:???
>>132
http://www.mdir.org/tesss?act=0
http://www.mdir.org/tesss?act=1
>>131
の見てできんのかい(o_ _)ノ彡☆
0137xxx04/07/20 04:10ID:zj8DyYfz
>136
いざむ(136)さん、出来ました。
ありがとうございました!!
0138nobodyさん04/07/20 05:08ID:???
>>133
ちゃんとしたスクリプトを書けばできるよ。
(134でもまちがってるだろw)
たしかPHPの処理としては、<?php ?>の間以外は
そのままechoしてるのと同じ処理だからwhileとか
分割されてもできる。
0139nobodyさん04/07/20 07:55ID:???
上で同じ事で迷っているようだから代わりに返事しよう
使用OS WinXp

php.ini
[mbstring]
mbstring.language = Japanese
mbstring.internal_encoding = SJIS
mbstring.http_input = auto
mbstring.http_output = SJIS
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none;
;mbstring.func_overload = 0

これでSJISしか使えないEUCで書くと文字化け 
mbstring.internal_encoding = EUC-JP
mbstring.http_output = EUC-JP
これでEUCしか使えないSJISで書くと文字化け 
というのは理解できる。

mbstring.internal_encoding = EUC-JP
mbstring.http_output = SJIS
こうするとSJIS、EUC-JPとも文字化け

EUC-JPとSJISどっちも使えるようにするにはどうしたらいい?

尚phpのヴァージョン
5.0.0及び4.3.8〜4.3.4辺りまでのpackage及びinstallerは試してみたが全部だめだった
0140 ◆JirmzAivjs 04/07/20 08:11ID:???
>>139
default_charset = "Shift_JIS"を宣言していますか?

mbstringを有効にするのならば
phpインストールフォルダ以下のextensionディレクトリに
php_mbstring.dllは入ってますか?
extension=php_mbstring.dllのコメントはずしてますか?
0141nobodyさん04/07/20 10:50ID:fJEHV2g/
print_r(array_values($mail=PReg_Grep($grep, $mail)));
こうしたら結果が下のように出るんですが

Array
(
[0] => [email protected]
[1] => <[email protected]>;
[2] => [email protected]
[3] => <[email protected]>;

)

print $mail[0];
としても何も表示されないのは何ででしょうか?
0142nobodyさん04/07/20 11:28ID:???
>>141
print_r(preg_grep($grep, $mail));
0143nobodyさん04/07/20 11:33ID:fJEHV2g/
>142
ありがとうございます。
しかし、print_r だと、配列の中身全部出てしまいます。

[0] => [email protected] ← このメールアドレスだけを、とって、処理に使いたいんです。
0144nobodyさん04/07/20 11:38ID:???
>>1-143
マニュアル嫁
これで事足りる
014514104/07/20 12:50ID:fJEHV2g/
はまった・・
ob_implicit_flush(1);
while (@ob_end_flush());

これ先頭に書いたら表示されました
0146nobodyさん04/07/20 12:57ID:yRgYyr5n
データベースとの連携で質問です。
フォームから得た値で
$query ="insert into table values(0,'$name','$type',$price,'$old','$grade',)";
とレコード追加をしようとしていますが

項目によってはフォーム未入力時も追加可としたいのですが
このままではエラーがでます。
上のコードの前に
if ($***=="") $***=0;
とすれば解決するのですが

もっと簡単な方法はないのでしょうか?
みなさんはどのようにしていますか?
0147nobodyさん04/07/20 13:10ID:???
>>146
フォームから得るキーとそのデフォルトを配列にしておいて、
ループしながらやってる。
どのみち最低でもSQLインジェクション対処せんきゃならんし。
0148nobodyさん04/07/20 13:15ID:???
フォーム入力のデータは一通り入力チェックかける様にしてる
SQL発行する際はPREPARE使ってる
0149nobodyさん04/07/20 14:45ID:???
DBに書き込む際
型がおかしいとき、DBが判断してくれるのでDBが弾くのを任せるか
前もってPHP側で見てやるか、どっちがいいでしょう
0150nobodyさん04/07/20 14:49ID:???
親切にエラーが出たフォームとか教えてやるにはPHP側でやるしか無かんべ
0151nobodyさん04/07/20 15:02ID:???
PHP側でチェック
0152nobodyさん04/07/20 16:21ID:yRgYyr5n
>>147
>>148
なるほど。有難う御座いました。
0153nobodyさん04/07/20 18:12ID:???
フォームから得た値は管理者が入力するフォームで無い限りちゃんとサニタイズしろよ。
0154nobodyさん04/07/20 18:58ID:???
WebProg作るならクロスサイトスクリプティングの脆弱性ぐらい気をつけんとね。
0155nobodyさん04/07/20 19:04ID:???
DBに突っ込むだけの場合はサニタイズしてません
0156nobodyさん04/07/20 19:06ID:???
>>155
なんで?真面目にその理由を聞きたい
0157nobodyさん04/07/20 19:07ID:???
ログイン時に照会されるのみの情報だからです
0158nobodyさん04/07/20 19:09ID:???
>>157
全然意味がわからんのだが
フォームデータにSQL仕込まれたらどうすんの?
0159nobodyさん04/07/20 19:15ID:???
SQLから出したデータにもhtmlspecialcharsしておくべきですかね?
0160nobodyさん04/07/20 19:15ID:???
入れるときにしてるんなら必要ないよ。
0161nobodyさん04/07/20 19:16ID:???
意味が分からんねぇ・・・
"select * from auth where ID = ".$_POST['ID']
としてあとのパスワードやらをmysql_fetch_assocでDBから情報とって調べる
0162nobodyさん04/07/20 19:17ID:???
え、俺、自分の欲しい物リストスクリプト作って使ってるんだが
全然サニタイズしてないや
したほうがいいのかなぁ・・・
0163nobodyさん04/07/20 19:18ID:???
perlと違ってhtmlspecialchars()関数一個ですむのになぜめんどくさがるかねぇ
0164nobodyさん04/07/20 19:19ID:???
function postVar($name){
if(isset($_POST[$name])) return htmlspecialchars(mb_convert_encoding($_POST[$name],"EUC-JP","UTF-8, UTF-7, ASCII, EUC-JP,SJIS, eucJP-win, SJIS-win, JIS, ISO-2022-JP"));
else return;
}


Nucleusからパクッた。マジお勧め
0165nobodyさん04/07/20 19:38ID:???
>>161
$POST['ID']='aaa; delete from auth'みたいなのが入ってきたらどうすんの?
016613904/07/20 19:56ID:???
>140
サンクス!
default_charset = "Shift_JIS" が抜けてたらしい

php.ini

default_charset = "Shift_JIS"
extension_dir = "extensionsのある場所"
extension=php_mbstring.dll
[mbstring]
mbstring.language = Japanese
mbstring.internal_encoding = SJIS
mbstring.http_input = auto
mbstring.http_output = SJIS
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none;
;mbstring.func_overload = 0

これでSJISもEUCも、使えるようになったが
↑以外の設定だとSJISで書いたプログラム側が文字化けしたことを報告する
つまり >108 のいう「例 3. SJISユーザ用のphp.iniの設定」では文字化け発生

追加として鯖システムはUNHTTPD。Apacheは他の奴報告してくれ
0167nobodyさん04/07/20 20:18ID:???
<form accept-encoding="xxx">これ最強。
PEARのHTML_QuickFormを使えば再帰的にstripslashesしてくれて便利。

サニタイズはPEAR DBのquoteSmart使えばOK.
(数値型のデータなら事前にintval/floatvalしとく
 HTML_QuickFormのaddRuleと組み合わせるとなおよし)
0168nobodyさん04/07/20 20:30ID:???
>>165
それでやられちゃうのか
全然知らん買ったよ
sql文を防ぐってdelete select insert updateぐらいをフォームデータに入ってるかチェックでいい?
0169nobodyさん04/07/20 20:37ID:???
サニタイズってhtmlspecialcharsだけじゃだめ?
0170nobodyさん04/07/20 20:38ID:???
SQLインジェクションはヤバイ。まじでヤバイよ。
まずdeleteできちゃう。もう1レコードなんてもんじゃない。テーブルごと。
何しろ無制限。スゲェ!なんか制限とかないの。
しかも他のテーブルも消せちゃう。ヤバイよ、真っ白だよ。
だって普通は削除できないじゃん。だって削除されたら困るじゃん。
データ消えたら困るっしょ。
だからそのCGIはロールバックできる。話のわかるヤツだ。
けど普通のCGIはヤバイ。そんなの気にしない。消えるだけ。

とにかく貴様ら、SQLインジェクションのヤバさをもっと知るべきだと思います。
そんなヤバい仕事をしてる貴様らとか超偉い。もっとがんばれ、超がんばれ。
0171nobodyさん04/07/20 20:39ID:???
>>168
問題なのはこれ→「;」
一度セキュリティ関連のサイトを読むことをお奨めする
0172nobodyさん04/07/20 20:44ID:???
>>171
なるほど。
でも、上の場合だと複問い合わせされることもあるよね?
その場合はselectとか見る必要あるよね?
0173nobodyさん04/07/20 20:44ID:???
>>168 ポイントがずれてる
>>169 ぜんぜんだめ
MySQLならmysql_real_escape_stringした文字列をさらに'(シングルクォート)で囲む。
(PHP4.3.0未満はmysql_escape_string, PostgreSQLはpg_escape_string)
DB_common::quoteSmartは型を考慮してそこらへんを自動でやってくれる。
0174nobodyさん04/07/20 20:46ID:???
>>173
へぇ
じゃあDB_common::quoteSmartだけ使えばいいんですね
0175nobodyさん04/07/20 20:55ID:???
>>174
ごめん、説明の仕方が悪かった。quoteSmartは静的呼び出し無理ぽ。
PEARのDBクラスを使うときは
$db = &DB::connect($dsn);
$num = (int) $num; // 整数型のデータの場合
$str = $db->quoteSmart($str); // 文字列型のデータの場合
$sql = "SELECT * FROM hoge WHERE foo = $num AND bar = $str;';
$db->query($sql);
こんな感じでやります。詳しくはPEARマニュアル。
テーブル名やカラム名をquoteIdentifierするのが望ましいけど長くなるので省略。
0176nobodyさん04/07/20 20:58ID:???
>>175
どうもありがとう。
今までPEARは全然使ったことなかったよ。
使った方が簡単そうでいいね。
0177nobodyさん04/07/20 21:21ID:???
mysql_real_escape_stringは「;」が素通りしてしまうのですね
■ このスレッドは過去ログ倉庫に格納されています