【PHP】下らねぇ質問はここに書き込みやがれ 56
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2007/10/11(木) 17:55:41ID:uObe69hrPHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 55
http://pc11.2ch.net/test/read.cgi/php/1191058556/
◆質問する時の注意
・ sage進行(メール欄にsageと記入すること)「sage進行」とはスレを目立つ上部に上げないことによって、荒らしが発見できないようにすることです
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
・ 書き込むときには、「公式マニュアル、リファレンス本は読みました」と明記すること
(でないと、公式マニュアル読めと煽られます)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
・質問者が「公式マニュアル読んだ」と書いていないからといって、
公式マニュアルに書いてもいないのに、公式マニュアルよめと適当なことを言わないこと。
質問者は公式マニュアルを読んでいるかもしれない。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0787nobodyさん
2007/10/20(土) 21:23:14ID:???phpのソースってメンバとかメソッドにアクセス修飾子がついてないクラスをよく見かけるんだよ
Log4phpもそうだったような気がする
0791nobodyさん
2007/10/20(土) 21:31:28ID:???0794nobodyさん
2007/10/20(土) 21:36:23ID:???こんなんどうでしょうか?
function get_tsurisen($tonyu_kingaku, $konyu_kingaku) {
$tsurisen_maisu = 0;
$list = array(1000, 500, 100, 50, 10);
$tsuri = $tonyu_kingaku - $konyu_kingaku;
for ($i = 0; $i < count($list); ++$i) {
while ($tsuri >= $list[$i]) {
$tsurisen_maisu++;
$tsuri -= $list[$i];
}
}
return $tsurisen_maisu;
}
0797nobodyさん
2007/10/20(土) 21:43:03ID:???0798nobodyさん
2007/10/20(土) 21:44:02ID:???function get_tsurisen($tonyu_kingaku, $konyu_kingaku) {
$tsurisen_maisu = null;
$list = array(1000, 500, 100, 50, 10);
$tsuri = $tonyu_kingaku - $konyu_kingaku;
for ($i = 0; $i < count($list); ++$i) {
$tsurisen_maisu[$list[$i]] = 0;
while ($tsuri >= $list[$i]) {
$tsurisen_maisu[$list[$i]]++;
$tsuri -= $list[$i];
}
}
return $tsurisen_maisu;
}
0800nobodyさん
2007/10/20(土) 21:50:48ID:???あとは$tsuri <0とかチェックをいれたら終わりかな
while文をつかわないで>>730にある商と剰余に置き換えたほうがすっきりする
あと小さいことだけど、毎回count($list)呼び出されるのは嫌なので
$list_cnt = count($list);
for ($i = 0; $i < $list_cnt; ++$i) {
にする
0801nobodyさん
2007/10/20(土) 22:00:07ID:???0802nobodyさん
2007/10/20(土) 22:01:10ID:???0で返すのか、それともNULL、それとも投入金額分だけ返すのか?
0804nobodyさん
2007/10/20(土) 22:04:09ID:???投入された金の妥当性とか
買える金額が範囲内なのかを判断するのって変じゃないか?
それは外部ですべきだと思うんだが
もし変な値でつり銭出そうとするなら
それは例外処理にすべきと思う
0806nobodyさん
2007/10/20(土) 22:07:35ID:???0807nobodyさん
2007/10/20(土) 22:08:23ID:???外部からメソッドに入ってくる値の妥当性を検査するのは、そのメソッドの仕事
そういう検査していない値を信用して使うのは危ない
エラーを戻り値で対応するのかエラーで対応するのかはプログラミングの規約とかに依る
0809nobodyさん
2007/10/20(土) 22:09:54ID:???数値を返すところで、0で返すのはまずいだろ。
それじゃ、正常処理か異常処理か分からなくなる。つまり、隠れたバグの原因になる。
0812nobodyさん
2007/10/20(土) 22:17:13ID:???f()==falseでは確かにまずいので、0とfalseを厳密に区別するために
f()===falseにするしかないな
(f()は数値を返すメソッド)
http://php.benscom.com/manual/ja/types.comparisons.php
0813nobodyさん
2007/10/20(土) 22:23:46ID:???・購入金額は0円以上
・最低単位は10円であり1円単位の端数は無い
・購入金額は投入金額と等しいかそれ以下
購入キャンセルによる返金は親が面倒見る
0815nobodyさん
2007/10/20(土) 23:40:56ID:???定義はあえて緩くしてるんだろ
その方が実力を測れるじゃねーか
0817sage
2007/10/21(日) 00:43:39ID:???phpの初期設定ファイルであるpnp.iniが見つかりません。
このファイルは、無い場合は自分で作るのでしょうか?
自分で作る場合は、インストールしたディレクトリと同じ場所におけばよいのでしょうか?
環境情報は、以下の通りです。
・OSは、5.4
・PHPは、5.2
よろしくお願いししす。
0818nobodyさん
2007/10/21(日) 01:03:52ID:???1.意見をPOSTで送る
2.確認画面で確認
3.それから書込
2.の時点でhtmlspecialchars を入れており確認画面のソースは
<input type="hidden" name="contents" value="&lt;img src=&quot;&quot;&gt;">
(全角にしております)
でここからが問題。
こいつをまた送信すると$_POST['contents']の中身が元の「<img src="">」に
なっちゃうのはなんででしょうか?
$_POST['contents']="&lt;img src=&quot;&quot;&gt;" にならないの??
0819nobodyさん
2007/10/21(日) 01:10:23ID:???<? phpinfo(); ?> でファイル作りブラウザからでもコマンドライン実行でも見れば載ってない?
大体自分でOSインスコしたならfindとか使えないのか?
0820nobodyさん
2007/10/21(日) 01:19:58ID:???再送信で何故元に戻るかは知らないけど確認画面にhidden入れない方がいいと思う。
確認画面は表示用のみにして、送信内容(1の意見)自体はセッション関数に入れて3でそれを書き込んだ方がいい
0821nobodyさん
2007/10/21(日) 01:34:05ID:???慣れないOS使うからだよ
デフォルトのファイル名はphp.ini-dist
これをcpしてphp.iniにリネームしたのを同じ場所に置く
locatedb更新して検索してください
0823nobodyさん
2007/10/21(日) 03:47:36ID:???0824818
2007/10/21(日) 03:54:49ID:???$strForm = <<<EOF
<form method=POST action={$_SERVER['PHP_SELF']}>
{$_POST['hoge']}
<input type=submit value="ok">
<input type=hidden name=hoge value="&lt;"> ←掲示板対策で&大文字 &lt;=<
</form>
EOF;
echo $strForm;
これを動かすと「&lt;」ではなく「<」が表示された。
これ以上はスレ違いの気がするので最後に質問。
特殊文字を HTMLエンティティした場合、それを送信しちゃうと自動的に元に戻るってこと?
0825nobodyさん
2007/10/21(日) 03:57:50ID:???0826nobodyさん
2007/10/21(日) 04:00:43ID:???0827818
2007/10/21(日) 04:06:00ID:???>>なんのためにエンティティ化するんだ
ウハ! もっともなご意見(^^;
確認画面ですので入力したデータがそのまま表示されてもいい気がするんですが。
でも2ちゃんの確認画面もちゃんとエンティティ化してますよね。
そこらへんどうなんでしょ?
0828nobodyさん
2007/10/21(日) 04:14:05ID:???確認画面に入力したデータを書き込むんだ。
0829nobodyさん
2007/10/21(日) 04:49:54ID:???portsからぶち込んだ場合は/usr/local/etcにphp.ini-recommendedとphp.ini-distがある
いづれかをphp.iniとしてコピー
野良makeならphpのマニュアルに沿って解凍ディレクトリ下のphp.ini-recommendedか
php.ini-distをphp.iniとして/usr/local/libにコピー
推奨はphp.ini-recommendedなんだけどエラーメッセージ吐かなかったりと不自由するかも
しれないのでテスト環境ではphp.ini-distを利用するのがいいかも
0830nobodyさん
2007/10/21(日) 09:59:43ID:???2chで書き込み試したら確かにエンティティ化してhidden使ってるね
セッション使わないのは鯖負荷軽減のため?
ただ普通は、
ユーザが入力(最初)
↓
入力データをセッション変数へ保存
表示用にエンティティ化してHTML出力
↓
ユーザが確認し書き込みボタン押す
↓
セッション変数に保存したものをファイルやDBへ保存
(勿論DB用にエスケープする)
hiddenだろうがテキストエリアに入った文字列だろうがHTML出力する分はすべてHTMLエンティティするのは当然。
問題視してるのは書き込むデータをhiddenで送り返してまたそれを受け取りDB登録しようとしてる点。
0831nobodyさん
2007/10/21(日) 10:17:27ID:???0832nobodyさん
2007/10/21(日) 10:23:29ID:???0833nobodyさん
2007/10/21(日) 10:38:03ID:???0834nobodyさん
2007/10/21(日) 12:10:29ID:k0cThTxSsakuraサーバーのPHPがPHP 4.2.2で
php 5.2.4ではclass内でのrequire_once等の使用ができるのに
php 4.2.2だとつかえないみたいなんですけど
これはそういうものなんですか?
includeでも同じでした;;
なにか他に取り込む方法ってないですか?
0835nobodyさん
2007/10/21(日) 12:19:55ID:???0836PHPでパスワード付きExcelファイルを読み込みたい
2007/10/21(日) 13:11:20ID:SzVd/yWpそのマシンにはExcelがインストールされておらず、
Excelファイルには、Excelのパスワードがかかっています。
で、そのExcelファイルをバッチ処理か何かで読み込みたいと考えています。
Perlだと、Win32::OLEかSpreadsheet::ParseExcelを使って読み込むそうですが、
前者はExcelがインストールされていないtダメですし、
後者はパスワードで保護されたExcelには対応していないんだそうです。
そこで、PHPを使おうと思っています。
ここで質問です。
調べたところによると、PHPでは、PHPExcelを使うと思うのですが、
パスワード付きのExcelは読み込めるのでしょうか?
あるいは、ほかに簡単に読み込める方法があれば、教えてください。
よろしくお願いします。
0838nobodyさん
2007/10/21(日) 15:16:08ID:???0841nobodyさん
2007/10/21(日) 17:41:02ID:KqyRsNL6住所録みたいなツールを作って、データを登録するとします。
で、DB側ではid(自動インクリメント)を持たせてるとして、
たった今登録したデータのidを拾いたいときってどうしたらいいんですか?
phpから実行するsql文で最新のデータのidを拾えばいいと思ったんですが、
複数人から同じテーブルに次々書き込みがあった場合、自分の書き込み後に
他人が登録したデータを拾ってしまうということはないでしょうか?
0844836
2007/10/21(日) 18:38:11ID:???0846nobodyさん
2007/10/21(日) 18:59:57ID:???「送信しました(2ちゃんだと『書き込みました』)」というページを表示するじゃないですか。
この際にブラウザーで戻れなくする方法ってないですかね?
何がしたいかというと二重送信を防ぎたいわけですが
チェック用のファイルを用意して防ぐようにもします。
ですがブラウザーそのものが戻らないようにできないもんですかね?
header("Location :http://example.com")でいけるかと思ったんですがダメでした…
アドバイスを。
0847nobodyさん
2007/10/21(日) 19:05:00ID:???0848nobodyさん
2007/10/21(日) 19:07:21ID:???>二重送信を防ぎたい
ぐぐればやり方はいくつか載ってるよ
ただクライアント側で何とかしようとするのは感心しない
やるならサーバ側
このへんの理由もぐぐれば書いてある
0849nobodyさん
2007/10/21(日) 19:13:54ID:???セッションに前いたページを覚えさせておいて
戻ったページで正しい遷移でなければ、前いたページにリダイレクトとか。
0851846
2007/10/21(日) 19:40:55ID:???>ただクライアント側で何とかしようとするのは感心しない
>やるならサーバ側
そそ、書くの忘れていた。
クライアント側、たとえばJavaScriptとかでするんじゃなくて
サーバー側で処理をしたいんですよね。
「PHP 二重送信 防止」ぐらいでググッてるんですが
『クライアントサイドのスクリプトで二重送信を防止するのは難しい』
とか言われている俺ガイルww
0852846
2007/10/21(日) 19:45:54ID:???回答ありがとうございました。
0853846
2007/10/21(日) 19:51:46ID:???ちょ!必死に探しているのに詐称すんのやめて(つд`;)
つーか解決法がみつからない。
(ページの間に別のphpファイルを挟んで実行・header処理している人がいて感動)
ここって前まで上げてID表示していなかったっけ?
荒らされたんかな?
0854nobodyさん
2007/10/21(日) 19:53:39ID:???0855nobodyさん
2007/10/21(日) 19:58:07ID:???0857846
2007/10/21(日) 20:34:37ID:???ちょっと待て!お前誰だよw
まぁ解決方法が見つからないのは本当なんだけどさ…。
もう少しググッてみたいと思います!
偽者が出てきたのでもう書き込まないようにします。迷惑かけてごめんなさい!
0858846
2007/10/21(日) 20:36:02ID:???0860846
2007/10/21(日) 20:41:49ID:???どうすれば良いですか?
0861846
2007/10/21(日) 20:41:56ID:???0862nobodyさん
2007/10/21(日) 20:45:25ID:???0863nobodyさん
2007/10/21(日) 20:58:29ID:???0864nobodyさん
2007/10/21(日) 21:07:02ID:???0865nobodyさん
2007/10/21(日) 21:10:16ID:???ブラウザーのボタン制御は無理だろ?
0866nobodyさん
2007/10/21(日) 21:12:26ID:???脱線し過ぎるのはアレだけど
0867836
2007/10/21(日) 21:26:20ID:SzVd/yWp>>839
OpenOfficeでパス付きExcelが開けるのは知っていますが、
手で開くのではく、自動処理(バッチ処理等)で読み込みたいと考えています。
OOoでそういう使い方ができるのでしょうか?
0868nobodyさん
2007/10/21(日) 21:43:50ID:???送信元画面をPOSTで生成しとくとか。
いっそ送信元画面にJavaScript仕込んどいて送信完了時に
発行したCookieを発見したら強制Locationかけちゃうとかw
0870nobodyさん
2007/10/21(日) 22:25:47ID:MevNDFNfPHPの日付関数はunixタイムスタンプを使うので
2038年?以降のカレンダーは表示できなくなります。
unixタイムスタンプ問題を回避してカレンダーを作るには
どうすればいいですか?
0872nobodyさん
2007/10/21(日) 22:47:48ID:???まあ送信とか戻るのはユーザが行うことだからWebサーバで禁止できることじゃないとおもうけど。
期限切れで表示できないのとかあるね。
どうやっているのか知らないけど。
送信してしまった対策として一定時間内のIPや内容のハッシュでも記録しておいて
同じのがあったら無視するとか。
しつこい書き込みはIPを2chみたいにバーボンにするとか。
0873nobodyさん
2007/10/21(日) 23:52:14ID:mLa5/CiAどんな流れで作ればいいんでしょ。
0874nobodyさん
2007/10/21(日) 23:55:29ID:???↓
RSS出力
0877nobodyさん
2007/10/22(月) 00:11:31ID:???0878nobodyさん
2007/10/22(月) 00:17:27ID:???そういう直接的な注意は不粋というものだ
どんな質問にも答えることはできる
質問者が気づくかどうかは知らんけど
0880nobodyさん
2007/10/22(月) 01:31:08ID:???0881nobodyさん
2007/10/22(月) 01:34:58ID:???0882nobodyさん
2007/10/22(月) 01:41:18ID:b3zF2Ui7■ このスレッドは過去ログ倉庫に格納されています