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

【PHP】くだらねぇ質問はここに書き込みやがれpart7

レス数が950を超えています。1000を超えると書き込みができなくなります。
00019662005/07/12(火) 01:47:09ID:qOoYFCn7
PHPに関するくだらない質問用すれです。
ここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。
次スレは>>970あたりが建てて下さい

・過去スレ
【PHP】くだらねぇ質問はここに書き込みやがれ
http://pc5.2ch.net/test/read.cgi/php/1099322141/
【PHP】くだらねぇ質問はここに書き込みやがれpart2
http://pc5.2ch.net/test/read.cgi/php/1105218084/
【PHP】くだらねぇ質問はここに書き込みやがれpart3
http://pc5.2ch.net/test/read.cgi/php/1107780435/
【PHP】くだらねぇ質問はここに書き込みやがれpart4
http://pc8.2ch.net/test/read.cgi/php/1110697712/
【PHP】くだらねぇ質問はここに書き込みやがれpart5
http://pc8.2ch.net/test/read.cgi/php/1114787573/
【PHP】くだらねぇ質問はここに書き込みやがれpart6
http://pc8.2ch.net/test/read.cgi/php/1117945031/

立ってなかったんで>>970に近かった自分が勝手に立てちゃいました。
0871nobodyさん2005/08/05(金) 13:17:03ID:???
>>870
なるほど。やってみます。
取りあえずバッチファイル内の各行末でパイプ使ってリダイレクトさせてみましたが、
余計なファイルを作らなくて良いならそれにこしたこと無いので。
0872nobodyさん2005/08/05(金) 14:24:09ID:???
>>859
mb_strimwidth()
0873nobodyさん2005/08/05(金) 14:56:29ID:vB1WCgKJ
インクルード使うと、ページの上下余白がなくなっちゃうのは仕様ですか?
0874nobodyさん2005/08/05(金) 15:01:54ID:???
>>873
読み込み先のファイルでCSSとか定義されてんじゃね?
0875nobodyさん2005/08/05(金) 15:13:20ID:???
>>873
ブラウザが取得するのは単なるhtmlで、それがPHPを経由してるかどうかなんて気にしないよ。
違いがでる場合の(htmlの)ソースを見比べてみ。
0876nobodyさん2005/08/05(金) 16:41:48ID:jDJVMZFR
DB検索について教えて下さい。PHP+MySQLです。

postメソッドで検索語句を変数$keyに渡しすのですが、語句が1語であれば

select * from TABLE like '"% . $key. "%'";

で出来るのですが、複数のキーワード(and検索)の場合はどうすればいいんでしょうか。
0877nobodyさん2005/08/05(金) 16:59:19ID:???
>>876
かなり難解なソースですね
0878nobodyさん2005/08/05(金) 17:07:08ID:???
';DELETE from TABLE WHERE 1 OR '
で検索してみようかな
0879nobodyさん2005/08/05(金) 17:14:45ID:DYX+HJMi
phpからphp_mssql.dllを利用してWindowsSQLServerのデータベースに
接続しています。ntext型のデータをphpからselectする際、データが
大きいと「Warning: mssql_query(): message: Unicode のみの照合順序の
Unicode データまたはNTEXT データを、DB-Library (例 ISQL) または
ODBC バージョン 3.7 以前を使用しているクライアントに送信できません。」
と表示され、selectが行えません。
色々と試した結果、255バイトまでであれば取得できるようです。
上記症状の解決方法をご教えて頂け無いでしょうか。
実行環境はWindowsServer2003StandardEditionSP1
MicrosoftSQLServer2000
php4.4.0
を使用しています。
0880nobodyさん2005/08/05(金) 17:21:35ID:???
>>877
南海ですか・・・。

一応、こういった処理までいきました。

全角スペース→半角スペースに変換
半角スペース→カンマに変換
検索語句をカンマ区切りで配列化させる

後はSQL文で複数のキーワードをどうやって入れるかなんですけど…。

like $key1 and $key2 and $key3 …

みたいな感じでできますか?
0881nobodyさん2005/08/05(金) 17:53:30ID:???
>>880
いや、はっきり言えばコードの抜粋の仕方も日本語もおかしいってことだ。

SQLの質問ならずばり板違い

where col like '%a%' and col like '%b%' and col like '%c%'
0882nobodyさん2005/08/05(金) 23:17:16ID:???
画像を表示させる文
$img_ref .= '<img src="'.$a_path.'img/'.$_POST['key'].$imgnum.$tail.'" width="'.$W.'" height="'.$H.'" align=left></a>';
を
画像だけじゃなくファイル全般のリンクとしたいのですが
<img srcを <a href に
width height を消去

<a href=xxxxx>と</a>の間に 文字を挿入でよいかと思われるのですが間違ってるでしょうか?

$img_ref .= '<a href="'.$a_path.'img/'.$_POST['key'].$imgnum.$tail.'" align=left>"'.$a_path.'img/'.$_POST['key'].$imgnum.$tail.'"</a>';

ちなみにやろうとしていることは画像UP掲示板をファイル全般UP可能に変更しようとしてます。情報お待ちしてます
0883nobodyさん2005/08/05(金) 23:33:42ID:???
>>882
えらく見づらいけど、あってると思うよ。ただのリンクなんでalign=leftはいらないだろうけど。
動かないからカキコしたのかな。だったらどう動かないか書いた方がいいかも。
老婆心だけど直接 $_POST['key'] を埋め込むのはあまり良くないな。
理由が判らなければサニタイジングでググって味噌。
08848822005/08/05(金) 23:51:58ID:???
構造がえらく複雑な掲示板みたいで
通常表示はindex.htmlを表示
書き込みがあった場合にbbs.php さらにbbs2.phpを参照してるっぽいんです。
で、UPロード関連の処理が書いてあるのは bbs2.php

そして、実際に書き込みをして、正常ならば更新されたindex.htmlが表示されるようなんですが、手を加えていない bbs.phpにアクセス中にとまってしまうんです。

・・・・何言ってるかわかり辛いと思うんで

改造しようとしているやつ
ttp://script.s16.xrea.com/2ch/

改造しようとしているのは、UP可能なファイルを画像だけでなく
その他の拡張子も受け付けるようにしたいのです。

サイタニシングという名の特殊記号による文字化け注意了解です
0885nobodyさん2005/08/06(土) 00:07:26ID:???
>>884
>サイタニシングという名の特殊記号による文字化け注意了解です
それ、正しく理解できてないから。
0886nobodyさん2005/08/06(土) 00:08:26ID:???
もっと酷いことが起こります。
0887nobodyさん2005/08/06(土) 01:05:47ID:???
日記スクリプト作ってる。
年・月ごとにフォルダを作って、一日分ずつログを作っていく形式にしようと思ってる。

・・・のだけど、レン鯖のPHPがセーフモードOnみたいで、mkdirとchmodが動作しない。
回避策を教えてくれエロい人。
0888nobodyさん2005/08/06(土) 01:11:10ID:???
>>887
PathInfoつかって偽装するのじゃダメなの?
0889nobodyさん2005/08/06(土) 01:12:01ID:???
>>887
年月ごとだったら、別にスクリプトで生成しなくたって、
予めFTPとかで作っておけば?
3年分でもたかだか36個だしょ?
0890nobodyさん2005/08/06(土) 01:16:31ID:???
>36個
08918872005/08/06(土) 01:18:47ID:???
>>888
PathInfoってのが初耳。
ちょっとマニュアル見てくるっす。

>>889
ん、それでもいいかも。

もうちょっと格闘してみようかな。
ありがとうエロい人達。
0892nobodyさん2005/08/06(土) 04:41:55ID:zdmG/ySS
phpで記述されたページから、もうひとつの違うphpで記述されたページにジャンプするときに
データを渡すことは可能なのでしょうか?
08938922005/08/06(土) 04:48:42ID:???
すいません。書き忘れです。
自動にジャンプするときです。たとえばログインボタンなどを押して、自動的にジャンプするときに
さらにデータを送るということです。
0894nobodyさん2005/08/06(土) 05:56:02ID:???
GETでもPOSTでもSESSIONでも好きにしてくれ。
0895nobodyさん2005/08/06(土) 06:07:53ID:???
すいません。書き方が悪かったかもしれませんね。
phpファイルが二つあるある場合にそれどれのファイルから違うファイルにデータを渡すということです。

自動ジャンプは header(Location: *******); しか知らない上に使い勝手が悪いので困っています。
0896nobodyさん2005/08/06(土) 06:38:10ID:???
だから>>894の方法でいけるでしょ。
0897nobodyさん2005/08/06(土) 07:06:12ID:???
すみません、何が問題なのかうまく説明できないのですが、
下記のプログラムで、一つ階層の下のXXXというフォルダの
下の(中の?)フォルダのリスト名を取得したいのですが、どうすればできますか?

<?php
if ($handle = opendir('./')) {
while (false !== ($file = readdir($handle))) {
if (is_dir($file)) {
if ($file != "." && $file != "..") {
echo "$file\n";
}
}
}
closedir($handle);
}
?>
0898nobodyさん2005/08/06(土) 07:19:29ID:???
>>897
if ($handle = opendir('XXX')) {
0899nobodyさん2005/08/06(土) 08:11:04ID:???
>>897
opendirとis_dirの引数の両方変更しないとあかんやろ。

<?php
if ($handle = opendir('XXX/')) {
 while (false !== ($file = readdir($handle))) {
  if (is_dir('XXX/' . $file)) {
   if ($file != "." && $file != "..") {
    echo "$file\n";
   }
  }
 }
 closedir($handle);
}
?>
0900nobodyさん2005/08/06(土) 08:26:13ID:???
>>893
つ
 <html><head></head>
<body>
 //input系のbox
<form method='post' action='データを渡す先の.php'>
  <input type='submit' value='ログインボタン'>
  </form>
</html>
0901nobodyさん2005/08/06(土) 09:18:26ID:???
・ボタンを押した時に
・自動的に

どっちやねん(´_ゝ`)
0902nobodyさん2005/08/06(土) 09:44:31ID:???
入力フォーム -> 入力処理(画面表示なし、リダイレクト) -> どっかのページ じゃないの?
まぁなんにせよ、>>894だが。
0903nobodyさん2005/08/06(土) 11:35:30ID:???
PHP4とGDで画像出力をいろいろ試しているのですが、
あるスクリプトの一部で作成した画像をそのスクリプト内で表示することはできないのでしょうか?
調べてみたところ、この用法としては
・ヘッダーに画像情報を入れて*.phpを画像としてIMGタグで指定する
・画像ファイルを作成する
の二つのようですが、ファイルを作成することなく一時的な画像を同スクリプト内で表示することはできないものでしょうか?
0904nobodyさん2005/08/06(土) 11:48:48ID:???
>>903
1つのリクエストに対して、複数の内容のレスポンス(html + 画像)を返すというのは、
仕様としては存在してるんだけどブラウザ側で対応しているものがほとんど無い。
0905nobodyさん2005/08/06(土) 12:01:23ID:???
>>903
引数で表示画像内容を指定できるスクリプト(.php)と、
その.phpを<img>で呼び出すHTMLを吐き出す.php
の二つの.phpを作成汁
0906nobodyさん2005/08/06(土) 12:02:01ID:???
>>903
たぶんこんな感じのことをやろうとしてるのだろうか?

--- gd_and_img_tag.php ---
<?php
// リクエストパラメータに応じてGDでごにょごにょ
imagePngとかimageJpegあたりで出力みたいなこと
?>
<img src="自分の出力">
-----------------------

いやでもね、単純に

--- img_tag.php ---
<img src="gd.php?リクエストパラメータ">
-----------------
--- gd.php ---
header('Content-type: image/png');
// リクエストパラメータに応じてGDでごにょごにょ
imagePngとかimageJpegあたりで出力みたいなこと
-------------

でいいんで内科?
パラメータがデカイならセッションなりなんなりで。
09079062005/08/06(土) 12:02:52ID:???
>>905と内容かぶった・・・
09089032005/08/06(土) 12:04:58ID:???
むぅ。そうなんですか。>>904
ためしに一時的にファイルを作成してIMGタグで指定したあとでunlink()で削除したら
ブラウザには壊れた画像アイコンが出てきました。
直後に消すのもまずい様子。
・・・ってことはファイルに保存してもIMGタグで読み込むまでのタイミングで他の人が上書きしても
それは反映されてしまうかもしれないってことかな?
(実際に画像を読み込むタイミングはIMGで指定したよりずいぶん後になるのか?)
この辺はどういう仕様になってるんだろ??
0909nobodyさん2005/08/06(土) 12:06:25ID:???
>>903-905
検証もしていないし、IE限定っぽいんだけど、
phpでmhtファイルを送出したらどうなんでしょうね?
画像はbase64でエンコードして埋め込むことになる。

今度暇になたら検証してみよう。
09109032005/08/06(土) 12:14:35ID:???
スレ違いすまそ。>>905-907
言われてみれば最初から別ファイルにすればよかったorz。
いや、あまり細々とファイルをいっぱい作るのが嫌なので
同カテゴリのページはすべてフラグを設定して一つの.phpの中でやってたんですが、
よく考えたら画像生成用関数を外部につくるくらいなら画像生成用.phpを作っても大して変わらない・・・。
みなさんレスどうもです。

これまたよく考えたら>>908は当たり前すぎてorz。
クライアントに届く前に削除してるんだから見えるわけがないよな・・・。
0911nobodyさん2005/08/06(土) 12:14:57ID:???
×スレ違い
○すれ違い
0912nobodyさん2005/08/06(土) 13:47:37ID:???
初歩的ですみません、

$ary01 = array("鈴木","20");
$ary02 = array("田中","18");
$ary03 = array("渡辺","19");
$ary04 = array("田中","21");
.
.
.
$aryN = array("佐藤","21");


重複している『田中』を削除して

$ary01 = array("鈴木","20");
$ary02 = array("田中","18");
$ary03 = array("渡辺","19");
.
.
.
$aryN = array("佐藤","23");

にしたいんだが、どうすればできますか?
0913nobodyさん2005/08/06(土) 13:53:04ID:???
まずは2次元配列覚えてくれ
0914nobodyさん2005/08/06(土) 14:24:30ID:???
>>912
913のいうように二次元配列を使ったほうがいい。

$ary = array();
$ary[1] = array('名前', '年齢');
$ary[2] = array('名前', '年齢');
・
$ary[N] = array('名前', '年齢');

for($i=1;$i<=count($ary);$i++) if($ary[$i][0]=='田中') unset($ary[$i]);


そのデータのままやるんなら、
$aryNがいくつまであるのかっていうデータが必要。
それをforで同じように回してunsetする。
0915nobodyさん2005/08/06(土) 14:24:38ID:???
>>912
佐藤はどうして"23"になったの?
0916nobodyさん2005/08/06(土) 14:27:23ID:???
誕生日になったから
09179142005/08/06(土) 14:29:55ID:???
>>912
あ、良く読んでなかった。
「田中」を全て削除するもんだと思って>>914書いてしまった、すまん。

それこそ、二次元配列でデータを入れる段階で、
$ary['田中']='18';とかにしていけばいいんじゃないか?

ちなみに、あなたの質問の仕方にもちょっと足りないところが。
「重複している『田中』を削除して」って、どういう削除だ?
最初に出てきた『田中』が残るのか、後に出てきたのが残るのか。
上記のように二次元配列を使うと、後に出てきたのが残るんだが…

>>915
ワロスwwwwwww
0918nobodyさん2005/08/06(土) 14:36:03ID:???
重複してるからって削除される田中[2]の意味がわからん。
削除されるのは常に後から来た方なのか?
09199122005/08/06(土) 14:43:07ID:???
>>915 誤記
>>913-918 詳しくありがとう。

説明不足で申し訳ない、

削除するのは前でも後ろでも構わない、片方どちらか残せば、

重複しているの『田中』だけじゃなく、仮に『高橋』『伊藤』『小林』....
がでてきた場合も削除したいんだ、できますか?
0920nobodyさん2005/08/06(土) 14:47:17ID:???
>>916も加味して忠実に書きました。

for ($i = 1; ; $i ++)
{
 $aryname = sprintf("ary%02d", $i);
 if (! isset($$aryname)) break;
 $ary = $$aryname;
 if (! isset($tmp[$ary[0]])) $tmp[$ary[0]] = array($i, $ary[1]);
 unset($$aryname);
}

foreach ($tmp as $n => $v)
{
 $aryname = sprintf("ary%02d", $v[0]);
 $$aryname = array($n, isbirthday($n) ? (string)($v[1] + 2) : $v[1]);
}

まわりくど・・・・
0921nobodyさん2005/08/06(土) 14:50:46ID:???
なんか夏休みの課題みたいな質問が多いよな
0922nobodyさん2005/08/06(土) 15:46:43ID:???
$fp = fopen("hoge.txt") or die("hoge");
みたいに
$fp = fopen("hoge.txt") or return;
とやりたいけど当然うまくいかない
ここをかっこよく書く方法を
0923nobodyさん2005/08/06(土) 17:57:55ID:???
>>922
かっこよいかどうか判らんが
if (!$fp = fopen('hoge.txt', 'r')) return;
ぢゃあかんのか?
0924nobodyさん2005/08/06(土) 19:16:22ID:???
SafeMode上だとスクリプトがファイルを作成するのは無理でつか?
0925nobodyさん2005/08/06(土) 22:33:54ID:if+rBJOC
ユーザーの名前とパスワードをデータベースに送ってもらうとき、
自動的にユーザーに0000とか、自動でユーザーIDを付加し、
DBに登録したいんだけど、どうやって処理つくればいい?
0926nobodyさん2005/08/06(土) 23:00:32ID:???
わけわからん
0927nobodyさん2005/08/07(日) 00:02:45ID:???
>>925
オートナンバーでいいんじゃないの?
0928nobodyさん2005/08/07(日) 00:30:30ID:???
>>925
DBMSで自動でユーザーID(連番)を付加してやればいい。
まあPHPで連番の採番処理してやってもいいと思うけど。
(カウンターと同じようなの)
0929nobodyさん2005/08/07(日) 02:50:31ID:OZokRLKO
<?
print "<A HREF="http://www.google.com/intl/ja/">google</A>";
?>

すいません。PHPの中で、リンクタグを貼ることは出来ないんでしょうか?
↑のようなことをやっても、parse error, unexpected T_STRINGとなります。
0930nobodyさん2005/08/07(日) 02:59:14ID:???
print "" ←これがどこからどこまでだとparseされるか考えてみよー
0931nobodyさん2005/08/07(日) 03:04:35ID:???
>>930
レスありがとうございます。

$test = "<A HREF="http://www.google.com/intl/ja/">google</A>";
print "$test";

↑みたいな事しても出来ません。
なにか代替処置みたいな事がありませんでしょうか?
0932nobodyさん2005/08/07(日) 03:06:37ID:???
>>931
やべぇ、くだらなさすぎて答える気がおきねぇ。
0933nobodyさん2005/08/07(日) 03:08:15ID:???
そんなこと言わずに、お願いします!
0934nobodyさん2005/08/07(日) 03:27:42ID:???
解決しました
print "<A HREF=\"http://www.google.com/intl/ja/\">google</A>";
0935nobodyさん2005/08/07(日) 03:34:26ID:???
>>934
文字列に変数等がないなら、シングルクオートで括っても可
0936優しい人2005/08/07(日) 09:35:58ID:???
"から"までを認識するからな。"が4つもありゃわけわからんだろ。
覚えとけ(´_ゝ`)
0937nobodyさん2005/08/07(日) 11:01:55ID:???
二重引用符でくくられた文字列の中で使用されてるシングルクォートなら
その中で変数使っても問題ないんじゃないの?
print "<A href='$linkurl'>";
って大丈夫でしょ?
これってまずいの?
0938nobodyさん2005/08/07(日) 11:51:26ID:???
フォームのテキストボックスに値が入力されたかどうかを判定するにはどうすればよいのでしょうか?
例えば入力フォームにて<INPUT type='textbox' name='hoge'>としておき、
あとで何も入力されなかったらエラー表示させたいのですが、
if (!$hoge) print "だめぽ";
としたところ、テキストボックスに0を入れた場合でもエラーが表示されてしまいます。
issetやis_nullを試したところ何も入力しなくてもエラーは表示されません。
if (strlen($hoge)==0) とやるしかないのでしょうか?
他になにかやり方がありましたら教えてください。
0939nobodyさん2005/08/07(日) 11:52:57ID:???
空
0940nobodyさん2005/08/07(日) 11:53:38ID:???
$hoge == ''
0941nobodyさん2005/08/07(日) 11:57:21ID:???
[htmlのお話]
htmlの属性値は " ' のどちらで囲んでも良い。
属性値を引用符で囲まなくても良い場合もあるが、その条件とURIの表記とは一致しないので引用符を使った方がよい。
URIで使う文字に " ' のどちらも含まれていないので、(入力チェック等を通過した後は)どちらの引用符を使ってもよい。(RFC3986)

[phpのお話]
" "の中に$があれば、そこからできるだけ長い文字が変数名になるように探される。
つまり、変数名に使えない文字が出るまでが遠足^h^h変数名として利用される。 " ' は変数名の対象外。

で、>>937 それでもいいよ。
0942nobodyさん2005/08/07(日) 12:06:59ID:LvZBGVlb
あるphpファイルで関数を次のように定義して、
function u(){
$host="host";
$user="user";
$pass="pass";
}

としてメインのphpファイルで

<?php
require_once("test.php");

u();
$x=mysqli_connect($host,$user,$pass)
...

?>

としてもエラーとしてaccess denied for user 'nobody@localhost'(using password:no)
とけられてしまいます。何がまずいとですか?
0943nobodyさん2005/08/07(日) 12:14:08ID:???
>>942
そういう時は物事を簡単にしていく。
function u(){ 〜元と同じ〜 }
<?php
require_once("test.php");
u();
print "$host $user $pass";
?>
やってみれば、分かるけど $host等が未定義のままになっている。
これは、変数のスコープの問題。(どの範囲まで変数が有効か)
ttp://www.php.net/manual/ja/language.variables.scope.php
0944nobodyさん2005/08/07(日) 12:14:45ID:???
>>942
いらない3行

function u(){
}
u();

ってかDEFINE使え
0945nobodyさん2005/08/07(日) 12:36:14ID:???
>>941
「'」はURIに使っていい文字じゃない?
sub-delimsに入ってる。
0946nobodyさん2005/08/07(日) 12:59:22ID:???
>>945
あー、ほんとだね。
じゃぁ、属性hrefに変数を使う場合は " "で囲った方がいいってことだね
0947nobodyさん2005/08/07(日) 13:41:15ID:???
print '<A href="' . $linkurl . '">';
これが最強
0948nobodyさん2005/08/07(日) 13:59:33ID:???
すいません、まだphp初心者なのですが、
MagpieRSSというRSSパーサー(http://www.hyuki.com/yukiwiki/wiki.cgi?MagpieRSS)を
設置したのですが、RSS0.92を取得して、RSS1.0へ出力するにはどのPHPファイルに
どのような記述をすればいいでしょうか?

サイトに埋め込む方法はよく取り上げられているのですが、
そのままRSSに書き出す方法が見つからないので・・・
09499122005/08/07(日) 15:54:11ID:???
書式の違う日付からタイムスタンプを生成したいのですが、
できませんか?

2005-08-07T15:38:10+09:00
Sat, 6 Aug 2005 12:55:00 CDT
20050804T00:00:00
0950nobodyさん2005/08/07(日) 16:04:52ID:Comr+/II
入力データのチェックってどの程度やってる?
GETでもPOSTでもいいんだけど、SQLインジェクションというのを調べてたら
そのまま渡されたデータをSQL文に入れたりするのがちょっと怖くなってきた。
もちろん数値ならctype_digit、半角英数字ならctype_alnumとかでチェックはしてるんだけど、
たとえば半角全角オールオッケーなデータ(掲示板の投稿内容とか)はどうすればいいんだろう?
SQL文で使われそうな英単語を弾くというわけにもいかないし。
誰か安心できるいい方法教えてplz。
0951nobodyさん2005/08/07(日) 16:10:10ID:???
>>950
お好きな物を用途にあわせてドゾ

http://jp2.php.net/manual/ja/function.htmlspecialchars.php
http://jp2.php.net/manual/ja/function.strip-tags.php
http://jp2.php.net/manual/ja/function.addslashes.php
09529502005/08/07(日) 16:22:35ID:Comr+/II
>>951
即レスどうもです。
確かにSQL文中の変数をシングルクォートでくくっておいて、
入れる変数を全てhtmlspecialcharsで処理すれば問題はなさそうですね。

ところで最近買った本には
「入力した値をデータベースに格納する場合には、スクリプトの無効化はデータを表示するときに行う」
と書いてありました。
格納時にエスケープしてしまうと
「ブラウザを経由せずにデータ入力した場合にエスケープが行われない」
「ブラウザ以外に出力する場合にエスケープしたキャラクタを元に戻す必要がある」
だそうです。
言ってることは正しいけど、意図しないSQL文を入力されてしまう可能性を考えたら
SQL文発行前に処理しておいた方がいいのでしょうか?
09539502005/08/07(日) 16:25:57ID:???
とりあえずmagic_quotes_gpcをonにしておけばいいのかな・・・。
0954nobodyさん2005/08/07(日) 16:33:31ID:???
>>950

とりあえず自分はアドスラッシュだけして格納、表示の時点で
nl2br($str);またはnl2br(htmlspecialchars($str));
BBSで特定のタグを許したければstrip_tagsのオプションで指定しています。
ただ、マヌアルによるとstrip_tagsは構文チェックはしないらしいのでhtmlが壊れる可能性はある
09559512005/08/07(日) 16:38:54ID:???
>>952

ごめんなさい、952をちゃんと読んでいなかった…。
>確かにSQL文中の変数をシングルクォートでくくっておいて、
>入れる変数を全てhtmlspecialcharsで処理すれば問題はなさそうですね。

そんなんすか?格納時にhtmlspecialchars()かましてもしょうがない気がしますが…。
一度マヌアルのhtmlspecialchars、addslashesを読み返しておいた方がいいかもです
あと、関数個別以外にも
http://www.php.net/manual/ja/security.database.sql-injection.php
も一読しておいて損はないかと…
0956nobodyさん2005/08/07(日) 16:39:02ID:???
>>952
DB周りについては以下の考えでいいのではなかろうか。
DBに渡すデータ
 ・データ中に ' や \ が含まれているとSQLエラーになるんで addslashes でエスケープ
 ・データ中にSQLが含まれていてもただのデータとして扱ってもらうように前後を ' で挟む
 ・データ中にHTMLタグが含まれていてもDB上のデータとしては別に問題ないので何もしない
DBから取り出したデータの扱い
 ・ブラウザに表示する際、HTMLタグが含まれているとまずいので htmlspecialchars でタグを除去
0957nobodyさん2005/08/07(日) 16:51:06ID:/ebYkLvj
sjisのデータをaddslashesする時に注意が必要
09589502005/08/07(日) 16:51:35ID:Comr+/II
みなさんレスどうもです。

>>952の「確かに・・・問題はなさそう」は勘違いでした。すみません。

ではさしあたってタグは全部無効化するということで
・magic_quotes_gpcはon(全てのGET,POSTに自動でaddslashes)
・入力したデータは必要な書式かどうかのみチェック
・DB格納時には特に処理しない
・ブラウザでの表示時にはhtmlspecialchars(stripslashes($hoge))で処理
・ファイルへの出力時にはstripslashes($hoge)で処理
これで大丈夫かな?
(最初に読んだ入門本に、データ入力直後にhtmlspecialcharsで処理するように書いてあったのでそれが染み付いてましたorz)
0959nobodyさん2005/08/07(日) 17:03:22ID:???
>>958
基本的に>>956の考え方がスマート。
ただ、更新頻度より表示頻度の方が圧倒的に多かったり、容量に余裕があるなら、
DBに入れる前にある程度表示用のフォーマット(htmlspecialchars然り)するのもありだね。
そのへんはサイトの規模に応じてケースバイケースで。
09609502005/08/07(日) 17:09:11ID:???
あ、ブラウザで表示するときもstripslashesの必要はないか。
あとはSQL文で変数をシングルクォートでくくる、と。
どうもありがとうございました。
09619502005/08/07(日) 17:36:38ID:Comr+/II
もう一つ質問。
入力フォームから、たとえばラジオボタンやリストから選択してその値をPOSTで渡すような場合、
渡された.phpの方ではその値が正しいものかをチェックしてる?
入力フォームをダウンロードしてvalueの値を改ざんし実行されると意図しない値が渡されたりするわけだけど、
そういうのってどこまでチェックする必要があるんだろうか?
たとえば製品名をリストから選択して製品番号をvalueに入れてある場合、
改ざんされると存在しない製品番号を送られてしまいいろいろ困ることになりそう・・・。
かといってその都度DBに照合するものなのかな?

経験者の方アドバイスお願いします。
0962nobodyさん2005/08/07(日) 17:47:33ID:???
>>961
ユーザからの入力は全て正当性チェックしてる。
ただ、数値を入れるべきとこに数値以外を入れてきた馬鹿に対して
「エラー:数値を入力してください」
なんて親切に出してやる義理はないので、PHPが勝手にゼロに変換したとしても放っておく。
(もちろんゼロが正当な値かどうかのチェックは別の話)
0963950=9612005/08/07(日) 17:54:29ID:???
>>962
レスどうもです。
やはり全部チェックしてますか。
エラー表示はほどほどに「不親切に」やることにします。

ところで、チェックは「全て」チェックしてますか?
というのは、例えばSELECT文で必要な検索条件を指定するだけの場合もチェックすべきなのでしょうか?
検索結果が0件になるだけなのでまぁいいかなと思ったりもするのですが。
選択された値をinsert/updateする場合には厳密にチェックする必要がありそうですね。
09649622005/08/07(日) 18:08:32ID:???
よくわからないけどチェックしなくても問題ないものはチェックしなくてもいいんでない?
っていうかそもそもチェックのしようがないものをチェックしろと言われても何が何だかって話になるし。

> ユーザからの入力は全て正当性チェックしてる。
って部分は
ユーザからの入力は必要なだけ全て正当性チェックしてる。
と言い換えるべきだったかな。
値の範囲とか、文字列長、不正文字、不正タグ、
その他コンテキストとの兼ね合いから必要なだけ全てチェックすべきだと思われ。
0965nobodyさん2005/08/07(日) 18:31:25ID:???
php5ts.dllはわざわざシステムフォルダに移動する必要ないのに、なぜ書籍やサイトでは移動するように書くのか疑問。
0966nobodyさん2005/08/07(日) 20:09:33ID:???
日付で「2005-08-07T20:08:00+09:00」の形式を、
UNIXタイムに変換したいのですが、strtotime()ではうまくいきませんでした。
他に方法ありませんか?
0967nobodyさん2005/08/07(日) 20:19:10ID:???
>>966
DBから引っ張ってきている値なら、SQLでなんとかする。UNIXタイムスタンプで取得できる場合もある。
どうしてもPHPでやりたければ、sscanfやsubstrや正規表現で各要素に分割する。
0968nobodyさん2005/08/07(日) 21:14:46ID:???
掲示板で文章書いて、投稿ボタンを押すと、この文でOKですか?
みたいな確認文章が表示されます。

投稿ボタンを押す前の書き込んだ内容を、投稿ボタンを押した後の
プレビューとして表示する画面にデータをうつしているんですか?
0969nobodyさん2005/08/07(日) 21:29:31ID:???
他にどうやっていると?
0970nobodyさん2005/08/07(日) 21:38:12ID:???
全然関係ない文が静的に表示されたらワロス
レス数が950を超えています。1000を超えると書き込みができなくなります。