【PHP】下らねぇ質問はここに書き込みやがれ 43
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2007/04/01(日) 04:21:50ID:VGqlLhlDPHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 41
http://pc11.2ch.net/test/read.cgi/php/1173163186/
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ http://pc10.2ch.net/php/subback.html
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで http://pc10.2ch.net/db/subback.html
0772499
2007/04/09(月) 22:24:02ID:???なんか検索して一見目にここから最新のfixもってってちょって書いてあったんで落としてビルドしたけどやっぱいり同じエラーで止まったっす
英語読めてないだけかもしれませんが
0773762
2007/04/09(月) 22:24:26ID:LuOmRtTQ<input type=hidden name=name2 value="&lt;img&gt;">
0775nobodyさん
2007/04/09(月) 22:27:20ID:AitdzCc4質問の内容がまじで意味不明だが
ページを開くと一度だけプログラムが実行され
実行終了後には変数が全て空っぽになる(一部例外は除く
0777nobodyさん
2007/04/09(月) 22:33:49ID:AitdzCc4$post = $_POST;
"SELECT * FROM test WHERE id='$post'"
より
"SELECT * FROM test WHERE id='"+$post+"'"
のほうがいいんですかね?
$postの値が「' 適当なSQL文'」だったらまずいですよね
もしその場合は下記の方も同じ動作なのでしょうか?
0778nobodyさん
2007/04/09(月) 22:38:10ID:???0779nobodyさん
2007/04/09(月) 22:41:03ID:???そんなこと気にするくらいなら
適当なDBインターフェースを利用して
プレースフォルダを使えばいい
pear::DB の場合
$params = array($post);
$sql = "SELECT * FROM test WHEAR id=?";
$ret = $conn->query($sql, $params);
0780nobodyさん
2007/04/09(月) 22:44:42ID:???+演算子じゃインジェクションの前にとんでもないことになるけど。
クォートするかPDOStatement->bindValue()でも使おうぜ…。
0781nobodyさん
2007/04/09(月) 22:45:45ID:???「セッションを使うためにsidをcookieに持たせる」ってのはデフォルトの挙動であって
use_trans_sidとかでGETで送らせてやればCookie使えなくてもセッション自体は使えるよ
>>769
ソースに書かれた文字列の評価ってプロセスがあるんだよ
何らかの文字列を > そのものとして扱えないと > を入れる方法がないでしょ?
0784nobodyさん
2007/04/09(月) 23:53:47ID:R/Jf3MPV完璧でした。どうもありがとう御座いました!
0785nobodyさん
2007/04/09(月) 23:59:00ID:???やりたいことはクッキーの削除とDB(トランザクションの処理はしています)への書き込みで、重複登録を防ぐ為にクッキーが無ければDBへ書き込まないようにしています。
普通に処理をするPGへ遷移する場合はクッキーも削除され、DBへ1件書き込まれるだけですが、F5を連打するとDBに1件書き込まれますがクッキーが消えません。。
また、処理の最後で$_COOKIEにarrayを入れるとクッキーとDBが削除及び登録されたりされなかったりします。
あと、setcookieで削除する所で戻り値がとれるまでループさせてやると、連打した数だけDBに登録されてしまいます。クッキーは削除されています。
何かヒントみたいなもの頂けると嬉しいです。。
お手数お掛しますがよろしくお願い致します。
0786785
2007/04/10(火) 00:01:49ID:???環境はPHP4.3.0 apache2 windowsXPです。
よろしくお願い致します。。
0787nobodyさん
2007/04/10(火) 00:53:06ID:LOxXZREL切る部分にURLやらメールアドレスやら携帯絵文字が入らないようにして、
2バイト文字の区切りで切れるようにして、
なんてやってると正規表現やら条件分岐使いまくりなんだけど
他でもそういう風にやってるのかな?高々文区切るだけで
もう規定数の文字数で問答無用にぶった切ってもいいような気がしてきた
0788nobodyさん
2007/04/10(火) 01:28:44ID:???>もう規定数の文字数で問答無用にぶった切ってもいいような気がしてきた
なんでこうしないの?
見た目で考えても 「>>続きを見る」 の方が視認性高いじゃん
0789nobodyさん
2007/04/10(火) 01:46:43ID:???エロゲスレに誤爆した
確かマルチバイト系の関数で指定文字で切ってくれる関数があったぞ
よく覚えてないけど省略するときの文字も指定できたはず
0790nobodyさん
2007/04/10(火) 01:51:40ID:???foreachでまわしてたので自動的にカンマがついてたのに気づきませんでした。
現在は問題なく動きます。ありがとうございます。
0792nobodyさん
2007/04/10(火) 02:18:52ID:???重複登録を防ぎたいなら、INSERTで失敗させるようにするとか、トランザクション使うとかすればいい。
setcookieでクッキーを削除したつもりでも、ブラウザがそのレスポンスを受け取るまでは何度でもクッキー送ってくるよ。
クッキーは排他処理とかに使える道具じゃない。
0793nobodyさん
2007/04/10(火) 02:26:58ID:4NI9RXKe?
0795nobodyさん
2007/04/10(火) 04:07:44ID:???0797nobodyさん
2007/04/10(火) 08:40:15ID:???>>789
mb_strimwidth だね。(誰かこの関数名の単語の区切りを教えて)
でもメールアドレスの途中で切らないとかそういった機能はないから
たとえば「split系関数で切りたい文字列と切りたくない文字列が交互に並ぶ配列にして
ループで順に連結して規定バイト数を超えたかどうか見つつ
添え字 % 2 の戻り値でmb_strimwidth をかけるかどうか判断する」といったロジックが必要。
0798nobodyさん
2007/04/10(火) 08:46:43ID:???こういう場合は、
if(処理終了) {header("Location:....");}でOK。
強制的に飛ばす(リダイレクトする)のがいい。
0799nobodyさん
2007/04/10(火) 08:56:56ID:???>mb_strimwidth だね。(誰かこの関数名の単語の区切りを教えて)
エス トリム ウィドゥス かな?
で本題
mb_strimwidth(接続文字空)でいったん切ってから、正規表現で末尾の連続する半角英数記号を削除
で どう?
0800nobodyさん
2007/04/10(火) 08:58:02ID:???そんなに厳密じゃなくてもいいわけでしょ?
「ひらがながあれば、ある範囲で切る」だけを唯一の区切り条件にすればいいじゃん。
漢文サイトじゃないだろうから。
0803nobodyさん
2007/04/10(火) 10:00:04ID:???--with-imapにソースを解凍してmakeしたディレクトリ指定したらコンパイルまで通りました
パスが違うのかコピーするファイルが足りないのか?
0804nobodyさん
2007/04/10(火) 10:33:14ID:Y95uap3IPearDBクラスを、自分が作ったクラスの中で使うとき、
extendsするのか、ただ単に使う場所でinclude_once('DB.php')すればいいのか
わかりません。
どちらにすればいいのでしょうか?
0805nobodyさん
2007/04/10(火) 10:58:06ID:???0806nobodyさん
2007/04/10(火) 11:06:49ID:Y95uap3I0807nobodyさん
2007/04/10(火) 11:34:59ID:???0808虚弱PHP
2007/04/10(火) 11:35:34ID:???用途によるとしか…。
>>805は言葉は悪いけど正論だと思うなぁ。
オブジェクト指向はJavaでやるのが一番だと思う。
いや、SmalltalkとかRubyの方がいいのかもしれんけど、
俺はまともにやったことないからわからん。
0809nobodyさん
2007/04/10(火) 11:35:59ID:???0810虚弱PHP
2007/04/10(火) 11:40:23ID:???なんか根本的に間違っている気がする。
synchronizedってスレッドの処理だから今回のような件だと関係ないし。
俺だったら、CookieのかわりにSession変数使う。
0811虚弱PHP
2007/04/10(火) 11:45:46ID:???DBによってエスケープ方法が違うけど、
mysqlのネイティブ関数としてはmysql_real_escape_stringとかがある。
PDOならプリペアドステートメント使えば解決。
0812nobodyさん
2007/04/10(火) 12:05:49ID:???エスケープしとくべきですか?
0813nobodyさん
2007/04/10(火) 12:22:30ID:FUjP3ASn0814nobodyさん
2007/04/10(火) 12:27:36ID:FUjP3ASn0815虚弱PHP
2007/04/10(火) 12:59:06ID:???"決められたUPDATE文"にDBから引っ張ってきた値が入っている場合は、
セカンドオーダーSQLインジェクションが発生する恐れがあるので必ずエスケープ。
平文でコードに直書きしている場合は問題ない…
けれども、人間は間違いをおかすものなので変数は全部エスケープが正解。
0817nobodyさん
2007/04/10(火) 13:04:00ID:???そんなものです
>>814
ないと思う
ただし、右辺値で使う場合は警告がでる
$foo = $this->bar;
とかね
0818nobodyさん
2007/04/10(火) 14:07:55ID:???ttp://labs.cybozu.co.jp/cbl_activerecord/
このO/Rマッピングライブラリを使って、DBから取得してオブジェクトに入れるところまではできたのですが、
取得した値を使いたい場合にいちいち
$var['name'] = $todo->name;
$var['title'] = $todo->title;
と指定するのではなく、まとめて$varの配列に置き換えたいのですが
どうすれば良いのでしょうか?
0819nobodyさん
2007/04/10(火) 14:15:35ID:???何のためのO/Rマッパだよ、、、そのまま使えばといいんじゃないかと
0820nobodyさん
2007/04/10(火) 14:16:20ID:???hogeFunction() or die ('hogeFunction失敗');
という感じでいいのでしょうか?
それとも
if (hogeFunction()) {
} else {
die('失敗');
}
とかくのがベターなんでしょうか?
0821nobodyさん
2007/04/10(火) 14:19:38ID:???<?php
session_start();
echo 'Welcome to page #1';
$_SESSION['favcolor'] = 'green';
echo '<br /><a href="page2.php">page 2</a>';
?>
を実行すると
hrefに?PHPSESSID=xxxx...が追加されるのはなぜ?
クッキーの読み込みをしていないのになぜブラウザの設定が分かるの?
(ブラウザをCOOKIE OKにしておくと?PHPSESSID=xxxx...は追加されない)
つか 初めての接続でブラウザのCOOKIE設定を知る方法があるの?
0823nobodyさん
2007/04/10(火) 14:28:49ID:mS0KEdcp!
0825818
2007/04/10(火) 14:49:13ID:???0826820
2007/04/10(火) 15:20:17ID:???例外ってcatchとかtryっていうやつですよね?
使ったことないのでよくわからないですが、
頑張って使ってみます。
0827nobodyさん
2007/04/10(火) 15:30:11ID:???http://pc11.2ch.net/test/read.cgi/php/1017456911/974
0828nobodyさん
2007/04/10(火) 15:54:27ID:???0829nobodyさん
2007/04/10(火) 16:07:31ID:qz4cFwH4リクエストパラメータはSJISで渡ってきますよね?
1)一括してEUC-JP変換
2)処理
3)一括してSJISに変換
4)表示
とやるか、
処理する段階で逐次変換処理を入れるか、
どちらが適当でしょうか?
0830nobodyさん
2007/04/10(火) 16:08:40ID:S/LWkosg0831830
2007/04/10(火) 16:13:03ID:???0834nobodyさん
2007/04/10(火) 17:48:44ID:???0835nobodyさん
2007/04/10(火) 18:08:15ID:???0836nobodyさん
2007/04/10(火) 18:26:31ID:GbKKaQIE0837nobodyさん
2007/04/10(火) 18:28:26ID:???0838nobodyさん
2007/04/10(火) 18:52:01ID:???(スクリプトが全て終了するのに最長3分ほどかかります)
別ファイルで時間を記録したテキストを作成して、
そこから現在時刻とひいて5分以上だったら、
アクセスしてきた人に更新してもらおうと思ったのですが、
上記の通り最長3分間ブラウザが無応答状態になるので、迷惑ですよね。
ポップアップで裏でやるなんてのも迷惑ですし、
もっと他にいい方法ありませんでしょうか?
0841nobodyさん
2007/04/10(火) 19:04:30ID:???0842nobodyさん
2007/04/10(火) 19:10:11ID:???おーこんな素晴らしいサービスがあったのですね。
知りませんでした。
これで解決しそうです。
本当にどうもありがとうございました。
0843nobodyさん
2007/04/10(火) 19:19:17ID:???4丁目に引っ越してきたPHP君。
大いなる進化をとげるたびにのファンを大切にしないところが玉に傷。
【Perl】
CGI全盛期にもっとも活躍した三丁目のPerlさん。
時代とともに年をとるのか、PHPにも活躍の場を与えるえらいひと。
【Java】
いざというとき頼れるJava兄さん。
大きな事件は「いいから俺にまかせてみろ!」と豪腕な構えだ。
【HTML】
すべてはここからはじまった伝説の男HTML。
戦いの場によっては、スーパーサイヤ人の限界を超えたXHTMLに変身して活躍していると噂される。
0844nobodyさん
2007/04/10(火) 19:25:57ID:???,,-‐'": : : : : : : : : : `ヽ
/: : : : : : : ,,__ : : : : : : \
r': ,、,,.-─''"゛ ミ : : : : : : : 'i、
`/ / ミ_ : : : : : : :,、}
i l _,,..-‐^‐-、 `゙i: : : /l.l|
i、}‐-、 ヽ;;/,rェッ;;'" ゙ー' 9iリ!
| ',tテi ヽ='" ゞ t'
| 'i"´| , -、 ヽ-、,,___
| '}、 !,,tu'" ヽ、 ,l: ‐-‐" }: : : : :
} lヽ、__,,,.-‐ヽ /: : : : : : /|: : : : :
,r/ /: : :ヽー‐' ノ: : : : : : : / .|: : : : :
/: \ /: : : : : 丶,, -''_: : : : : : / |: : : : :
/: : : : :ヽ/: : : : : : : ヾ''‐--‐ヽ |: : : : :
/: : : : : : : : : : : : : : : : : : ヽ\: : / |: : : : :
ビップ=デ=ヤレー[Vuip De Yale]
(1955〜 フランス)
0845nobodyさん
2007/04/10(火) 19:57:30ID:daN1ASwgMySQLのバージョンは5.0.22なんだけど、PHP5.1.6のPDOはサポートしてる?
教えてくれ。
0846nobodyさん
2007/04/10(火) 19:58:46ID:???|(a)別のHTMLのフォームからのPOST
↓
+----------------+ 実行 +----------------+
| 親モジュール.php |------->| 子モジュール.php |
+----------------+ +----------------+
↑ |
└−−−−−−−−−−−┘
(b) 親モジュールが生成するHTMLに結果を渡したい
(a)のPOSTで渡ってきたフォームのデータを、親モジュールでたとえば
$user_id = $_POST['USER_ID']
として取って、$user_idをrequire_onceで子モジュールに渡し、子モジュールではDBからuser情報をselectします。
子モジュール内には、HTMLを出力するような処理はなく、単純にDBからのselectのみです。
次に、select結果を変数に入れ、(b)のように親モジュールが生成する
HTML上のフォームに返したいのですが、そもそものフォームへの返し方がわかりません。
希望する処理の流れを整理すると。
(1) 静的なHTMLファイルのフォームから親モジュールにPOST
(2) 親モジュールはPOSTされた情報を使って子モジュールを実行し子モジュール内の変数に結果を代入
(3) 子モジュール内の変数にセットされた結果を親モジュールが生成するHTML内フォーム(HIDDEN属性など)にセット
(4) このタイミングで、親モジュールのHTMLが出力される
という処理をやりたいと思っていますが、
どのような方法を使えばよいか、ヒントだけでもご教示いただきたく。
現状、(2)までは出来ていて、(3)の部分で行き詰まっているところです。
0847846
2007/04/10(火) 19:59:55ID:???>$user_idをrequire_onceで子モジュールに渡し、
は、
$user_idをrequire_onceで実行した子モジュールに渡し、
という意味です。
0848nobodyさん
2007/04/10(火) 20:17:38ID:???ここが意味わかんないです><
0849nobodyさん
2007/04/10(火) 20:20:17ID:???0850虚弱PHP
2007/04/10(火) 20:20:37ID:???なにに躓いているのか分からない…。
俺だったら親がResultオブジェクトを用意して子に渡し、
子はResultオブジェクトに値を設定してリターン。
0851nobodyさん
2007/04/10(火) 20:21:48ID:???普通にDBから取得した値を変数に代入するなりすればいいだけじゃないかと
0852846
2007/04/10(火) 20:22:04ID:???わかりにくくてすみません。
まだPHPを初めて数日なものでして。。。(´・ω・`)
HTMLを生成しないPHPモジュール内の変数の内容を、
別のPHPモジュールが生成するHTMLのフォームに
渡す方法を知りたい、という感じです。
0853nobodyさん
2007/04/10(火) 20:22:43ID:???http://pc11.2ch.net/test/read.cgi/hp/1175593499/319
0855nobodyさん
2007/04/10(火) 20:26:22ID:???requie_onceしているだけならそのままそれが使えます
>>850の言ってるみたいにその小モジュールというのが
オブジェクト群とかでそれに渡しているのならそれを返せば良いだけ
0856846
2007/04/10(火) 20:32:26ID:???アドバイスありがとうございます。
ソースが会社なもので、今手元にありません。
戴いたアドバイスを元に、明日頑張ってみます。
あと、ソースを支障ない範囲に加工して明日はらせていただきます。
0857nobodyさん
2007/04/10(火) 21:38:43ID:???0858nobodyさん
2007/04/10(火) 21:40:29ID:???無駄な心配しなくていいよ846君
0859nobodyさん
2007/04/10(火) 21:42:08ID:???0860846
2007/04/10(火) 21:46:19ID:???0861nobodyさん
2007/04/10(火) 21:47:05ID:???0862nobodyさん
2007/04/10(火) 21:49:02ID:???0863nobodyさん
2007/04/10(火) 21:56:44ID:???0864nobodyさん
2007/04/10(火) 22:06:22ID:???0865846
2007/04/10(火) 22:10:47ID:???すみません。
いえ、パクられるなんてこれっぽっちも思ってません。
ただ、作ってるソースをそのまま貼ったのが会社にバレると、
こんなものでも面倒になるので、ということで。。。
>>860
別に私をカタるのは構いませんが、初心者おちょくるのは楽しいですか?
0866nobodyさん
2007/04/10(火) 22:12:12ID:???0867nobodyさん
2007/04/10(火) 22:16:03ID:???0868846
2007/04/10(火) 22:23:24ID:???トリップってやつを付ければいいんでしょう?
sage進行かと思って、ずっとsageをメル欄に入れてました。
トリップの付け方、勉強してきます。。。。
0869nobodyさん
2007/04/10(火) 22:28:51ID:???0871nobodyさん
2007/04/10(火) 22:36:53ID:???sageは自演隠しのための機能ですw
■ このスレッドは過去ログ倉庫に格納されています