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

【PHP】質問スレッドpart26【php】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん04/12/21 22:34:55ID:???
のフリをした糞スレ
0476nobodyさん05/01/24 01:21:12ID:???
その内このスレってさ、マニュアルへの個別リンク集と他スレへの誘導だけになりそうだな。(w
047746305/01/24 01:30:08ID:9W2iCmX2
>>466
__construct() 内でsession_startしています。^^;
047846605/01/24 02:16:23ID:???
>>477
見落としてた...スマソ
0479nobodyさん05/01/24 03:33:48ID:???
Parse error: parse error in cal.php on line *** (***は最終行)と表示されて
{}の閉じ忘れ、セミコロンのつけ忘れなど原因を調べてみても原因が分からず。
諦めモードで、試しにTabインデントをすべて削除してみたら何故か動いた。

こんな不思議なことが過去に何回かあったんだが、喪前らはどうよ?
0480nobodyさん05/01/24 03:41:20ID:???
>>479
Tabのつもりが全角スペースだったりしたんだろ
Webからコードをコピペしたりすると結構あるぞ
0481nobodyさん05/01/24 03:47:58ID:???
>>480
全角が含まれているかどうかもハイライト表示でちゃんとチェックした。
置換で \n\t を \n に置換しただけで何故か動いたから、その可能性はない。
0482nobodyさん05/01/24 03:52:14ID:???
知ったか乙
0483nobodyさん05/01/24 03:57:07ID:???
>>479
apache(とは限らないが)再起動してみ。
謎のエラーが発生する時それだけで治る事がある。
0484nobodyさん05/01/24 04:06:27ID:???
>>483
また同じようなエラーが表示されたら試してみるよ。
�dクス。
048547905/01/24 04:29:36ID:???
初歩的なミス・・・
インデント終了宣言部分の行頭に[Tab]が含まれていたのが原因ですた。

[Tab]$str = <<<EOD
[Tab][Tab]Hello, World!
[Tab]EOD;

吊ってきます・・・∧||∧
0486nobodyさん05/01/24 04:55:40ID:???
× インデント終了宣言
○ ヒアドキュ メント構文

オイラの環境 php-4.3.5@win2kだと、その類のミスは
「parse error, unexpected T_SL in 〜」と表示されるので、
マニュアルのパーサトークンのページの情報から
「<<」が不適切だと分かる。parse error行前後を見ても気づくし。
(その前にヒアドキュメントでミスなんてしないけどね;p)
0487nobodyさん05/01/24 06:48:22ID:???
すみません教えてください。
print <<<EOT
<a href="javascript:fnc_a('----')";>
EOT;

fnc_a()はjavascriptの関数

上記のような文を書きたいのですが、ヒアドキュメントを使えば
そのままでいいのですが、EOTを禁止されてしまいました。(理由は不明です)
他にどのように書けばいいでしょうか?
0488nobodyさん05/01/24 07:20:08ID:???
>>487
>EOTを禁止されてしまいました
EOTを禁止ってなんだ

>他にどのように書けばいいでしょうか?
普通にechoするなりphp構文の外に出すなりすればいいだろ?
俺には何が分からんのかさっぱり分からん
0489nobodyさん05/01/24 07:20:57ID:???
>>487
>EOTを禁止
printやらechoやらを使えば代替になるけど、禁止って何?
0490nobodyさん05/01/24 07:57:23ID:???
EOTがだめならOKASIにすればいいじゃない
0491nobodyさん05/01/24 08:06:38ID:???
>>487
print <<<_UNKO_
<a href="javascript:fnc_a('----')";>
_UNKO_;

これでバッチリ。
0492nobodyさん05/01/24 11:32:14ID:???
これまで
error_reporting = E_ALL & ~E_NOTICE
の設定でプログラムを書いてきたのですが、今後
error_reporting = E_ALL
にして書いていきたいと思っています。
ウェブフォームから入力されてくる値は、
$_REQUEST['param']
といった感じで取得するわけですが、いきなり参照するとwarningが出ます。
一切のwarningを出さないようにするためには、
例えばプログラムの先頭で、
if (isset($_REQUEST['param'])) $param = $_REQUEST['param'];
のようなかたちで一旦すべて$param形式の変数に代入して、
以下のプログラムでは$paramを参照等するようにすればOKでしょうか?
すでにE_ALLでこの点に気をつけて書かれている方がいらっしゃいましたら、
ぜひノウハウを教えていただければ幸いです。
0493nobodyさん05/01/24 12:02:31ID:gh8S2Koa
SSL経由(https)からのアクセスの場合と、
SSL非経由(http)からのアクセスの場合で
ifを使って処理を分けたいのですが、
この場合、どうすれば判断できるでしょうか?
環境変数ってやつを使うっぽいのですが・・・
0494nobodyさん05/01/24 12:10:42ID:???
>>493
apacheなら $_SERVER["HTTPS"] を参照。
0495nobodyさん05/01/24 14:05:08ID:???
>>492
おれは
if (!isset($_REQUEST['param'])) $_REQUEST['param'] = "";
と空文字をセットしたり
if (empty($_REQUEST['param'])) $_REQUEST['param'] = "初期値";
初期値をセットしたりしてる
0496nobodyさん05/01/24 14:34:57ID:???
>>495
なるほど、それだとelseまで書かなくて済みますね。
実は$_REQUEST等はread onlyかと思ってました。
(書き換えて使ったことがなかったので)
これまで、register globalがonからoffに変わった頃からの名残で、
プログラムの先頭ですべて
$param = $_REQUEST['param'];
のように代入していました。
(また$paramをquoteした場合は$quoted_paramに代入)
オリジナル値を操作しないというのは今後も続けようと思いますが、
これまでの先頭のさらに前に処理を追加しようと思います。
ありがとうございました。
0497nobodyさん05/01/24 14:37:06ID:???
質問させてください
現在HTML部に↓のような記述をしているのですが

<input type="checkbox" name="ckbox[0]" value="1" checked>お酒
<input type="checkbox" name="ckbox[1]" value="2">禁煙席
<input type="checkbox" name="ckbox[2]" value="3">送迎

$checkbox[0] = $_POST["ckbox[0]"]
これを[]を用いないで(配列を用いないで)FORMの値を取得する方法はありますか?
0498nobodyさん05/01/24 14:37:30ID:???
>>496
どうでも良い事だが、俺は条件式の書き方が好き
$hoge = (条件) ? 1 : 0; ってやつね。
{}でくくってないif文はなんとなく嫌。
0499nobodyさん05/01/24 14:40:38ID:???
>>497
>>497
何で配列を使わないのかが分からないが…

<input type="checkbox" name="sake" value="1" checked>お酒
<input type="checkbox" name="kin" value="2">禁煙席
<input type="checkbox" name="sou" value="3">送迎

とでもして、$_POST['sake'] $_POST['kin'] $_POST['sou'] 調べれば終わりだと思うが??
何をしたいのかよく分からん。
0500nobodyさん05/01/24 14:42:11ID:???
>>497
ゴメン。チト間違えた。

<input type="checkbox" name="sake" value="on" checked>お酒
<input type="checkbox" name="kin" value="on">禁煙席
<input type="checkbox" name="sou" value="on">送迎

とでもして、$_POST['sake'] $_POST['kin'] $_POST['sou'] 調べれば終わりだと思うが??



に訂正
0501nobodyさん05/01/24 15:07:35ID:???
さっそくお答えくださってありがとうございます。
質問のしかたが悪かったかもしれません・・・。

例えば、
好きな観光地と言う複数選択で
<input type="checkbox" name="kankouti" value="京都">京都
<input type="checkbox" name="kankouti" value="奈良">奈良
<input type="checkbox" name="kankouti" value="宮島">宮島
<input type="checkbox" name="kankouti" value="秩父">秩父
<input type="checkbox" name="kankouti" value="箱根">箱根

こんな感じのHTMLで
奈良と宮島と秩父にチェックを入れた場合
出力で
「奈良,宮島,秩父」という感じにまとめたいのですが、この場合のプログラムはどのように書いたらよいのか
分かりますか?
0502nobodyさん05/01/24 15:12:07ID:???
>>501
checkboxでnameが同じ場合はname=value\0value\0valueと渡される。
0503nobodyさん05/01/24 15:23:02ID:???
ありがとうございます、
試してみます
0504nobodyさん05/01/24 15:24:13ID:???
配列を使いたくないのはどうしてなんでしょう?
全部name[]としておけば、チェックされたものが
name[0],name[1],...に入ってきたと思いますが。
0505二級 ◆Y7FjQgxfdo 05/01/24 15:30:37ID:???
調べても分からなかったんで質問させてください。
$aの中身が配列であるのか、配列ではないのかを調べる関数ってあります?
0506nobodyさん05/01/24 15:33:49ID:???
>>497
ちなみに
$_POST["ckbox[0]"]
これはだめだろ
$_POST["ckbox"][0]
こうだろ
0507nobodyさん05/01/24 15:36:06ID:???
>>505
変数用の関数にある
050849705/01/24 15:36:40ID:???

配列を使わない意味はなかったかもしれません^^;

>>506
$_POST["ckbox[0]"] でやってだめだったんでハマってたんですよ。
どうやら解決しそうです。ありがとうございます。
0509nobodyさん05/01/24 15:44:08ID:???
ちなみに、
$ckbox = $_POST["ckbox"];
としてから
$chbox[0]
でもアクセスできるよ。
0510nobodyさん05/01/24 15:58:51ID:???
タイポしました。
$chbox[0]
じゃなくて
$ckbox[0]
です。
0511nobodyさん05/01/24 16:05:05ID:???
>>505
ヒント:is_
0512nobodyさん05/01/24 17:22:57ID:???
>>496
ラップして未定義ならFalse
0513nobodyさん05/01/24 17:23:40ID:???
>>505
$flag=is_array($a);

これで$flagにTRUEが入ってれば$aは関数として取り扱われていることがわかります。
普通の変数だったらFALSEが返ってきます。
0514軟式PHP05/01/24 17:47:11ID:???
511が初心者を矯正中だったのに・・・w
0515nobodyさん05/01/24 17:53:11ID:???
>>514
いいんじゃない?

>>513こういう、お節介モノが、
優秀な技術者の芽の一部を摘み取っていくんだろうけど、
所詮、>>505みたいに「調べた」といってるわりに、
調べていない事がバレバレの教えて君なら、どう転んでも、
成長は見込めないんだから。
0516nobodyさん05/01/24 18:43:59ID:???
>>505の成長はどうでもいいが
厨房を増やす空気の読めない>>513は
死んでしまって欲しい
0517nobodyさん05/01/24 20:11:00ID:???
しかも間違って教えてるし。
0518nobodyさん05/01/24 21:32:40ID:???
しーっ!
0519nobodyさん05/01/24 23:35:32ID:???
わざと嘘を教えてんじゃないか?


んな訳ないか
0520nobodyさん05/01/25 12:33:20ID:???
ImageMagickのconvertを
execを使用して実行してるんですが、
ブラウザでその処理を実行するリンクを2度押しとかしちゃうと、
ハングしちゃってるのか、そこで処理が止まったままになってしまうのですが、
この場合、どう対処してあげればいいのでしょうか?

execで実行中何度も実行するとまずいのですか・・・?
0521nobodyさん05/01/25 16:49:07ID:???
    ・初心者おことわり
    
    ・グーグルですべて解決

    ・回答は3ヶ月待ち

    ・自分で考えること

    ・自分で調べること

    ・人に頼らないこと
0522nobodyさん05/01/25 17:57:23ID:???
>>521
なにムキになってるんですか?
0523nobodyさん05/01/25 18:04:22ID:???
ちょっとコピペ置き場にしてただけ スマンね
0524nobodyさん05/01/26 16:02:03ID:Xb/tFKyN
入力値をサニタイズしようと思っています。
入力された値が、ある配列の中の文字列のどれかに一致すれば、正という処理
をさせたいのですが、どのように書くのがスマートでしょうか?

簡単なのだとこんなのを考えましたが、プロの方ならもっと簡単に書けそうです。
6行もかかってしまいます。

$clean_value = false;
foreach($array as $key){
if($input == $key){
$clean_value = true;
}
}
0525軟式PHP05/01/26 16:03:01ID:???
in_array
0526nobodyさん05/01/26 16:15:02ID:???
【これまでのあらすじ】
サイト構築に際して重要なのは「構造」か!?「内容」か!?はたまた「理念」か!?
お馬鹿なWEB職人達の寒い議論は今日も止まらない。

ものすごろく頭の悪い発言をしてくさい5
http://pc5.2ch.net/test/read.cgi/hp/1106209097/105-
052752405/01/26 17:10:59ID:???
>>525
Thx!!phpって楽ですねー。

良く見たら送られてくるデータが配列だったので、以下のようになりました。
結局こんなにコードを書いてしまいましたが、これももっとスマートに書け
ますでしょうか?

$invalid_input = false;

if(isset($input_array)){

foreach($input_array as $value){
if(!in_array($value,$array)){
print "Error!";
$invalid_input = true;
}
}

}

if($invalid_input){
$input_array = array();
}else{
$sanitized_array = $input_array;
}
0528nobodyさん05/01/26 17:51:15ID:???
>>527
根本的に使い方がおかしい
マニュアルぐらい嫁
http://jp2.php.net/manual/ja/function.in-array.php
052952405/01/26 19:27:06ID:???
>>528
ありがとうございます。
あのマニュアルはいつも読むのですが、いつもわからないです...
あれでみなさん理解できているのですかねぇ。

needleの方の配列が、
1. どれかだけのマッチする場合だけ、TRUEを返すのか?
2. 全てマッチする場合だけ、TRUEを返すのか?

があれだけじゃわからないような...理解力不足でしょうか?

使い方もよくわからないです。
両方配列にしたらマッチしなかったので、>>527のようなコーディングを
してみました。

逆引大全も見ていましたが、配列が使えるとは書いてなかったです...
マニュアルの後の投稿されている英語のサンプルをちょっと読んでみます。
0530nobodyさん05/01/26 19:56:21ID:???
>>527

>Thx!!phpって楽ですねー。
楽なら聞くまでもないだろ
0531nobodyさん05/01/26 19:59:23ID:???
>>530
いちいちツッかんなよウゼー
0532nobodyさん05/01/26 20:00:02ID:???
おまえが低脳だからだろ
0533nobodyさん05/01/26 20:01:07ID:???
>>532
妄想乙
0534nobodyさん05/01/26 20:15:21ID:???
この手の馬鹿が増えてくると、段々と真面目にレスをしてくれる
ユーザーが減って行くんだよね・・・
0535nobodyさん05/01/26 20:18:54ID:???
>>534
妄想乙
0536nobodyさん05/01/26 20:20:40ID:???
空気嫁
0537nobodyさん05/01/26 20:21:32ID:???
おまえが嫁デブ
0538nobodyさん05/01/26 20:40:38ID:5qrlpz1Z
<?php
// カウンタファイル名の設定
$counterfile = "counter.dat";
// ファイルオープン。未作成の場合は新規作成。
$mode = file_exists($counterfile) ? "r+" : "w";

本に載ってたアクセス・カウンタの冒頭からのスクリプトなんですが、
$modeの行の後半の?と:の意味が解りません。他の本を
見てもネットで検索しても解説しているところを見つけられな
かったのですが、これはどういう意味があるんでしょうか?
0539nobodyさん05/01/26 20:57:22ID:???
>>538
3項演算子。それでググれば分かると思う。
0540nobodyさん05/01/26 21:21:27ID:???
>>538
$foo = $flag ? '1' : '2';
は
if($flag) $foo = '1';
else $foo = '2';
と一緒ってことだよ。
使い慣れるとめちゃ使い易いからガンバレ。
0541nobodyさん05/01/26 21:27:59ID:???
>>538
PHP 実践のツボ セキュアプログラミング編のやつか
0542nobodyさん05/01/26 21:56:15ID:???
phpって楽ですねー。
0543nobodyさん05/01/26 23:14:44ID:???
phpって楽ですねー(笑)
0544nobodyさん05/01/26 23:57:38ID:???
おまえら飽きてるのか
0545nobodyさん05/01/27 00:15:56ID:???
おまえら飽きてるのか
0546nobodyさん05/01/27 00:43:43ID:???
何組?
何組?
言って?
何組?
0547nobodyさん05/01/27 01:15:30ID:???
確かにPerlばっかやってからPHPに移転すると爽快な気分になる
0548nobodyさん05/01/27 01:17:44ID:???
うむ
0549nobodyさん05/01/27 01:22:17ID:???
そうかい
0550nobodyさん05/01/27 09:12:00ID:???
Thx!!phpって楽ですねー。
0551nobodyさん05/01/27 11:31:30ID:???
array_popとarray_shift及びarray_unshif及び$hoge[]=''
の処理速度の検証をされた方はいらっしゃいません
でしょうか?
何となく気になった・・・自分でやれよ!!笑
0552nobodyさん05/01/27 11:41:06ID:???
た、楽しい・・・ですねぇえぇぇええええ
0553nobodyさん05/01/27 12:22:11ID:9YUdbfEg
質問もないことだし無理してスレを進めなくてもいいんでない
0554nobodyさん05/01/27 12:30:41ID:???
>>553
>>551の立場が…
0555nobodyさん05/01/27 12:33:10ID:D/dtmk8n
               _,..----、_
              / ,r ̄\!!;へ
             /〃/   、  , ;i
             i,__ i ‐=・ァj,ir=・゙)
             lk i.l  /',!゙i\ i
             ゙iヾ,.   ,..-ニ_ /
             Y ト、  ト-:=┘i  < 敢えて言おう!PHPはCGI言語のチャンピオンだと!
              l ! \__j'.l
              」-ゝr―‐==;十i      _,r--――、
             .ト、.j.!レ' ̄三! >ーr‐r‐r‐<  _,.r<"「 l_____
     ____,..r--r=ヾヽj,r―'"≦__ ̄ ̄r―'"\\ \r",.-、, \
    ∧   ト-'‐'"三へ>ト-‐'"~    ゙i  /       \\(_.人 ヽ._ ヽ
    レ'へ._ノi 「 \ ゙l //./",「 ̄/ / /       ヽ-ゝ. \   /
    レ'// .l l   ! ! i/./ ./  /  / /         ,(  \  ノハ
    レ'/  .! !   i ゙'!  ̄ ∠,  /  ヽ._        ,ター  '",〈 !
   /゙" ,r'" .l‐=ニ゙,「l ! 「 ̄!. /./   ー=='       .l.ト、. -‐'"/!.ト,
  /   .ト-  ゙ー―┘!└‐'='-‐"   ヽ._/   、     トミ、 ̄ ̄._ノノli\
0556T05/01/27 12:35:22ID:oDNRzBsV
質問です!!

GETメソッドによってURLにつなげて変数を他のページに渡す
場合、変数が丸見えになってしまうのを防ぐために、urlencode
などが使えるとのことですが、この関数では英数字以外の文字しか
エンコードしないのですよね?

となると、変数名および変数の値自体が全て英語や数字の場合、
urlencodeでエンコードしても意味がないと思うのですが、
英数字をGETで渡す必要があるケースで、セキュリティ上これを
丸見えにしないですむようなエンコードの関数、および方法は
ないでしょうか?

初心者のため、ご教授よろしくお願いします!
0557nobodyさん05/01/27 12:37:45ID:???
>>556
無い

↓ 次の質問どうぞ
0558nobodyさん05/01/27 12:40:18ID:???
変数じゃなくて$_GETのキーだろ。
んでその「セキュリティ上の理由」とやらを聞かせてもらおうか。
0559nobodyさん05/01/27 12:52:42ID:???
>>556
>変数が丸見えになってしまうのを防ぐために、urlencode

その認識に大きな誤りがあることを誰か指摘してあげてください。
0560T05/01/27 12:56:41ID:oDNRzBsV
すみません、最近やりはじめたばかりで知らないので。。。
そういう理由ではないんでしょうか?
0561nobodyさん05/01/27 13:26:45ID:???
>>556
urlencodeって記号とかの文字をそのままurlとして渡すと変になるからするんだよ。
暗号とかじゃないよ

0562nobodyさん05/01/27 13:31:27ID:???
>>560
インターネットを使う上での約束事にRFCというものがあって、
その中のRFC 2396 (3986でobsoleteされた?) に URL(URI)の事が書かれている。
URLに使える文字や使えない文字を含めたい時の扱い方も定義されていて、
それに基づいて作られたのがurlencode関数ってことになる。

で、>>556の質問については、セッションやcookieを使ったらいいんじゃないかな。
0563T05/01/27 14:08:51ID:???
>>562
GETで渡さなきゃいけないと言っているでしょうが。
質問をよく読んでください。
0564nobodyさん05/01/27 14:35:46ID:???
>>Tさん
ユーザに変数名を知られても問題無い様な仕組みにしないといけないんじゃないかな?



0565nobodyさん05/01/27 15:22:41ID:???
>556
>>557
0566nobodyさん05/01/27 16:13:48ID:???
GETでは見られてもよいセッションIDのみ使う
大事な情報はサーバ内でセッション管理
ってことだろ >>563
0567nobodyさん05/01/27 17:26:17ID:???
>>566
いんや〜〜・・・
入力フォームのmethodをgetにしないといけないんだろ。
(そんな状況は旧J-PHONE向けにしか思い当たらんが…)

ん?そもそも旧J-PHONE向けのサイトだったら、
引数付きのURLなんか見れないんだから、意味不明か…

「GETしか駄目」な状況が見えない…
0568nobodyさん05/01/27 18:03:38ID:Es6FJ1X7
>>517
>>513 のサンプル間違ってるか??
漏れ的には正しいと思うのだが??
0569nobodyさん05/01/27 18:04:06ID:???
あ? もう百回読んでこい低脳
0570軟式PHP05/01/27 19:49:35ID:???
>>567
DDI Pocket用(非ブラウザ)かも。なんかメール形式でコンテンツ飛ばすやつ。
0571nobodyさん05/01/27 20:08:34ID:???
かんすぅ〜〜〜〜、へんすぅう〜〜〜〜〜
ごっちゃごちゃぁ〜〜〜〜〜
057253805/01/27 21:23:09ID:???
(MySQLでドツボにハマり中で遅くなったっす。)

>>539 3項演算子っていうのか。何で本に載ってないんだろう。
オライリーの本なら載ってんのかなぁ。

>>540 丁寧にありがと。よく解ったっす。

>>541 そうだす。
0573T05/01/27 22:03:03ID:oDNRzBsV
おはようございます。こちらは今、朝です。。。
一晩寝て起きたら誰か私のフリして書き込まれてますね。
563は私ではありませんので。

561さん、562さん、564さんをはじめコメントいただいた方、
ご親切にどうもありがとうございました!!
なるほどです。勉強になりました。
(ちなみにほんもののTです。)
0574nobody05/01/27 23:32:06ID:???
>556
base64_encode()
base64_decode()
とかどお?

ttp://php.s3.to/man/function.base64-encode.html
0575nobodyさん05/01/28 11:18:07ID:7CVjKDTn
すみません。
PHPで、ある文字列に特定の文字が何個入っているか
調べてくれる関数ってありませんでしょうか?
0576nobodyさん05/01/28 11:25:30ID:???
substr_count()
■ このスレッドは過去ログ倉庫に格納されています