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

【PHP】下らねぇ質問はここに書き込みやがれ 55

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2007/09/29(土) 18:35:56ID:YlkpEUW6
まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、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カテゴリ)の各スレで


0685nobodyさん2007/10/09(火) 15:16:10ID:???
PHPじゃなくhttpの質問になるかもしれませんが、

POSTでフォームを送信した後、ブラウザの戻るボタンで戻ると、

 [ 警告:ページの有効期限切れ ]

と、表示されますが、これを表示させずにページを表示させる方法はありませんか?
この場合、リロードするとページが表示されますが、
状態としては、警告を出さすにリロードさせる方法になると思います。
0686nobodyさん2007/10/09(火) 15:44:36ID:???
>>684
foreachの前にタイトル一覧という文字列をechoで表示すればいい話のような…。
そんなに複雑な処理でもしてるのかな。
0687nobodyさん2007/10/09(火) 16:37:20ID:???
>>685
ありますん。
仮にあるとしてもブラウザ側の対応によるものだからJSあたりになるんじゃね?
0688nobodyさん2007/10/09(火) 16:50:04ID:???
>これを表示させずにページを表示させる方法はありませんか?
こっちのほうがよっぽど問題あるんじゃね

もっとしっかり設計汁!
0689nobodyさん2007/10/09(火) 17:25:57ID:???
>>685
POSTした先のPHPでデータ処理だけさせて
ロケーションさせてやれば
それっぽい感じの事できるよ
0690nobodyさん2007/10/09(火) 18:32:28ID:2B20Voue
質問です
1)イベントの管理ツールを作ろうと思っています。(登録システム)
2)各イベントへの参加者数は不定で、1人の時も10人の時もあります。
3)参加者はそれぞれIDが振られており、それを参照することで詳細情報を確認できます
  ※IDのないユーザもいる  その場合はユーザ固有のURLを別に登録できるようにしたい

上記のような条件の場合、どういうプログラムを組めばいいでしょう?
参加者数が上限が決まってたら、DB的に
sankasha_1〜sankasha_10 sankashaURL_1〜sankashaURL_10 とフィールドを物理的に
用意すればいいのかと思いましたが、そうではないのでPHPのプログラム側で
工夫しなければならないと思います。が、思いつきません。
どうしたらいいんでしょう? アイディアもらえたら嬉しいです。お願いします。
0691nobodyさん2007/10/09(火) 18:41:37ID:???
イベントのテーブル
参加者のテーブル

運用テーブル

として
運用に登録する際IDがない人の場合は登録する際にURL+参加者FKを0に
って感じにするかな
0692nobodyさん2007/10/09(火) 18:49:21ID:???
テーブルを1つにってのならlongTextにでもして
sankasyaフィールドに配列を文字列にして特攻
0693nobodyさん2007/10/09(火) 19:38:19ID:???
serialize()で万事解決
0694nobodyさん2007/10/09(火) 20:07:07ID:???
・データ構造疎かにして処理でなんとかしちゃおう
もう破綻は決まったな
0695nobodyさん2007/10/09(火) 20:08:35ID:???
それは設定条件による。
0696nobodyさん2007/10/09(火) 20:28:16ID:???
質問している時点で既に"行き詰ってる"状態<-条件もクソもねえや
0697nobodyさん2007/10/09(火) 20:29:07ID:???
まだその段階に至ってないのなら別に構わないのでは?
改善したいと思うならRDB勉強すればいい
0698nobodyさん2007/10/09(火) 20:45:21ID:???
>>674
お引取り願います
0699nobodyさん2007/10/09(火) 20:55:16ID:???
勉強するならRelational Data Modelな
0700nobodyさん2007/10/09(火) 20:56:42ID:???
せっかくだからいろいろ聞けば良かったのに。<PHP修得者
07016902007/10/09(火) 20:58:29ID:???
皆さんいろんな意見ありがとうございます。
今まで住所録くらいしか作ったことないので、皆さんのアドバイス見てると
こりゃ大変だなと改めて感じています。
一つ思ったんですが、�@基本情報(開催日・開催地など「固定のもの」) と
�A参加者情報(数が定まらないもの) を同じテーブルに入れると一気に難度が上がるんですね
なので、複数のテーブルに分けることにしました。

ご意見で言うと、>>691さんのやり方だと思うんですが、そのアドバイスの中である
「運用テーブル」というのが意味がわかりません。どういう役割のものでしょうか?
自分の中では�@と�Aの二種類しか存在しないようなイメージだったので。。

話がPHPの話題からだいぶズレているとは思いますが、申し訳ないですが
教えてください。「(>>691)運用に登録する際IDがない人の場合は登録する際にURL+参加者FK」の
「参加者FK」とは何かもわからないのでお願いします。ほんとにすみません
0702nobodyさん2007/10/09(火) 21:01:41ID:???
>>699
まずDBの基礎から学ぼうよ。そんなんで作っても無理だよ。
0703nobodyさん2007/10/09(火) 21:02:13ID:???
ごめん間違えた上は>>701宛
0704nobodyさん2007/10/09(火) 21:14:33ID:???
無理しない方がいいぞ。
仕事大切にしろ。
0705nobodyさん2007/10/09(火) 21:15:26ID:???
>>704
すんません。誤爆です。
0706nobodyさん2007/10/09(火) 21:36:03ID:???
>>687
以前、どこかのWebページで、ヘッダーに何かすることでできたとおもうんですが

>>688
いや、設計の問題ではないんですけど・・・
(ブラウザの戻るボタンを無効にできますか?)

>>689
問題は、ブラウザの戻るボタンで戻られた場合の話です。
0707nobodyさん2007/10/09(火) 21:40:00ID:???
誤爆したらどこの誤爆か貼るのが礼儀だ
07086902007/10/09(火) 21:44:47ID:???
>>702
そういわずにお願いします
勉強は勉強でしますんで…
0709nobodyさん2007/10/09(火) 21:54:54ID:???
>>701
イベント情報、会員情報
を元に実際に運用するテーブルの事。

イベント情報テーブルに、PK(プライマリーキー)、イベント名、開催時期、終了時期
会員情報テーブルに PK、ID,PASS,その他情報
とあった場合

会員が参加登録をした時に運用テーブルに
イベント情報、会員情報それぞれのFK(フォーリンキー)を入れる。
って感じ。

PK,FKの意味についてはカッコ書きのをググればでるよ
0710nobodyさん2007/10/09(火) 22:03:44ID:???
運用にPK,イベントFK、会員FK、URL
とフィールドをつくって
会員FKがある条件の時にURLを表示ってやる。

ただ、会員FKの0とかでダミーを事前につくっておく必要がある事に今気づいた
07116902007/10/09(火) 22:04:35ID:???
>>709
ありがとうございます
まだ理解できない部分は専用の板で訊くことにします
凄く勉強になりました、ありがとうございました!
07126892007/10/09(火) 22:40:40ID:???
>>706
tmp.php
<?php
session_start();
if (isset($_SESSION['test'])) {
        echo $_SESSION['test'];
}
?>
<form action="loc.php" method="POST">
<input type="submit" value="test">
</form>

loc.php
<?php
header('Location: tmp2.php');

tmp2.php
<?php
session_start();
$_SESSION['test'] = 'aiueo';
?>
post ok


こんな感じでやってみれ
多分期待してる動きになるはず
あと、戻るボタン無効化はJSでhisotryをいじるぐらいじゃ?

それ以外の方法あったら俺も知りたい
0713nobodyさん2007/10/09(火) 22:57:50ID:???
>>712
お?!ソースまで!手間かけさせてすいません。
ちょっくら試してみます!
0714nobodyさん2007/10/09(火) 23:43:16ID:G9B1/Oic
質問です。よく、フリーメールのサービスで
メール一覧があって、それぞれのメールのアタマのチェックボックスにチェックを入れて
【チェックしたメールを削除する】 ってボタンを押したら削除されたりしますが、
アレってどういう仕組みになってるんでしょう。
各メールにそれぞれ削除ボタンがあるのなら自分でも作れるんですが、一括削除の
仕組みがわかりません
暇なかた、どなたか教えてください よろしくお願いします
0715nobodyさん2007/10/09(火) 23:48:00ID:???
>>714
まず↓嫁
http://www.tagindex.com/html_tag/form/input_checkbox.html

あとはPOSTされたデータ読めば分かるだろ
0716nobodyさん2007/10/09(火) 23:53:23ID:???
>>714
<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:???
勝手にURLデコードするのがうっとうしいよなPHP
0718nobodyさん2007/10/10(水) 01:04:56ID:???
>>715‐716
出来ました。ただ、登録したデータを一覧表示すると、 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:???
>>718
そんなもん、DBのテーブル設計による。

1ユーザ1レコードで格納するんならカンマで連結して1カラムに押し込み〜
なんてなるんだろうが、それだと検索しにくいし後々加工もしにくいから
「ユーザID,属性」みたいなテーブルにして、選択した数の分だけ
レコードを追加してやった方がいいんじゃないか?
その場合、連結なんてしないで数の分だけループしてinsert。
0720nobodyさん2007/10/10(水) 01:37:06ID:???
>>718
っていうか、なんで削除の話が登録の話になってんの?
0721nobodyさん2007/10/10(水) 01:53:52ID:???
>>719-720
どうもです。登録の方が削除より話がわかりやすいような気がして
登録の方で聞いてしまいました。 基本的な部分は同じだろう、と (すみません)

>その場合、連結なんてしないで数の分だけループしてinsert。
というのは
userName|shumi
-------------------
yamada|映画鑑賞
yamada|ドライブ

って形になるんでしょうか? 確かにこっちのほうがいいですねー
0722nobodyさん2007/10/10(水) 02:09:07ID:???
>>685
session_cache_limiter('private_no_expire')
でOK
0723nobodyさん2007/10/10(水) 02:09:52ID:???
>>721
>$_POST['example']の中に選択したやつが配列で入ってくる
                                                    ~~~~~~~~~~~~~~~~
って書いてあるんだからそれをそのまま表示すると型が表示されるのは普通
0724nobodyさん2007/10/10(水) 02:49:28ID:???
search.php?keyword=©
だと、htmlには©じゃなくてcと表示されてしまいます。
GETで©を取得してそのまま©と表示させるにはどうしたらいいでしょうか?
文字コードはUTF-8です。よろしくお願いします。
0725nobodyさん2007/10/10(水) 02:54:31ID:???
>>724
ID出して
07267242007/10/10(水) 03:00:00ID:P3ev0KiI
あ、すみません。
sageてました。
0727nobodyさん2007/10/10(水) 03:04:42ID:tzNR6m8r
© はあかんのか
0728nobodyさん2007/10/10(水) 03:05:47ID:tzNR6m8r
ところで、ここの人ってみんなID消してるけどなにか犯罪でもしてる人ばかりなの?
みんな???で気持ち悪いんだけど
0729nobodyさん2007/10/10(水) 03:10:52ID:???
>>728
2ch初心者乙
0730nobodyさん2007/10/10(水) 03:25:19ID:???
>>722
それです!ありがとうございました!!あんたスゴイ!
0731nobodyさん2007/10/10(水) 03:28:56ID:???
たまに詳しい人が現れるね。うれしい。
0732nobodyさん2007/10/10(水) 04:12:32ID:???
>>721
正規化について知っておくべし。メリットとデメリットも。
0733nobodyさん2007/10/10(水) 04:55:47ID:???
DBなんてFWに勝手にやらせればおk
0734nobodyさん2007/10/10(水) 05:36:39ID:???
>>733
お前の態度気に入らねから、教えねぇ。
07357332007/10/10(水) 05:40:36ID:???
別に教えてなくて結構です俺質問者じゃねえしw
まじでDBなんて覚える必要ないよ
FWが勝手にやってくれるからFWの使い方覚えたほうが数倍いい
0736nobodyさん2007/10/10(水) 06:04:03ID:???
まぁ、小規模なシステムはDBをどんな作り方しても大した問題ないし。
0737nobodyさん2007/10/10(水) 06:48:53ID:???
>>735
アマ乙。
FWの採用しているO/Rマッパが対応してない
クエリ投げる必要も結構ある
0738nobodyさん2007/10/10(水) 06:49:33ID:???
大規模なもんだとDB設計する人が設計するから
PGってあんま関係ないんだよな・・・・
小規模なもんはてきとーにDB設計しても問題ないし・・・・

>DBなんてFWに勝手にやらせればおk
って思ってる時点でしれてるが・・・
0739nobodyさん2007/10/10(水) 07:04:51ID:???
むしろデータ構造を的確に決めれればシステムは8割方できたようなもんだろ・・・
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:???
俺、(DBの仕事をどうやって firewall にさせるんだろ…?)
小一時間沈黙…(!! frameworkか…)

orz
0744nobodyさん2007/10/10(水) 08:25:34ID:???
FWはDBの設計は自分でやらないといけないからな
0745nobodyさん2007/10/10(水) 09:18:50ID:P3ev0KiI
データベースに保存するとき

1.POSTでkeywordを取得
$keyword = htmlspecialchars($_POST['keyword'],ENT_QUOTES,'UTF-8');

2.$keywordをDBに保存

これだけで大丈夫でしょうか?
と言うより普通こうですか?
0746nobodyさん2007/10/10(水) 09:26:09ID:???
>>745
ソースのあちらこちらに、1みたいなコードがあったら、汚すぎる。
FWでやれば全て解決できるよ。
0747nobodyさん2007/10/10(水) 09:27:28ID:???
>>745
普通、DBに保存するデータにhtmlspecialchars()なんてかけない。
0748nobodyさん2007/10/10(水) 09:28:28ID:???
>>747
出力する度にhtmlspecialcharsするのが面倒だからかけて入れてますw
0749nobodyさん2007/10/10(水) 09:30:05ID:???
>>748
DBの入出力の両方にhtmlspecialcharsするのが一番安全だけど。
0750nobodyさん2007/10/10(水) 09:30:20ID:???
きみんちのデータは画面表示以外には全く使わんのか
0751nobodyさん2007/10/10(水) 09:32:20ID:???
そらケースバイケースだろ、この人が htmlspecialcharsを使っている時点でHTMLに
出力する事を前提としていると考えるのが妥当。
0752nobodyさん2007/10/10(水) 09:33:21ID:???
DBへは生のデータを入れるべき
0753nobodyさん2007/10/10(水) 09:33:49ID:???
htmlspecialcharsの本質を理解しているのかと疑いたくなるレスだなぁ。
0754nobodyさん2007/10/10(水) 09:38:29ID:OYZiPU1d
>>752
横からすみません。私もDBへ生データを入れていますが、
クライアントから送信されたデータを何もせずに入れていることに少し不安があります。

入力値が半角英数であれば、半角英数チェックを掛けてから入れますが、
日本語も含まれるような場合だと、そのまま入れています。
何かチェックをかけるべきでしょうか?
システム予約語的なマズイ文字があると前に聞いたことがあるのですが・・・
0755nobodyさん2007/10/10(水) 09:38:37ID:???
>>752
'や"はどうやって生で入れるの?
0756nobodyさん2007/10/10(水) 09:44:17ID:???
DBのエスケープ入出力関係は一昔前に万能クラスを作ってから気にしてないな、
今は抽象化レイヤがトレンド?
0757nobodyさん2007/10/10(水) 09:48:50ID:???
データ量の増加よりもリスク回避の方が優先だと思うし何より出力する度にエスケープする
というのが効率良く思えないんだけどな。効率など考えない企業向けなら何処で何をしようが
関係ないだろうけどw。
0758nobodyさん2007/10/10(水) 09:51:28ID:???
DBに入れる以前の問題として、エスケープしないといけないようなものを
画面で入力可能にしているのが諸悪の根源だよ。
0759nobodyさん2007/10/10(水) 09:53:09ID:???
>>755
そういうのはエスケープして当然
それ以外は生で入れるべき
0760nobodyさん2007/10/10(水) 09:54:21ID:???
>>758
バカ?
0761nobodyさん2007/10/10(水) 09:54:56ID:???
生発言もわからん事はないけどそのぬるさが情報流出に繋がったケースも多いい。
完璧だと思い込んでいる奴が墓穴をほるケースだわ。
0762nobodyさん2007/10/10(水) 09:55:22ID:???
バレなきゃ、何しても構わんみたいな発想で共感はできんな。
0763nobodyさん2007/10/10(水) 09:55:44ID:cLvYq00J
みなさんPHPは秀丸とかEmとかテキストとかで手書きなの?
0764nobodyさん2007/10/10(水) 09:57:13ID:???
>>762
今時モラルなんて期待しちゃいかんよ。
0765nobodyさん2007/10/10(水) 09:58:50ID:???
エスケープもしないで生でDBに突っ込むってやつは、
100%ユーザーのIDやパスワードも生で入れるタイプ。
0766nobodyさん2007/10/10(水) 10:06:57ID:???
>>765
IDは生でパスワードは暗号化しているんだけど
IDも暗号化して入れたほうがいいの?
0767nobodyさん2007/10/10(水) 10:09:28ID:???
>>766
シングルクオート使ってるIDはエスケープするだろ?
誰も暗号化とは言ってないぞ?
0768nobodyさん2007/10/10(水) 10:12:03ID:???
IDにクォートを使わせている人なんているのか・・・
0769nobodyさん2007/10/10(水) 10:12:04ID:???
>>767
すまん、早とちりした
てか、IDとパスワードはエスケープしないで使える文字を限定しているわけだが
それでもエスケープって必要なのかな
正規表現でa-zA-Z0-9\-_で弾いてる
0770nobodyさん2007/10/10(水) 10:15:05ID:???
使える文字がa-zA-Z0-9\-_だけならエスケープする必要ないだろw
0771nobodyさん2007/10/10(水) 10:15:53ID:???
IDとパスワードは、情報流出のためにするものだろ。
エスケープの目的とは全然違う。
まぁ、エスケープもしないというやつはセキュリティーに無関心だから情報流出についても無関心だと思うが。
0772nobodyさん2007/10/10(水) 10:18:27ID:???
何が困るって引継ぎの時が一番困るんだよ
書き方がかわるだけで穴が出来てしまう
0773nobodyさん2007/10/10(水) 10:19:10ID:???
A.保存するときそのまま入れる場合
DBから取り出すときは毎回htmlspecialcharsをかける

B.保存するときhtmlspecialcharsかける場合
DBから取り出すときはそのまま出力できる

どっちが効率的かと言ったらBだと思うけど。
0774nobodyさん2007/10/10(水) 10:20:42ID:???
げ、もしかしてPEARのDBライブラリ使うときに
SQL文エスケープしないとまずい?
今まで自動でしてくれるもんだと思ってたんだが・・・
0775nobodyさん2007/10/10(水) 10:23:46ID:9QH/UxMS
mysql_escape_string
pg_escape_string
0776nobodyさん2007/10/10(水) 10:32:00ID:???
バックエンドにRDBMSを据えた電子掲示板で'や"をエスケープせんとその文字使えない
つか、文字列に'を含んだSQL投げた時点でRDBMSに蹴られるやん
詰まるところクォーテーション使いたいからキチンと処理しとるで
0777nobodyさん2007/10/10(水) 10:34:28ID:???
>>776
保存するときhtmlspecialcharsかけない人って
magic_quotes_gpc = Onにしてるのかな?
まあたしかにOnにしてると生データ入れられるな。
でもmagic_quotes_gpc = Offが推奨なんだよな。
0778nobodyさん2007/10/10(水) 10:41:00ID:???
>>777
いや、普通保存するときにかけるのはmysql/pg_escape_stringであって
htmlspecialchars使う人は表示以外にデータを使わないと最初から決めてる人。
magic_quotes関係ない。
0779nobodyさん2007/10/10(水) 10:42:31ID:???
htmlspecialcharsってHTMLの特殊文字をエスケープするヤツなんだから
HTMLを出力するときに掛けるのは当然。
DBに入れるときにはDBの特殊文字をエスケープするのが当然。
DBに入れるときにhtmlspecialchars使うのはおかしい。
たまたま上手くいってるってだけだ。

0780nobodyさん2007/10/10(水) 10:46:33ID:???
magic_quotes_gpc = Onにしててもバックスラッシュでエスケープした文字だけやろ
Don't → Don\'t こんな文字列もらってもRDBMSには突っ込めんよ?
少なくとも俺の使ってるRDBMSでは駄目
普通に手抜けるんだからhtmlspecialchars通しておけばいいんでないの?
RDBMSから生のデータ引っ張り出した時はガックリくるかもしれんけど
0781nobodyさん2007/10/10(水) 10:47:59ID:???
DBに入れるパスワードは暗号化じゃなくてハッシュ化だろ
暗号化っていうと復号できるみたいなニュアンスあるから誤解をまねく
>>758のいってることはごく自然だと思うんだけどな
SQLインジェクションにつながるものはバリデータではじくもしくはエスケープして入れる
XSSにつながるデータは直接いれて出力時にエスケープする
ていうのが定説だと思うんだけど
なんでもかんでもhtmlspecialcharsすればいいっていうわけではない気がする
0782nobodyさん2007/10/10(水) 10:54:00ID:???
>>779はhtmlspecialchars使うのはおかしいと言ってる
>>780はhtmlspecialchars使うのは正しいと言ってる
うーん・・・
0783nobodyさん2007/10/10(水) 10:55:20ID:???
>>782
場合によって使い分けろということで解決するんじゃね?
0784nobodyさん2007/10/10(水) 10:57:57ID:???
結局出力時に適切な形で出力できればいい
■ このスレッドは過去ログ倉庫に格納されています