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

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

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

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

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

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

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

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

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0356nobodyさん2010/10/18(月) 22:36:02ID:???
>>355
スレタイも>>1も読まない時点で前途多難と思われる
0357nobodyさん2010/10/18(月) 22:36:21ID:???
>>355
スレの質問ルールも守れないようなやつがなにを作れるってんだよ
0358nobodyさん2010/10/18(月) 22:40:39ID:???
猫大好きスレで猫と犬どっち飼いましょうかって聞くくらい不毛な質問
0359nobodyさん2010/10/18(月) 22:41:18ID:???
関係ないけど他スレで見つけたこれが面白かった
PHPでtail
http://webcache.googleusercontent.com/search?q=cache:dnttU-m6FJMJ:okyuu.com/ja/question/6880+php+tail&cd=3&hl=ja&ct=clnk&gl=jp
0360nobodyさん2010/10/18(月) 22:57:25ID:???
>>358
うまいなwその通りだw
0361nobodyさん2010/10/18(月) 23:15:57ID:???
>>359
それならこれも便利
これでアプリのログとかapacheのログを表示させるようにすると、開発しやすくなる
俺はログの種類・更新間隔・表示行数を指定できるように改造した。

http://techblog.ecstudio.jp/tech-tips/phptail.html
0362nobodyさん2010/10/18(月) 23:16:38ID:???
このスレってPHP大好きスレだったんだ PHP質問スレだと思ってた
0363nobodyさん2010/10/18(月) 23:21:14ID:???
>>361
コンソールでは何でだめなん?
0364nobodyさん2010/10/19(火) 05:37:10ID:???
>>362
猫スレじゃない(猫がたとえ)ってことが理解できて
大好きスレじゃない(大好きがたとえ)ってことが理解できない理由がわからん
0365nobodyさん2010/10/19(火) 07:16:26ID:???
>>364
それは文脈に起因します。
「どちらの方が良いでしょうか?」という質問に対して「大好き」という回答は
関連が強過ぎるため直接表現と捉えられても仕方がありません。
比喩表現としては十中八九失敗するでしょう。
現にここでは失敗しています。
0366nobodyさん2010/10/19(火) 09:25:08ID:???
ネット社会では
比喩表現1行レス == 荒らし
0367nobodyさん2010/10/19(火) 09:43:09ID:???
>>363
いつもはLinux/Apacheなんだけど、今回windows/IISでコンソールも提供されない状況での開発してて
IISのログはFTPで持ってくる方法しか提示されてなかったので
>>361の奴を探してきて、自分用に改良した。

作業用マシンがwindowsでサーバがLinuxの場合でも、sshで接続してtailでログ見るより
ブラウザ上で見られた方がteratermなどを起動させなくていいので余計なソフトが一つ減るのと
Linuxが苦手な若手が操作ミスするリスクを減らせて良いかなと

余談だけど>>361の奴はfirefoxのサイドバーに表示させてる。
0368nobodyさん2010/10/19(火) 10:12:02ID:???
>>365
ぶつぶつ不満いってんのはおまえさんだけみたいだが
0369nobodyさん2010/10/19(火) 10:32:32ID:???
今更なんですが
DB(MySQL)がutf-8の場合、
phpスクリプトファイル自体もutf-8文字コードで作成しないといけないですよね?

私の使っているIDEが新規スクリプトファイルを追加すると
自動でsjisになってしまう為ご質問させて頂きました。
0370nobodyさん2010/10/19(火) 10:34:50ID:???
いいえ
0371nobodyさん2010/10/19(火) 11:00:59ID:???
特に理由がなければ同じ文字コードにした方が楽。
どうしても別の文字コードになる場合
(PHP)
mssql_query("set names 'utf8'");
mb_internal_encoding("UTF8");
mb_http_output("UTF8");
$str = mb_convert_encoding($str,'SJIS','UTF8');
(HTML)
<meta HTTP-EQUIV="Content-type" CONTENT="text/html; CHARSET=UTF-8">
らへんを適宜使う
0372nobodyさん2010/10/19(火) 11:03:23ID:???
>>371
どうもありがとうございました。文字コードをそろえます。


※以前に作ったサイトの文字コード選定で sjis を選択してしまい
激しく後悔したので今度からはutf-8に統一したいと思います。
0373nobodyさん2010/10/19(火) 11:24:43ID:???
htmlファイルをすべてutf-8に直すプログラム作れば簡単っすよ
0374nobodyさん2010/10/19(火) 13:16:18ID:???
sageてるやつにえらく親切だな
0375nobodyさん2010/10/19(火) 13:56:16ID:5WEhDG4j
>>349

無理じゃね?
PC使って携帯ブラウザが利用するIPアドレス帯通してアクセスする方法あるんか?
0376nobodyさん2010/10/19(火) 13:59:59ID:???
.>>375
だからそれを聞いてんだろーが。
0377nobodyさん2010/10/19(火) 14:03:12ID:Uiw+alOC
名前の投稿について質問なのですが

$name = htmlspecialchars($_POST['name']);
if (!$name) $name = "名前がありません";

とあるのですが、!$nameの所がちょっとよくわかりません
'name'に何も書き込まれて無かったら名前がありませんになるという事はカンでわかるのですが
なぜ否定の!と$nameの変数を続けただけでそうなるのでしょうか?

!$nameじゃ$nameじゃないっていうよくわからないモノになってしまう気がしまいます
0378nobodyさん2010/10/19(火) 14:04:19ID:???
isset使え
0379nobodyさん2010/10/19(火) 14:13:07ID:???
びっぐいしゅー
0380nobodyさん2010/10/19(火) 14:17:28ID:???
>>375
ただ単に不正にいろいろやりたいことがあるんだろ
たとえばランキング荒らしとか、IP制限されてるサイトのソースをみたりとか
0381nobodyさん2010/10/19(火) 14:19:24ID:???
>>377
String型の$nameをboolで評価してるだけ
http://php.net/manual/ja/types.comparisons.php
if (!$name)で
$nameがfalseだったらという意味になる
0382nobodyさん2010/10/19(火) 14:19:53ID:???
>>380
脆弱性をボランティアで検査してあげたいだけだよ
0383nobodyさん2010/10/19(火) 14:22:58ID:???
>>381
なるほど、ありがとうございます!
0384nobodyさん2010/10/19(火) 14:30:04ID:Uiw+alOC
>>381
あ、すみません確認なんですけどソレって
if($bool)[ 処理1 ]
だとtrueのときに処理1が実行されて
if(!$bool)[ 処理2 ]
だとfalseのときに処理2が実行されるという事でいいんですよね?

>>383で名前欄出さなくてすんません
0385nobodyさん2010/10/19(火) 14:32:30ID:???
>>384
そう

if ($name)は
if ((boolean)$name == true)と同じ

if (!$name)は
if ((boolean)$name == false)と同じ
0386nobodyさん2010/10/19(火) 14:36:57ID:Uiw+alOC
>>385
丁寧にありがとうございます!超助かりました!
0387nobodyさん2010/10/19(火) 18:56:15ID:???
>>384
if($foo)って書き方は
とにかくサブミットされたなら、ってときとかによく使う書き方だから覚えてて損はないよ
0388nobodyさん2010/10/19(火) 19:22:41ID:???
>>387
混乱するだけだから変な説明すんなや
$fooが何かによるでしょうに
if ($_POST)ならまだわかるけど
0389nobodyさん2010/10/19(火) 19:31:48ID:???
empty使うんじゃないのか
0390nobodyさん2010/10/19(火) 19:50:19ID:???
その変は挙動を把握できるならどれでもいいと思うよ
issetでもis_xxxでも
0391nobodyさん2010/10/19(火) 21:01:55ID:???
>>388
こんなことで混乱するとか耐性なさすぎじゃまいか
0392nobodyさん2010/10/19(火) 21:20:19ID:???
言えてる。これくらいで混乱するからマニュアル読んでも理解できないんだろう。
http://php.net/manual/ja/types.comparisons.php
に書かれてるif($x)と同じなのにね。
0393nobodyさん2010/10/19(火) 21:28:57ID:???
>とにかくサブミットされたなら、ってときとかによく使う
ここが変
サブミットされた値って書けば通じるけど
0394nobodyさん2010/10/19(火) 21:57:35ID:???
>>393はなにを言ってるんだ?
$typeがsendなら、とかじゃなくてとにかくフォームから送信されたデータがあったらこの処理をする、ってことだろ?
なんもおかしくないじゃん
0395nobodyさん2010/10/19(火) 22:03:13ID:???
== != しか知らないと、($hoge)とか(!$hoge)とか見慣れなくて不自然なんだろうな
TRUEなら(FALSEなら)ってのは使い出すと勝手はよいのに
0396nobodyさん2010/10/19(火) 22:06:23ID:???
>>394
>フォームから送信されたデータがあったら
こういうことを言ってるんですが
サブミットされたという表現だと
actionをうけたらという意味になるからおかしいと言ってるの
実際に値がなくてもね
<form method="post" action="foo.php">
<input type="submit">
</form>
0397nobodyさん2010/10/19(火) 22:07:53ID:???
== === に見慣れてるせいで
MDB2のwhereの`foo` = 'bar'は何度書いても違和感があるわ
0398nobodyさん2010/10/19(火) 22:08:23ID:???
今時MDB2なんて使ってるやつはいねえですよ
0399nobodyさん2010/10/19(火) 22:09:11ID:???
>>396
そこまで屁理屈をこねる人が選択する言語じゃないと思ってたけど()笑
0400nobodyさん2010/10/19(火) 22:10:40ID:???
どこが屁理屈なんだ・・・
サブミットって単なるトリガーなんですが
勝手に単語作ってオナニーしないでもらえるかな
正しく意味が通じるように言えないなら黙っときなよ
0401nobodyさん2010/10/19(火) 22:11:01ID:???
>>398
今時は何を使うの?
0402nobodyさん2010/10/19(火) 22:12:13ID:???
PECL: PDO
0403nobodyさん2010/10/19(火) 22:12:59ID:???
>>400
ブラウザとじて深呼吸してこい
いらいらすんのは体によくねえぞ
0404nobodyさん2010/10/19(火) 22:15:12ID:???
>>403
イライラしてないし
反論できなくなるとそらすんだね
0405nobodyさん2010/10/19(火) 22:17:30ID:???
某氏が提唱するようなフォームって実際作る意味あるんかな
サブミットするってsubmitボタンを押すって意味で解釈するなら値が空もありえる(理論的にありえても現実的にありえない?)としても、submitって言葉の意味なら「値を渡すこと」と解釈するのが妥当だと思うんだけどな
こんなこといったら噛みつかれちゃうかなw
0406nobodyさん2010/10/19(火) 22:19:52ID:???
>>387は「サブミットされたら」って言ってて、「inputのtypesubmitをクリックしたら」って言ってなくねい?
0407nobodyさん2010/10/19(火) 22:21:35ID:???
屁理屈言ってないと正気を保てない人ってまれにいるよな
0408nobodyさん2010/10/19(火) 22:22:40ID:???
サブミットされたらだと>>396のコードや>>405の指摘通り
なんもない場合も考えられる
それを屁理屈というかいわないか

という話ですね
0409nobodyさん2010/10/19(火) 22:24:30ID:???
>>407
言い返せないと屁理屈の一点か
誤解をうむ言い方をするなという指摘を素直に受けれないわけ?
0410nobodyさん2010/10/19(火) 23:26:30ID:???
値がどうとかは関係なしに、>>396の指摘はあながち間違ってないと思う。
値を受けた処理だけじゃなく、actionを受けた時点での処理も存在するからね。
例えば同一ページに2つフォームがあって、同じ場所にactionする場合とか。
2つのフォームのメソッドはそれぞれPOSTとGETになっていて、
どちらかで処理を分けたい時なんかは、
if ($_POST)
if ($_GET)
で分けたりもするから。
設計を変えろだのそういう話は置いといて、そういう書き方してる人がいるのも事実。
0411nobodyさん2010/10/19(火) 23:26:51ID:???
>>367
詳細ありがとう
エラーをログに吐かせて確認する時とか便利そうだね
今度デバッグの時に使ってみよう
0412nobodyさん2010/10/19(火) 23:31:00ID:???
>>405
ラジオボタンで未チェックなら値は渡ってこないから
値が空は普通にあるよ

その場合、isset等を使わず $_POST['radio'] (←ラジオボタンだとして)をそのまま使えばNOTICEがでる
0413nobodyさん2010/10/19(火) 23:38:08ID:???
普通にMDB2を使ってるが。
0414nobodyさん2010/10/19(火) 23:40:21ID:???
ラジオボタンだとするとname属性の値がradioなのかw
0415nobodyさん2010/10/19(火) 23:45:05ID:???
イミフなツッコミ
0416nobodyさん2010/10/19(火) 23:56:27ID:???
そりゃ分かってたら書かないもんな
0417nobodyさん2010/10/20(水) 00:02:21ID:???
typeの値がradioに決まっとろう
nameをradioしたのは説明上の理由にきまっとろう
0418nobodyさん2010/10/20(水) 00:10:19ID:???
PHPは入力フォームの種類まで受け取れるのか、の方が良かったか
0419nobodyさん2010/10/20(水) 00:42:00ID:goWML+Iz
悲しみのradio
0420nobodyさん2010/10/20(水) 01:03:07ID:???
みんな if ($hoge) とかやってんの?
E_NOTICEでエラー出ちゃうじゃん。
0421nobodyさん2010/10/20(水) 02:07:00ID:???
値が入ってたら出ないのでは?
0422nobodyさん2010/10/20(水) 02:21:45ID:???
isset と empty の動作が嫌なので、
isEmpty() みたいなメソッドを独自実装してるのって俺だけ?
0423nobodyさん2010/10/20(水) 02:25:44ID:???
うぇ勘弁してくれ
0424nobodyさん2010/10/20(水) 02:32:42ID:???
どんな挙動?
0425nobodyさん2010/10/20(水) 06:30:11ID:3XsRLFfk
2つ質問があります
bangohan.phpというファイルを作成して

<form action="bangohan.php" method="post">

<select name="晩御飯">
<option value="" selected="selected">▼選択して下さい</option>
<option value ="100">アポロチョコ</option>
<option value ="200">ポッキー</option>
<option value ="3000">マグロのカルパッチョ</option>
</select>

<?php
$bangohan = $_POST["晩御飯"];
echo "$bangohanキロカロリーだよ!";
?>

<input type="submit" value="カロリーチェック!">


でカロリーチェックを押したらselectで選択したところが元の▼選択して下さいに戻ってしまうんですが戻らない方法ってありますか?

そして2つ目の質問ですが
このページの下部にもう一つsubmitで
<input type="submit" value="1日3食1ヶ月間コレを食べたら?">
というのを作って

<?php
echo"$bangohan*90"キロカロリーだよ!;
?>
というのも追加したいんですがこの時どのようなコードにすればいいのでしょうか?
なるべく1つのphpファイルにまとめたいのですが
0426nobodyさん2010/10/20(水) 07:27:59ID:???
>>425
1.各optionに$_POST['晩御飯']の値で条件分岐してselected="selected"をつける
2.submitの値で処理を分ける
つまりif文という奴を使ってください
0427nobodyさん2010/10/20(水) 07:46:35ID:3XsRLFfk
>>426
すみません、条件分岐はわかるのですが
>各optionに$_POST['晩御飯']の値で条件分岐してselected="selected"をつける
というのは
<option value ="if($_POST['晩御飯'] == 100){selected="selected} else{100}">アポロチョコ</option>
<option value ="if($_POST['晩御飯'] == 200){selected="selected} else{200}">ポッキー</option>
<option value ="if($_POST['晩御飯'] == 3000){selected="selected} else{30000}">マグロのカルパッチョ</option>
と、こういうことでいいんでしょうか?全然理解してなかったらすみません

そして2についてですが
submitの値で処理を分けるというのが具体的にどういうものなのか、試しに調べてnameを付けて
<input type="submit" name="1syoku" value="カロリーチェック!">
<input type="submit" name="1month" value="1日3食1ヶ月間コレを食べたら?">
というのをやってみたのですがどっちも
<form action="bangohan.php" method="post">
に送られて両方

<?php
$bangohan = $_POST["晩御飯"];
echo "$bangohanキロカロリーだよ!";
?>
<?php
echo"$bangohan*90"キロカロリーだよ!;
?>

の二つの計算結果が表示されてしまいました
HTMLもphpも勉強足りなくて本当にすみません
0428nobodyさん2010/10/20(水) 09:50:33ID:VChkUypH
htmlも、もちっと整理したほうがいいとおもうぞ

select されていない時のhtmlタグ($_POST["晩御飯"] が 100ではない)
<option value ="100">アポロチョコ</option>

select されているとき(要は$_POST["晩御飯"] が 100)の時のhtmlタグ
<option value ="100" selected="selected">アポロチョコ</option>

結果の例
<option value ="100" <?php if($_POST["晩御飯"]=100){ print 'selected="selected"';}?>>アポロチョコ</option>

書き方はいろいろあるとおもう
0429nobodyさん2010/10/20(水) 09:54:56ID:???
ニヤニヤ
0430nobodyさん2010/10/20(水) 09:57:42ID:???
>>422
おれも知りたい
言語構造の代わりをメソッドの独自実装でどうやってできるかを
0431nobodyさん2010/10/20(水) 10:21:11ID:???
結局中身でissetやempty使ってるってオチだろ
0432nobodyさん2010/10/20(水) 10:43:40ID:???
PHP拡張でという意味じゃないの?
cができれば簡単にできるよ

PHP Extentionで検索すればいっぱいでてくる
0433nobodyさん2010/10/20(水) 10:48:34ID:???
root権限のある専用サーバや自宅サーバならともかく
ここにいる人ってだいたい共用サーバでしょ?
PHPのソース拡張しても実運用じゃ使えなきゃ意味ないしな
0434nobodyさん2010/10/20(水) 11:11:00ID:???
たとえ実運用で使えても使いたくありません
0435nobodyさん2010/10/20(水) 11:58:57ID:???
selected="selected"って書くんだ・・・
今までselectedしか書いてなかったよ
0436 [―{}@{}@{}-] nobodyさん2010/10/20(水) 12:44:08ID:???
HTML4とかは属性名と属性値が同じなら省略できたからselectedだけでいいけど、
XHTMLとかは属性値が必須だからselected="selected"って書かないと駄目
04374222010/10/20(水) 12:49:38ID:???
メソッドって書いたのが悪かったか。ただの関数。
issetとemptyって、空文字("") や "0" でも true を返すから、あまり好きじゃない。
(issetは用途が違うとは思うけど)

function isEmpty($target) {
if ($target === "") return true;
if ($target === null) return true;
return false;
}
0438nobodyさん2010/10/20(水) 13:18:12ID:???
>>421
値が確実に入ってるならいいけど、それでない場合もあることを考えるとif ($hoge)は不安
0439nobodyさん2010/10/20(水) 13:19:06ID:3XsRLFfk
>>428
できました!ありがとうございます!
質問の一つが解決しました
0440nobodyさん2010/10/20(水) 13:26:54ID:???
普通に考えてif ($hoge)はユーザからの入力値だから
何も送られてこなくても空文字になるだけでnullにはならない
問題なのは最初に開いて未送信の状態だとnullであることだね
nullと空文字を同列に扱ってもいい場合はそういう書き方でも問題ない
0441nobodyさん2010/10/20(水) 13:42:45ID:???
nullとか空文字ならまだいいが、関数じゃ未定義の変数渡せないじゃん
0442nobodyさん2010/10/20(水) 13:54:02ID:???
> 普通に考えてif ($hoge)はユーザからの入力値だから

そうとも限らないじゃないかな
0443nobodyさん2010/10/20(水) 14:00:43ID:???
>>441
どういうこと?
0444nobodyさん2010/10/20(水) 14:01:21ID:???
>>440
はじめからtextarea等とわかったうえでならいいのかもしれないが
radioやcheckboxは未checkだと空文字ではなく値が渡ってこないから
わかってないとはまりそうじゃない?

taintが無いのは慣れたけど、phpの流儀はよくわからんな
未定義の可能性があるものをそのまま渡すのがphpの普通なの?
NOTICEを無視するのも普通?
0445nobodyさん2010/10/20(水) 14:04:18ID:???
$checkbox = $_POST['checkbox'] ? true : false;
とかにするよな?
0446nobodyさん2010/10/20(水) 14:09:49ID:???
if (isset($hoge)) ; // 言語構造に未定義変数渡してチェックできる
if (empty($hoge)) ; // 同じく言語構造に渡してチェックできる

if ($hoge) ; // 未定義だから警告出る
if (isEmpty($hoge)) ; // 未定義だから警告出る

>>443 こういうことでしょ
0447nobodyさん2010/10/20(水) 14:11:37ID:???
把握
0448nobodyさん2010/10/20(水) 14:13:38ID:???
>>446
ん?
if ($hoge)の前に$hoge定義するでしょ?
やべえ俺は異端者なのか
0449nobodyさん2010/10/20(水) 14:17:42ID:???
$_POST['hoge']がtextareaの場合

$hoge = $_POST['hoge'] ? $_POST['hoge'] : "";
if ($hoge)

or

if (isset($_POST['hoge']))
0450nobodyさん2010/10/20(水) 14:17:50ID:???
結局@で警告抑止するのが一番楽という結論になったな俺はw
若干遅くなるって話も聞くけどループでぶん回すとこじゃなけりゃ
気にしない。
0451nobodyさん2010/10/20(水) 14:18:59ID:???
鯖代をけちって第三者に貸し出すシステムを
スタンダードとかやばいなかw?


さくらってすぐに鯖落ちするからなぁー
0452nobodyさん2010/10/20(水) 14:20:24ID:???
一度変数に入れてあとで使う場合なんかは

$hoge = $_POST['hoge'] ? $_POST['hoge'] : null;

or

$hoge = null;
if (isset($_POST['hoge'])) {
 $hoge = $_POST['hoge'];
}

とかか
0453nobodyさん2010/10/20(水) 14:26:02ID:???
いや・・・
三項演算子はif-else文と対応するだけであんまり関係ないよ
コードがスッキリするか否かの差じゃないかな
(三項演算子嫌いな人もいるからスッキリするかは人それぞれだけど)

もしやるなら
$hoge = isset($_POST['hoge']) ? $_POST['hoge'] : null;
だね

結局isset使えでいいんじゃないの
0454nobodyさん2010/10/20(水) 14:40:41ID:???
俺は好きにすれば良いと思うけどね

・isset/emptyでチェックする
http://www.php.net/manual/ja/function.isset.php

・error_reporting = E_ALL & ~E_NOTICE でNOTICEを無視
http://www.php.net/manual/ja/errorfunc.configuration.php#ini.error-reporting

・@つけてエラーメッセージを無視
http://www.php.net/manual/ja/language.operators.errorcontrol.php
0455nobodyさん2010/10/20(水) 14:48:19ID:???
どうしても@使わなきゃいけない局面ってあるの?
■ このスレッドは過去ログ倉庫に格納されています