【PHP】下らねぇ質問はここに書き込みやがれ 55
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2007/09/29(土) 18:35:56ID:YlkpEUW6PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 54
http://pc11.2ch.net/test/read.cgi/php/1189309377/
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0714nobodyさん
2007/10/09(火) 23:43:16ID:G9B1/Oicメール一覧があって、それぞれのメールのアタマのチェックボックスにチェックを入れて
【チェックしたメールを削除する】 ってボタンを押したら削除されたりしますが、
アレってどういう仕組みになってるんでしょう。
各メールにそれぞれ削除ボタンがあるのなら自分でも作れるんですが、一括削除の
仕組みがわかりません
暇なかた、どなたか教えてください よろしくお願いします
0715nobodyさん
2007/10/09(火) 23:48:00ID:???まず↓嫁
http://www.tagindex.com/html_tag/form/input_checkbox.html
あとはPOSTされたデータ読めば分かるだろ
0716nobodyさん
2007/10/09(火) 23:53:23ID:???<input type="checkbox" name="example[]" value="1">サンプル1
<input type="checkbox" name="example[]" value="2">サンプル2
<input type="checkbox" name="example[]" value="3">サンプル3
<input type="checkbox" name="example[]" value="4">サンプル4
こんな感じでname属性に[]をつけると
$_POST['example']の中に選択したやつが配列で入ってくる
0717nobodyさん
2007/10/09(火) 23:55:16ID:???0718nobodyさん
2007/10/10(水) 01:04:56ID:???出来ました。ただ、登録したデータを一覧表示すると、 Array と表示します。
丸ごとDBに登録じゃまずいですよね 実用の時は、
質問2 休日の過ごし方は?(複数選択可)
<br>
<input type="checkbox" name="q2" value="映画鑑賞">映画鑑賞
<input type="checkbox" name="q2" value="ドライブ">ドライブ
<input type="checkbox" name="q2" value="買い物">買い物
上記は趣味を登録するフォームなんですが、こういうのって
「映画鑑賞」「ドライブ」「買い物」の部分を生成される配列から抽出して、
「,」で連結したあとに、dbに送信してるんですか?
0719nobodyさん
2007/10/10(水) 01:36:01ID:???そんなもん、DBのテーブル設計による。
1ユーザ1レコードで格納するんならカンマで連結して1カラムに押し込み〜
なんてなるんだろうが、それだと検索しにくいし後々加工もしにくいから
「ユーザID,属性」みたいなテーブルにして、選択した数の分だけ
レコードを追加してやった方がいいんじゃないか?
その場合、連結なんてしないで数の分だけループしてinsert。
0721nobodyさん
2007/10/10(水) 01:53:52ID:???どうもです。登録の方が削除より話がわかりやすいような気がして
登録の方で聞いてしまいました。 基本的な部分は同じだろう、と (すみません)
>その場合、連結なんてしないで数の分だけループしてinsert。
というのは
userName|shumi
-------------------
yamada|映画鑑賞
yamada|ドライブ
って形になるんでしょうか? 確かにこっちのほうがいいですねー
0723nobodyさん
2007/10/10(水) 02:09:52ID:???>$_POST['example']の中に選択したやつが配列で入ってくる
~~~~~~~~~~~~~~~~
って書いてあるんだからそれをそのまま表示すると型が表示されるのは普通
0724nobodyさん
2007/10/10(水) 02:49:28ID:???だと、htmlには©じゃなくてcと表示されてしまいます。
GETで©を取得してそのまま©と表示させるにはどうしたらいいでしょうか?
文字コードはUTF-8です。よろしくお願いします。
0726724
2007/10/10(水) 03:00:00ID:P3ev0KiIsageてました。
0727nobodyさん
2007/10/10(水) 03:04:42ID:tzNR6m8r0728nobodyさん
2007/10/10(水) 03:05:47ID:tzNR6m8rみんな???で気持ち悪いんだけど
0731nobodyさん
2007/10/10(水) 03:28:56ID:???0733nobodyさん
2007/10/10(水) 04:55:47ID:???0735733
2007/10/10(水) 05:40:36ID:???まじでDBなんて覚える必要ないよ
FWが勝手にやってくれるからFWの使い方覚えたほうが数倍いい
0736nobodyさん
2007/10/10(水) 06:04:03ID:???0738nobodyさん
2007/10/10(水) 06:49:33ID:???PGってあんま関係ないんだよな・・・・
小規模なもんはてきとーにDB設計しても問題ないし・・・・
>DBなんてFWに勝手にやらせればおk
って思ってる時点でしれてるが・・・
0739nobodyさん
2007/10/10(水) 07:04:51ID:???0740nobodyさん
2007/10/10(水) 07:24:15ID:???そのデータ構造にデータを入れなきゃいけないのだから。
0741nobodyさん
2007/10/10(水) 07:41:39ID:???ほぼ迷うことなく決めることができる、という意味では確かに8割完成かな。
0742nobodyさん
2007/10/10(水) 07:43:17ID:???0743nobodyさん
2007/10/10(水) 07:51:22ID:???小一時間沈黙…(!! frameworkか…)
orz
0744nobodyさん
2007/10/10(水) 08:25:34ID:???0745nobodyさん
2007/10/10(水) 09:18:50ID:P3ev0KiI1.POSTでkeywordを取得
$keyword = htmlspecialchars($_POST['keyword'],ENT_QUOTES,'UTF-8');
2.$keywordをDBに保存
これだけで大丈夫でしょうか?
と言うより普通こうですか?
0750nobodyさん
2007/10/10(水) 09:30:20ID:???0751nobodyさん
2007/10/10(水) 09:32:20ID:???出力する事を前提としていると考えるのが妥当。
0752nobodyさん
2007/10/10(水) 09:33:21ID:???0753nobodyさん
2007/10/10(水) 09:33:49ID:???0754nobodyさん
2007/10/10(水) 09:38:29ID:OYZiPU1d横からすみません。私もDBへ生データを入れていますが、
クライアントから送信されたデータを何もせずに入れていることに少し不安があります。
入力値が半角英数であれば、半角英数チェックを掛けてから入れますが、
日本語も含まれるような場合だと、そのまま入れています。
何かチェックをかけるべきでしょうか?
システム予約語的なマズイ文字があると前に聞いたことがあるのですが・・・
0756nobodyさん
2007/10/10(水) 09:44:17ID:???今は抽象化レイヤがトレンド?
0757nobodyさん
2007/10/10(水) 09:48:50ID:???というのが効率良く思えないんだけどな。効率など考えない企業向けなら何処で何をしようが
関係ないだろうけどw。
0758nobodyさん
2007/10/10(水) 09:51:28ID:???画面で入力可能にしているのが諸悪の根源だよ。
0761nobodyさん
2007/10/10(水) 09:54:56ID:???完璧だと思い込んでいる奴が墓穴をほるケースだわ。
0762nobodyさん
2007/10/10(水) 09:55:22ID:???0763nobodyさん
2007/10/10(水) 09:55:44ID:cLvYq00J0765nobodyさん
2007/10/10(水) 09:58:50ID:???100%ユーザーのIDやパスワードも生で入れるタイプ。
0768nobodyさん
2007/10/10(水) 10:12:03ID:???0769nobodyさん
2007/10/10(水) 10:12:04ID:???すまん、早とちりした
てか、IDとパスワードはエスケープしないで使える文字を限定しているわけだが
それでもエスケープって必要なのかな
正規表現でa-zA-Z0-9\-_で弾いてる
0770nobodyさん
2007/10/10(水) 10:15:05ID:???0771nobodyさん
2007/10/10(水) 10:15:53ID:???エスケープの目的とは全然違う。
まぁ、エスケープもしないというやつはセキュリティーに無関心だから情報流出についても無関心だと思うが。
0772nobodyさん
2007/10/10(水) 10:18:27ID:???書き方がかわるだけで穴が出来てしまう
0773nobodyさん
2007/10/10(水) 10:19:10ID:???DBから取り出すときは毎回htmlspecialcharsをかける
B.保存するときhtmlspecialcharsかける場合
DBから取り出すときはそのまま出力できる
どっちが効率的かと言ったらBだと思うけど。
0774nobodyさん
2007/10/10(水) 10:20:42ID:???SQL文エスケープしないとまずい?
今まで自動でしてくれるもんだと思ってたんだが・・・
0775nobodyさん
2007/10/10(水) 10:23:46ID:9QH/UxMSpg_escape_string
0776nobodyさん
2007/10/10(水) 10:32:00ID:???つか、文字列に'を含んだSQL投げた時点でRDBMSに蹴られるやん
詰まるところクォーテーション使いたいからキチンと処理しとるで
0777nobodyさん
2007/10/10(水) 10:34:28ID:???保存するときhtmlspecialcharsかけない人って
magic_quotes_gpc = Onにしてるのかな?
まあたしかにOnにしてると生データ入れられるな。
でもmagic_quotes_gpc = Offが推奨なんだよな。
0778nobodyさん
2007/10/10(水) 10:41:00ID:???いや、普通保存するときにかけるのはmysql/pg_escape_stringであって
htmlspecialchars使う人は表示以外にデータを使わないと最初から決めてる人。
magic_quotes関係ない。
0779nobodyさん
2007/10/10(水) 10:42:31ID:???HTMLを出力するときに掛けるのは当然。
DBに入れるときにはDBの特殊文字をエスケープするのが当然。
DBに入れるときにhtmlspecialchars使うのはおかしい。
たまたま上手くいってるってだけだ。
0780nobodyさん
2007/10/10(水) 10:46:33ID:???Don't → Don\'t こんな文字列もらってもRDBMSには突っ込めんよ?
少なくとも俺の使ってるRDBMSでは駄目
普通に手抜けるんだからhtmlspecialchars通しておけばいいんでないの?
RDBMSから生のデータ引っ張り出した時はガックリくるかもしれんけど
0781nobodyさん
2007/10/10(水) 10:47:59ID:???暗号化っていうと復号できるみたいなニュアンスあるから誤解をまねく
>>758のいってることはごく自然だと思うんだけどな
SQLインジェクションにつながるものはバリデータではじくもしくはエスケープして入れる
XSSにつながるデータは直接いれて出力時にエスケープする
ていうのが定説だと思うんだけど
なんでもかんでもhtmlspecialcharsすればいいっていうわけではない気がする
0782nobodyさん
2007/10/10(水) 10:54:00ID:???>>780はhtmlspecialchars使うのは正しいと言ってる
うーん・・・
0784nobodyさん
2007/10/10(水) 10:57:57ID:???0785nobodyさん
2007/10/10(水) 10:59:25ID:???私は効率だからPOSTであがってきたデータはhtmlspecialcharsしている事が多いい。
書き込みより読み込み回数の方がたいてい多いいしな。
0786nobodyさん
2007/10/10(水) 11:04:14ID:???取り出す時に調べれば良いっていうことかww
ダーティーなデータをDBに保存することに違和感を持たない感覚って、
プロとしてダメダメだよ
0787nobodyさん
2007/10/10(水) 11:04:57ID:???> DBに入れるときにはDBの特殊文字をエスケープするのが当然。
> DBに入れるときにhtmlspecialchars使うのはおかしい。
> たまたま上手くいってるってだけだ。
これも納得できる。
htmlspecialcharsではなくmysql_real_escape_stringを使うべきなのだろうか?
0788nobodyさん
2007/10/10(水) 11:08:03ID:M9anXW7visset()ではnullがセットされたものもtrueとなってしまいます。
0790nobodyさん
2007/10/10(水) 11:13:50ID:???0791nobodyさん
2007/10/10(水) 11:14:46ID:???いやいや、割り切りだよ割り切り。
Windowsアプリケーション等では insert文投げる時にトラブルの種になる文字は
禁則文字として「使わないでくださいね」って釘打っておけば納得してもらえるの。
ところがWebの場合、「これ、使えません」っていうと「なんでや?他んところは
使っておるやないかボケ!!」って聞き入れない。
ま、つまんねえとこで意地張ってもしょうがないじゃん。
0792nobodyさん
2007/10/10(水) 11:16:16ID:???出力する時に50項目*1000ループhtmlspecialcharsを実行するのか、
それともあがって来たデータそのものに一度だけhtmlspecialcharsを
実行するのかの違いだけ
0793nobodyさん
2007/10/10(水) 11:22:00ID:???タグと本文を正規表現で分けて処理すんのかな?
0795nobodyさん
2007/10/10(水) 11:25:16ID:???考え方としては毎回動的に画面を生成する掲示板等と
更新時に静的HTMLを生成してしまうblog等との違いと一緒だよな。
それがより効率を上げ性能を向上させるものなら
多少の非汎用化も許容される場合がある。
もちろん、常時内容が変化するようなシステムなら
元になるデータだけ持っておいて毎回動的生成すべきだろう。
0796nobodyさん
2007/10/10(水) 11:33:16ID:0neE8nHZ自分はサイト運営をしているのですが、PHPを使ったページで
Warning: main(db/.php): failed to open stream: No such file or directory in /home/webmaster/public_html/link/yomi.php on line 21
Fatal error: main(): Failed opening required 'db/.php' (include_path='.:') in /home/webmaster/public_html/link/yomi.php on line 21
とエラーが出てきてしまい使えません。
誰かPHP等に詳しい方、対処方法を教えていただけませんか
0797nobodyさん
2007/10/10(水) 11:35:02ID:???無いんじゃないかな…
なんせ
$a = NULL;
var_dump(is_scalar($a));
の結果が「bool(false)」になるくらいで、
NULLを格納した値はPHP上では「未定義変数」の扱いになってる。
決してNULLという値が格納されたスカラー変数ではないのよ。
0798nobodyさん
2007/10/10(水) 11:35:24ID:???何でmail()なんて使おうと思ったの?
0799nobodyさん
2007/10/10(水) 11:35:49ID:???効率の話は全く考えてなかった。どうすべきか、という意味で779を書いた。
表示の度にhtmlspecialcharsを掛ける負荷をなくすという目的なら
htmlspecialcharsをかけてDBへ保存すれば良い。
でも、だからといってDB固有のエスケープを掛けないで良いという事じゃない。
htmlspecialcharsを掛けてさらにmysql_real_escape_stringなどをかける。
0803nobodyさん
2007/10/10(水) 11:38:12ID:???0804nobodyさん
2007/10/10(水) 11:38:45ID:???0807nobodyさん
2007/10/10(水) 11:41:54ID:???<?php
$a = 100;
$a = null;
if (!isset($a)) {
echo "empty!\n";
}
?>
emptyって表示されたけど・・・。
0808nobodyさん
2007/10/10(水) 11:46:45ID:???例えば文字列 Don't をそのままDBに入れる人は
DBから文字列 Don't を取り出せないじゃないか!
保存するときhtmlspecialcharsかけるのが正統派だ
0810796
2007/10/10(水) 11:51:12ID:0neE8nHZ回答頂いた方ありがとうございます
色々と調べてみます
0811nobodyさん
2007/10/10(水) 12:01:35ID:???htmlspecialcharsとかaddslashesすりゃ良いって人よく見るけど
それぞれ用途があるんだからそれぞれの用途に合ったものを使うべき
DBに突っ込む時にhtmlspecialcharsとかしとけば表示の時楽だが
生データじゃないので再利用性が落ちるし
こういう人に限って表示の時も
再度htmlspecialcharsをしたりと言う場合が多い気がするんだけど?
0812nobodyさん
2007/10/10(水) 12:04:34ID:???■ このスレッドは過去ログ倉庫に格納されています