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

【PHP】下らねぇ質問はID出して書き込みやがれ 127

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2013/03/19(火) 22:13:49.76ID:???
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 126
http://kohada.2ch.net/test/read.cgi/php/1359808868/

◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】

◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)

◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0172nobodyさん2013/03/26(火) 20:55:37.72ID:???
>>166
よくみたら無限ループでワロタ
0173nobodyさん2013/03/26(火) 21:07:53.64ID:???
>>171
はぁ?なにこいつ
最初出てなかっただろうが

万引きで捕まってから
お金払えばいいんでしょ!とか逆ギレするDQNと同じ精神構造
>>166共々消えろ
0174nobodyさん2013/03/26(火) 21:18:50.60ID:???
>>166はどう見てもマジレスじゃない
お前らアホか
0175nobodyさん2013/03/26(火) 21:23:41.80ID:???
>>174
いったじゃん。回答者でも質問者でもない人が馬鹿だって
0176nobodyさん2013/03/26(火) 21:26:02.46ID:???
>>166
PHPじゃないじゃん
0177nobodyさん2013/03/26(火) 21:36:48.57ID:???
>>169
ネタにマジレス…恥かしいよ…
0178nobodyさん2013/03/26(火) 21:41:24.07ID:p9pFyvrs
ぼくのために争わないで
みんなで仲良くPHPしましょう
0179nobodyさん2013/03/26(火) 21:44:07.30ID:???
なんでこんなに人気なの?
0180nobodyさん2013/03/26(火) 21:52:43.45ID:kZMtE//2
>>179
初めてやったのがphpで、それで事足りてるからほかの言語をやるきになれない...
サーバサイドで使ってるのはPHPだけだと思う。
MySQLとの連携とかはあるけど。
0181nobodyさん2013/03/26(火) 21:59:36.70ID:???
>>179
http://www.youtube.com/watch?v=VBm5m1-Eonw
0182nobodyさん2013/03/26(火) 22:09:43.32ID:???
>>179
お手軽にイオナズン唱えられるかんじ
0183nobodyさん2013/03/26(火) 22:15:55.27ID:kZMtE//2
>>182
フレームワークあれば開発速度ものすごい上がるしな。
0184nobodyさん2013/03/27(水) 04:49:18.79ID:???
<?php
echo "こんにちは";
?>

として、test.phpを保存しても、
ブラウザで読み込むとそのまま出てしまうんですが、コンパイル的なのが必要なんですか?
0185nobodyさん2013/03/27(水) 05:07:28.83ID:???
サーバー=PHPとHTMを解釈する環境。
0186nobodyさん2013/03/27(水) 07:44:23.93ID:???
>>184
その test.php はどこに保存されてて、ブラウザはどうやって開いているのかな?

ローカルに保存してローカルで開いたらそうなるけど。
ブラウザは PHP解釈しないから。

php解釈するモジュールを組み込める Apache などの Webサーバーにアップロードしておくか、
phpをcgiで実行できるようにWebサーバーに設定して同じくアップロードする。

そんでブラウザから Webサーバーを通じてアップロードしたしたファイルにアクセス。

というのがニワカの俺の知識。
0187nobodyさん2013/03/27(水) 09:02:47.30ID:???
test.php.txtになってるってオチだろ
0188nobodyさん2013/03/27(水) 10:09:51.76ID:???
>>187
そんなミスするのはお前だけだ
0189nobodyさん2013/03/27(水) 10:16:02.44ID:KYdi+aYH
PHPファイルのincludeができる範囲ってどんなもんなんでしょうか?
ドメインが違っても出来てしまいますか?
0190nobodyさん2013/03/27(水) 10:17:53.52ID:???
file:///C:/test.php なんだろ。
0191nobodyさん2013/03/27(水) 10:27:17.15ID:???
>>190
これだろうな
0192nobodyさん2013/03/27(水) 11:00:25.32ID:???
>>189
phpとして読めるならね。
普通、httpでphp読むと実行結果が返ってくるよね?
0193nobodyさん2013/03/27(水) 11:04:48.30ID:KYdi+aYH
>>192
つまり相対パスで呼び出さない限りincludeは出来ないということで良いのですね
安心しましたありがとうございます
0194nobodyさん2013/03/27(水) 11:22:45.13ID:o3YcYIdi
dataCheck($a,"txtA");
dataCheck($b,"txtB");

function dataCheck($str,$name){
if(strlen($str) == 0 || !preg_match('/^[0-9]$/',$str)){
print("<html><head><title>入力エラー</title></head><body>");
print($name." は半角数字を入力してください。<br /><br />\n");
print("<a href=\"#\" onClick=\"history.back(); return false;\">再入力</a>\n");
print("</body></html>");
exit;
}
}

txtAとtxtBの両方がfalseの場合、両方のエラーを表示させたいのですが
この場合だとどちらか片方しか表示されません。

両方表示できる方法をお願いします。
0195nobodyさん2013/03/27(水) 13:39:50.07ID:???
>>194
exitをなくせばいいと思うよ。
それとhead、bodyタグ等は関数の外で出力。
0196nobodyさん2013/03/27(水) 13:50:15.93ID:???
>>114
PHPだけのファイルの場合は付けない方が良く、その理由は明確。

PHPだけのファイルはrequireされるが、そのときそのファイルに?>に続くスペースなどがあると、
それが出力に影響を及ぼす場合がある。
また、PHPのコードでHTTPヘッダを出力するとき、requireしたファイルに?>に続く余分なスペース
や改行などがあると、もうHTTPヘッダは出力できなくなる。
そのため、?>は省略した方が良い。

ちなみに、PSR-2というコーディングガイド(PSRが何者かは要google)では、?>は省略が必須と
なっており、( http://www.infiniteloop.co.jp/docs/psr/psr-2-coding-style-guide.html )、
コーディングルールを静的にチェックするツールでは、エラーとして報告されるだろう。
0197nobodyさん2013/03/27(水) 14:00:57.53ID:???
dataCheck($a,"txtA");
dataCheck2($b,"txtB");

print("<html><head><title>入力エラー</title></head><body>");
print("</body></html>");

function dataCheck($str,$name){
if(strlen($str) == 0 || !preg_match('/^[0-9]$/',$str)){
print($name." は半角数字を入力してください。<br /><br />\n");
print("<a href=\"#\" onClick=\"history.back(); return false;\">再入力</a>\n");
}
}

function dataCheck2($str,$name){
if(strlen($str) == 0 || !preg_match('/^[0-9]$/',$str)){
print($name." は半角数字を入力してください。<br /><br />\n");
print("<a href=\"#\" onClick=\"history.back(); return false;\">再入力</a>\n");
}
}

適当にやったらなんとなく目的の動作に使づきましたが、「再入力」というのが2つ表示されたりと
なんとなくもっと簡単にできると思うんだが・・・

もし両方入力が不正の場合は、

「txtA txtBは半角数字を入力してください。」

と表示されるのが理想。$nameにtxtA txtBが代入されてるんだけど
それを配列で取り出す方法がわかりません。
0198nobodyさん2013/03/27(水) 14:06:09.03ID:GIbhyuNj
質問です。よろしくお願いします。
データベースから100件のデータを取得して、PHP側にて、whileで処理する場合、
そのwhileループ内で、更に、5回ずつデータベースに問い合わせると、
合計500回データベースにアクセスすることになってしまいます。

こういう場合には、どうするのがベストですか?
テーブルを結合して取得すればよいかとも思うのですが、
問い合わせが、5回、10回と多くなるとテーブルの結合も難しいです。
0199nobodyさん2013/03/27(水) 14:11:15.14ID:???
>>197
PHP以前の問題だ。

function validate($str){
 // 妥当なデータならtrueを、そうでない場合はfalseを戻す
 return strlen($str) !== 0 && preg_match('/^[0-9]$/', $str);
}

$buf = '';
if (!validate($a)) {
 $buf = "txtA,";
}
if (!validate($b)) {
 $buf .= "txtB";
}
if (strlen($msg) > 0) {
 $html = <<<EOB
<html><head><title>入力エラー</title></head><body>
$buf は半角数字を入力してください。<br /><br />
<a href="#" onClick="history.back(); return false;">再入力</a>
</body></html>
EOB;
}
0200nobodyさん2013/03/27(水) 14:12:42.17ID:???
>>198
> こういう場合には、どうするのがベストですか?
> テーブルを結合して取得すればよいかとも思うのですが、
それしかない。

> 問い合わせが、5回、10回と多くなるとテーブルの結合も難しいです。
難しくてもやれ。
0201nobodyさん2013/03/27(水) 14:13:28.39ID:???
>>199
誤:if (strlen($msg) > 0) {
正:if (strlen($buf) > 0) {
02021982013/03/27(水) 18:47:39.02ID:MD7cwBMv
>>200
なにか、他にテクニックがあるかとも思ったのですが、
やはり、テーブルの結合をするしかないようですね。
有難うございました。
0203nobodyさん2013/03/27(水) 19:02:19.68ID:???
テーブルの構造もやりたい内容も詳しくわからないのにテクニックとか
出しようが無いだろw
必要な呼び出しなら何回だろうが必要なだけ呼ぶしかないと言うだけのこと。
0204nobodyさん2013/03/27(水) 19:12:48.33ID:???
結合すると
> そのwhileループ内で、更に、5回ずつデータベースに問い合わせる
これがそもそもなくなるんじゃないかっていうのが回答者の意見だと思う

でも
> テーブルを結合して取得すればよいかとも思うのですが、
> 問い合わせが、5回、10回と多くなるとテーブルの結合も難しいです。
これがわからない

もうちょっと詳しく頼むわ
02051982013/03/27(水) 19:26:24.23ID:MD7cwBMv
>>204
不明瞭な点が有り、すみません。
意図していることは、結合するテーブルが5個、10個と多くなると、
SQLが複雑化するということです。
また、DBの設計上、結合が無理な場合も有り得るということです。
0206nobodyさん2013/03/27(水) 19:28:37.44ID:???
PHP関係なくね?
0207nobodyさん2013/03/27(水) 19:34:59.92ID:???
自分はデータベースを使うとき、内部は単一のテーブルしか使わん。
Sqliteメインからかもしれないが、分けるなら別ファイルにする。
0208nobodyさん2013/03/27(水) 20:19:03.85ID:r73Jwrfn
>>205
そうなってくると、DB設計見直してもいい気がします。
0209nobodyさん2013/03/27(水) 20:36:36.55ID:???
>>205
今スマホなんでURLは示せないけど、Oracle SQLパズルってサイト検索してみて。
一個のクエリで驚くほどいろんなことできるから。
ループ内のクエリは絶対だめ。
0210nobodyさん2013/03/27(水) 20:38:31.67ID:2iOdM1fp
PHPの練習問題などを公開しているサイトは無いですか?
イマイチ練習法がわかんなくて
02111982013/03/27(水) 20:55:59.05ID:I26BQZQ8
>>208
DB設計についても再考してみます。

>>209
http://www.geocities.jp/oraclesqlpuzzle/
これですね。かなり高度のようですが勉強してみます。

>ループ内のクエリは絶対だめ。
肝に銘じます。有難うございました。
0212nobodyさん2013/03/27(水) 21:39:21.74ID:???
Perlスレ荒らすのやめてもらえませんかね
昨日まで平和に進行してたスレが1日で50レス近く荒れてるんですよ
かなり迷惑なので他のスレにお願いします
0213nobodyさん2013/03/27(水) 21:49:56.92ID:???
被害妄想乙
0214nobodyさん2013/03/28(木) 00:27:58.07ID:???
>>212
>>206
0215nobodyさん2013/03/28(木) 09:21:24.03ID:???
ストアド使えよ
0216nobodyさん2013/03/28(木) 11:43:28.74ID:???
>>209
>ループ内のクエリは絶対だめ。
これなんでダメなん? PDOなんかだとループ前提の仕組みもあるよね
0217nobodyさん2013/03/28(木) 12:53:36.30ID:???
>>216
> これなんでダメなん?
実行時間が長くなり、サーバにも負担がかかるので。

例えば1000行戻ってくるクエリをループして、それぞれの行で5回検索をしたとすると、
ループ内では合計5000回のクエリ実行が必要。

対ローカルでもクエリの実行は数ms程度かかる。
1回のクエリにつき1msかかるとすると、このループの実行時間は5秒。
ネットワーク経由だと、10ms以上かかったりするので、数十秒〜数分のオーダーになるかもしれない。

一方、全部JOINして1回のクエリで終わらせられれば、数十〜数百msくらいで終わる。

> PDOなんかだとループ前提の仕組みもあるよね。
MDB2しか使ったことないんだけど、PDOのその仕組みってどういう奴なの?
0218nobodyさん2013/03/28(木) 12:55:27.85ID:???
マスターテーブルなんかを事前にhashで持っておき、ループ内ではクエリの実行を行わず、
hashを参照する方法もある。

が、大抵はJOINした1回のクエリより遅い。
0219nobodyさん2013/03/28(木) 13:33:51.38ID:Cp6GJ5bL
【OS名】Linux
【PHPのバージョン】5.3.10
【連携ソフトウェア】MySQL

phpでPDO使ってMySQLいじってる初心者です

指定の行の取得ってどうやるんでしょうか

$stmt = $dbh->prepare('select xxx from xx', array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC, PDO::FETCH_ORI_ABS, $num);
ってやっても最初の行しか取れなくて困ってます
0220nobodyさん2013/03/28(木) 13:42:08.01ID:???
ループで回すか、フェッチAllとか
0221nobodyさん2013/03/28(木) 13:50:16.41ID:???
ありがとうございます
fetchAll使って解決しました
0222nobodyさん2013/03/28(木) 13:51:36.21ID:???
>>219
マルチwwwwwww
http://toro.2ch.net/test/read.cgi/tech/1363522503/224
0223nobodyさん2013/03/28(木) 13:54:46.08ID:???
>>219
これでいけないか?

PDO limit句
http://phpgo.info/?PDO%20limit%E5%8F%A5
0224nobodyさん2013/03/28(木) 14:09:19.06ID:???
何でマルチポストに回答してんの?
そこまでして自己顕示欲を満たしたいの?
0225nobodyさん2013/03/28(木) 14:16:34.23ID:???
いいチャンスだったしただサイトの宣伝したかっただけだよ
0226nobodyさん2013/03/28(木) 14:17:01.51ID:???
匿名でIDも出さずに回答してるのに、自己顕示欲とかwww
0227nobodyさん2013/03/28(木) 14:21:40.28ID:???
>>224
俺がマ板からこの板に誘導したから。
が、よく>>222をみたらム板にもマルチしてたのか。どうでもいいけど。
0228nobodyさん2013/03/28(木) 14:27:57.85ID:???
そういえばPDOのLIMIT句バグはもう直ったのかな
0229nobodyさん2013/03/28(木) 15:18:25.70ID:???
>>228
質問ならID出てるはずだから質問じゃないな
独り言はTwitterでやれ精神障害
0230nobodyさん2013/03/28(木) 15:26:20.01ID:???
>>229
君も心に何かの問題を抱えてるようだよ。
0231nobodyさん2013/03/28(木) 16:33:27.95ID:???
夫婦喧嘩ってこういう感じなのだろうか。

言い合えるってだけで羨ましいス…
別に何も無いヨ…
0232nobodyさん2013/03/28(木) 22:53:42.51ID:???
>>216 >>217
> PDOなんかだとループ前提の仕組みもあるよね。

PDOでそういう仕組みは見たことないけど。
これと勘違いしてるんじゃない。

http://www.php.net/manual/ja/pdo.prepared-statements.php
プリペアドステートメントを使用して、繰り返し挿入処理を行う
0233nobodyさん2013/03/29(金) 00:31:56.83ID:???
strposで文字カウントすると ">" が4文字もカウントする
使えないんですけど何でですか?
0234nobodyさん2013/03/29(金) 00:53:54.84ID:G7mP7j2C
>>233
htmlspecialchars()とか前に使ってない?
'>' (大なり) は '&amp;gt;' になります。
0235nobodyさん2013/03/29(金) 00:58:12.47ID:???
>>234
ありがとーーー!!!
htmlspecialcharsを甘くみてたよ、ほんと助かった
0236nobodyさん2013/03/29(金) 01:09:24.93ID:???
&gt;で4じゃねーの
0237nobodyさん2013/03/29(金) 01:09:49.75ID:???
更新してなかった・・・死のう
0238nobodyさん2013/03/29(金) 09:05:45.51ID:???
>>232
それをループ内で使う
0239nobodyさん2013/03/29(金) 10:29:21.35ID:???
>>232
やっては駄目だといわれているのは、検索クエリ。
0240nobodyさん2013/03/29(金) 11:16:19.88ID:???
DBをキュー代わりに使ってるときは検索でもループ内で使うお
0241nobodyさん2013/03/29(金) 11:31:22.70ID:???
ループで検索クエリを流すかどうかは状況によるよ
一概にダメとは決めつけられない、というか決めつけるのは大抵の場合よくない
0242nobodyさん2013/03/29(金) 11:51:07.51ID:???
JOINできるんだったら、一回で済ませた方がいいだろ
0243nobodyさん2013/03/29(金) 11:55:25.73ID:???
>>242
何の話をしているんだ?
0244nobodyさん2013/03/29(金) 11:58:48.24ID:???
>>237
それをループさせる(爆)
0245nobodyさん2013/03/29(金) 12:53:54.89ID:???
>>198の話だけど?
0246nobodyさん2013/03/29(金) 13:44:23.45ID:???
とっくにそんな話は終わってんだろ
0247nobodyさん2013/03/29(金) 13:56:24.60ID:???
>>246
そう思うんならほっとけよ
0248nobodyさん2013/03/29(金) 14:02:33.34ID:???
ループしないといけない場合でも、ストアドで実装できるならストアドの方がいいね。
0249nobodyさん2013/03/29(金) 17:04:23.71ID:???
>>243
質問はID出せゴミ
0250nobodyさん2013/03/29(金) 19:01:31.30ID:YTM0Vtw2
【OS名】FreeBSD
【PHPのバージョン】5.4
【質問内容】
サブクラスに定義していない(スーパークラスの)関数
の中でサブクラスの変数は利用できないのでしょうか

これができればサブクラスの関数をスーパークラスに
引き上げることができて少しエレガントになるのですが
0251nobodyさん2013/03/29(金) 19:29:51.89ID:???
>>250
引数にすれば利用できる
0252nobodyさん2013/03/29(金) 20:05:29.23ID:???
その変数も基底クラスにもってけば?
0253nobodyさん2013/03/30(土) 13:44:04.73ID:???
【OS名】UbuntuServer12.04
【PHPのバージョン】5.3.10
【連携ソフトウェア】MySQL
データが1行のテーブルに記録された情報をmysql_fetch_assocなどの取得系で求めると必ずfalseが帰ってきます。
ただ2行以上ある場合はしっかりと帰ってくるのですが、肝心の1行目の情報がスルーされて2行目以降のデータが帰ってきます。
例)AAAのみ : bool(false) 、 AAA BBB CCCの三行 : BBBとCCCのみ帰ってくる

この場合ってどうしたらいいんでしょうか。SQL側の問題になるのでしょうか?
0254nobodyさん2013/03/30(土) 13:50:33.39ID:???
phpmyadminかコンソールからSQL実行したらどうなるの?
0255nobodyさん2013/03/30(土) 13:55:28.58ID:???
>>254
一行の場合でも結果がしっかり返ってきます。
書き忘れてましたがこのケース、whileで回すときだけ発生するのです。
0256nobodyさん2013/03/30(土) 14:12:46.69ID:???
>>1
0257nobodyさん2013/03/30(土) 14:53:57.28ID:???
>>255
ルールより自己の利益を優先するクズ野郎は消えろ
0258nobodyさん2013/03/30(土) 16:38:18.23ID:???
>>255人間のクズ
0259nobodyさん2013/03/30(土) 16:54:59.61ID:???
>>255の特徴

IDを隠す池沼
情報を後出しする糞
0260nobodyさん2013/03/30(土) 21:59:35.99ID:OzKgLCO2
PHPの配列で存在しない値を変数に代入したときどうなるの?
例えば

$a = $hairetsu['unko'];

unkoに対応する値はない。
このとき$aにはなにがはいるの?
こうしたとき、

isset($a)

ってしたときfalseかえってくる?
0261nobodyさん2013/03/30(土) 22:16:16.60ID:???
>>260
>◆質問する時の注意
>・ 質問者として、態度をわきまえること。
0262nobodyさん2013/03/30(土) 23:15:19.20ID:???
試してから質問してはいかがでしょうか
0263nobodyさん2013/03/31(日) 00:35:53.39ID:???
>>260
だれもテメーみたいなksに期待なんかしてないんだからfalseが返ってこようがこまいが関係ないだろ
一生電子ゴミを生産してろ
0264nobodyさん2013/03/31(日) 02:21:28.12ID:???
これは < 3 で真のはずなのに結果が 34 22 76となり
3回繰り返されず1回出力されるだけなんですがどうしてでしょうか?

<?php
$result[0] = 34;
$result[1] = 22;
$result[2] = 76;

for ($i = 0; $i < 3; $i++){
print $result[$i].'<br />';
}
?>
0265nobodyさん2013/03/31(日) 02:30:52.73ID:???
>>264
ルール無視のゴミは消えろ
0266nobodyさん2013/03/31(日) 07:47:45.45ID:???
http://ideone.com/tOT1Ek

3回出るけど
02672642013/03/31(日) 12:16:43.33ID:???
>>266
出ない理由を聞いているのであってあなたが試した結果はきいていません。
うっとうしいのでわざわざアンカうってレスしてもらわなくて結構です。
0268nobodyさん2013/03/31(日) 12:29:24.24ID:???
> これは < 3 で真のはずなのに結果が 34 22 76となり
何もおかしくない
02692642013/03/31(日) 12:31:32.34ID:???
267さんは偽です。
3回ってのは

34 22 76
34 22 76
34 22 76

こういうことです。for文は繰り返しですよね?
0270nobodyさん2013/03/31(日) 12:32:33.16ID:???
0からやり直せや
0271nobodyさん2013/03/31(日) 13:05:01.07ID:???
>>270
いいから教えろや
■ このスレッドは過去ログ倉庫に格納されています