• ベストアンサー

URLに含まれた変数の値が0のときの動作

はじめて質問させていただきます。よろしくお願いいたします。 質問ですが、 http://xxx.xxx.co.jp/xxx/index.php?a=situmon&cid=0 の時に、 $line="./test.txt"; for($i=0;$i<sizeof($line);$i++) { list($title,$comment)=explode("<>",$line[$i]); if($cid == $i ) { echo $title . "<hr>".$comment . "<br>\n"; } } このようなスクリプトで一行取り出したいと思っています。 ですが、$cidが 0 以外の場合は取得できるのですが。 0 の場合取得できません。 どのようにすれば取得できるようになるのかご教授ください。 ------------------ PHP Version 4.3.10 register_global=on $line="./test.txt"; for($i=0;$i<sizeof($line);$i++) { list($title,$comment)=explode("<>",$line[$i]); if($cid == $i ) { echo $title . "<hr>".$comment . "<br>\n"; } }

質問者が選んだベストアンサー

  • ベストアンサー
回答No.7

まず、最初の質問にあるスクリプトをこちらでテストしましたが、正常に動きました。 test1<hr>テストデータ1 <br> というコードが出力されてます。 で、 >おっしゃるとおりデバッグメッセージ自体表示されません。 となるとスクリプトの問題じゃないような気がします。 cid=0の時、ブラウザの表示はどうなるんですか?全くの白紙ですか? HTTPのログを見て下さい。何か記録は残っていますか?エラーなどは残っていませんか?

panda_neko
質問者

お礼

ご回答ありがとうございます。 cid=0の時ブラウザ表示は test1  test2 ・ ・ リンクがついています(test.php?cid=0 test.php?cid=1 のように) と、なります。 つまり、アンカーを押した画面そのままです。 私も単体で動かしてみたところ作動いたしました。 実際このスクリプトは関数化して動かそうとしていましたので、今回の問題点は他にあるようです、再度スクリプトすべてを見直してみます。 皆様、ご教授ありがとうございました。 また、よろしくお願いいたします。

その他の回答 (6)

  • togix
  • ベストアンサー率50% (3/6)
回答No.6

------ index.php (ここから)-------------- <?php error_reporting( E_ALL ); $line = file("./test.txt"); $cid = intval( $cid ); echo "cid = "; var_dump( $cid ); echo "<br>"; echo "lines = "; var_dump( $line ); echo "line = "; var_dump( $line[$cid] ); echo "<br>"; list($title,$comment)=explode("<>",$line[$cid]); echo "title="; var_dump( $title ); echo "<br>"; echo "comment="; var_dump( $comment ); ?>  ------ index.php (ここまで)-------------- というスクリプトに cid=0 の引数をつけてアクセスするとどのように表示されますか? > $cidが0のときにはスクリプトによるチェックすら行われずにスルー 「スクリプトによるチェック」とはどの部分の処理ですか?

panda_neko
質問者

お礼

ご回答ありがとうございます。 ご提示されましたスクリプトをためさせていただきました。 -------- cid=0 の引数の場合は test1 test2 test3 test4 test5 test6 test7 test8 -------- このようになりました。 スクリプトによるチェックというのは誤解を招く発言でした申し訳ありません。 どう言っていいのかわからないのですがcid=0の時には まったく反応がないので、cid=0自体がスクリプトに引き渡されているのか疑問です。ということです。

panda_neko
質問者

補足

補足です。 データの中身は test1<>テストデータ1 test1<>テストデータ2 ・ ・ ・ のようになっております。

回答No.5

うーん、謎ですね。でも謎な時ほど一つ一つ確認していくしか方法はないですから、とにかく疑わしい所をvar_dumpして値、型を確かめていくしか無いと思います。 $cid=0でリクエストした時、 var_dump($line[0]); var_dump($line[$cid]); の値はどうなってますか? それに加えて var_dump(explode("<>",$line[0])); var_dump(explode("<>",$line[$cid])); これらの値も気になりますね。 GETで入力された$cidは恐らく文字列型になってると思うん ですが、そのせいで$line[0]ではなく$line["0"]になってる のかなぁなんて思いました。 $cid=0の時、スクリプトでチェックされないという事は、このデバッグメッセージ自体も表示されないって事ですか?

panda_neko
質問者

お礼

すべてにおいてリクエストを試してみましたが。 cid=0 の場合URLからのリクエストに一切反応いたしませんでした。 おっしゃるとおりデバッグメッセージ自体ひょ字されません。

  • togix
  • ベストアンサー率50% (3/6)
回答No.4

$line = file("./test.txt"); したあとに、 var_dump( $cid ); var_dump( $line ); してみて、 $cid に 0、 $line[0] に期待する文字列が入っているか確認してみてはどうでしょうか。

panda_neko
質問者

お礼

ご回答ありがとうございます。 var_dump( $cid ); var_dump( $line ); に関しまして確認いたしましたが。 中身は正しく入っていました。 URLを押して何度か確認をしている際に思ったのですが。 $cidが0のときにはスクリプトによるチェックすら行われずにスルーされているように思えるのですが。 そのようなことはあるのでしょうか? たびたび質問となりまして申し訳ありませんが、よろしくお願いいたします。

回答No.3

N01です。すみません、嘘付きました。 register_global=onって書いてあるじゃん。 $cidで指定された1行を取得、という事でいいのかな。であれば $line = file("./test.txt"); list($title,$comment)=explode("<>",$line[$cid]); echo $title . "<hr>".$comment . "<br>\n"; だけで動作しないですか? で、0の時だけ取得できないという事ですが、冒頭に余計な改行が入ったりはしていないですか?

panda_neko
質問者

お礼

ご回答ありがとうございます。 ご指摘の $line = file("./test.txt"); list($title,$comment)=explode("<>",$line[$cid]); echo $title . "<hr>".$comment . "<br>\n"; だけで動作いたしました。余計なループをさせていたようです。 ただ、やはり0の時には取得いたしません。 余計な改行ですが、確認いたしましたが無いように思えます。 0をnullと判断しているかもしれないと、nullに関しましても取得するようにもしてみたのですが取得いたしません。

  • togix
  • ベストアンサー率50% (3/6)
回答No.2

> $line="./test.txt"; これって $line = file("./test.txt"); とかじゃなくて?

回答No.1

サンプルか何かをご覧になって組んだのでしょうか? $cidのところを$_GET["cid"]と直してみて下さい。 参考URLのNo5で原因を説明しています。

参考URL:
http://okweb.jp/kotaeru.php3?q=1462496

関連するQ&A

専門家に質問してみよう