• ベストアンサー

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"; } }

  • PHP
  • 回答数7
  • ありがとう数9

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

  • ベストアンサー
回答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

  • txtを読み込んでtableに入れる方法

    3 3 村田 6 3 岡田 5 5 木村 1 1 田中 2 1 山田 4 1 江川 1.txtこのタブ区切りファイルで真ん中の列の 335111で 同じ数値の行を<table><td></td></table>に入れたいと思ってます。 <table><td> 3 村田 6 岡田 </td></table> <table><td> 5 木村 </td></table> <table><td> 1 田中 2 山田 4 江川 </td></table> 真ん中の列は同じ数字は上下隣同士以外は来ません。同じ数字は絶対に離れずくっつくことを前提です。1番左列は同数は存在しません。数値関連を比較して行くのかと調べたのですがsortなどしか出て来ず、訳が分からなくなってきました。どのように記述すればいいでしょうか?ご教授ください。 $log=file("1.txt"); for($i=0;$i<count($log);$i++){ echo"<table border=1><td>"; $list=explode("\t",$log[$i]); if($list[0]==$list[1]){//親なら echo"ー親ー<BR>\n"; echo"$list[0]<BR>\n"; echo"$list[2]<BR>\n"; echo"</td></table>"; } if($list[0]!=$list[1]){//子なら echo"ー子ー<BR>\n"; echo"$list[0]<BR>\n"; echo"$list[2]<BR>\n"; } echo"</td></table>"; } これだと親子別々に・・・。

    • ベストアンサー
    • PHP
  • 掲示板の表示について

    掲示板を作っています。 書込みなどの表示がうまくいかず困っています。 試行錯誤していますが、うまくいきません。 下記のように表示したいのですが、 タイトル.ああ               名前.いい 記事NO.うう 下記のように表示されてしまうのです。 タイトル.ああ いい うう 名前.ああ いい うう 記事NO.ああ いい うう 問題のソースは以下の通りです。 <?php $data = file("../php/test1.txt"); list($title, $namae, $body) = explode("\t", $data); for($i=sizeof($data)-1;$i>=0;$i--){ print "タイトル.${data[$i]}<br>\n名前.${data[$i]}<br>\n記事NO.${data[$i]}<br>\n<hr>"; } ?> どなたかおわかりの方いましたらお願い致します。

    • ベストアンサー
    • PHP
  • 【PHP】 重複した値を取り除く処理

    【log.txt の中身】 1,スイカ 2,メロン 3,メロン 4,ミカン 5,スイカ 6,ミカン 次の【file01.php のソース】まではやってみましたが… 【file01.php のソース】 $log = file("log.txt"); for($i=0;$i<sizeof($log);$i++){ list($log1,$log2) = explode( "," , $log[$i]); print "$log2<br>\n"; } …この様にすると次の【出力結果】の様にブラウザーに表示されてしまいます。 【出力結果】 スイカ メロン メロン ミカン スイカ ミカン 次の【出力結果】の様に、重複した値だけを取り除きブラウザーに表示させたいのですが、どうしたら良いのでしょうか?教えて下さい。 【出力結果】 スイカ メロン ミカン

    • ベストアンサー
    • PHP
  • ループ処理について

    テキストファイルにある数字が存在するかしないかの判断をしたいですがうまくいきません、どこが悪いのでしょうか・・・。 <?php $log=file("1.txt"); for($i=1;$i<count($log);$i++){ echo"<a href=1.php?no=$i>$i</a> ";} echo"<BR><BR><BR><BR><BR>"; if ($_GET["no"]) { $no = $_GET["no"]; $log=file("1.txt"); for($i=0;$i<count($log);$i++){ $list=explode("<>",$log[$i]); if($no==$list[1]){echo"$list[0]"."はOk<BR>";} elseif($no!=$list[1]){echo"";} } if($no!=$list[1]){echo"存在しません";} } ?> 1.txtの中身は 7<>7<> 8<>7<> 5<>5<> 6<>5<> 3<>3<> 4<>3<> 1<>1<> 2<>1<> 右の数字(7・5・3・1)が存在確認対象で、 ?no=数字で呼び出し、getでの呼び出し数字が右に存在すれば左の数字を表示します。 存在しなかったら 存在しません という言葉を1回だけ表示します。 no=1とno=2 no=4 no=6だけ上手くいくのですが、他はokと存在しませんが両方混在してしまいます。no=3 5 7も1 2のようにしたいのですが、 どう記述すれば上手い具合にいくでしょうか? よろしくお願い致します。

    • 締切済み
    • PHP
  • 掲示板で確認画面からデータを送るには

    過去に同じような質問もありましたが、いろいろ検索してこちらの過去ログを拝見しても解決できなかったので質問させてください。 掲示板で確認画面から掲示板へ書込みのデータを送りたいのですが、なかなかうまくいきません。 以下が掲示板のソースと確認画面のソースです。 「掲示板のページ」 <?php if ($_POST["write"] == "書込") { $log = $title . "\t" . $namae . "\t" . $body . "\n"; $fp = fopen("../php/test1.txt","a"); fwrite($fp,$log); fclose($fp); } $data = file("../php/test1.txt"); for($i=sizeof($data)-1;$i>=0;$i--){ list($title, $namae, $body) = explode("\t", $data[$i]); print <<<eof タイトル:{$title}<br><br> 名前:{$namae}<br><br> 記事NO.${i}:{$body}<br> <hr> eof; } ?> 「確認のページ」 <form name="form" action="./form.php" method="POST"> <input type="hidden" VALUE="$title,$namae,$body" > <input name="write" type="submit" value="書込"> </form> おわかりの方いましたらご教授お願いします。

    • 締切済み
    • PHP
  • 投稿番号、投稿削除と投稿修正機能

    こんにちわ。今、PHPのみで掲示板の機能の一つである、投稿番号(投稿記事に番号をふりたい)と投稿者自身が投稿を削除する(削除キーを使用して8文字以内とかにしようかと)機能と投稿者が投稿を修正できる機能を作成したいと思っているのですが、なにか簡単な例でいいですので記述していただけないでしょうか?削除キーはテキストボックスで作りました。webのサンプルソースをみても組み込めないでいます。だいぶ、省略していますが、下記のようになスクリプトを組んでいます。 // ファイル書き込み  $file = fopen("data.txt", "w"); fwrite($file, "$name\t$mail\t$body\t$dt\n".implode("", $data)); $i = 1; foreach ($data as $value) { if($i < 100) { fwrite($file, "$value"); $i++; } } fclose($file); header("Location:subject03-02.php"); exit; } //投稿表示 $data = file("data.txt"); $i = 1; foreach($data as $value){ $view = explode("\t", $value); list($name, $mail, $body, $dt) = explode("\t",$value); if( $i < 11 ){ if($mail== ""){ echo "お名前:$view[0]$view[3]<br>"; echo "本文:$view[2]<br>"; echo '<hr size="1" width="80%"><br>'; } else { echo "お名前:<a href=\"mailto:$mail\">$view[0]</a>$view[3]<br>"; echo "本文:$view[2]<br>"; echo '<hr size="1" width="80%"><br>'; } } $i++; }

    • ベストアンサー
    • PHP
  • テキストデータから指定行の削除

    phpでサイトを作っています。 テキストデータを一行ずつ表示させ、指定した行を削除したいのですが、どうすればいいのでしょうか? -- data.txt -- aaa,data1, bbb,data1, ccc,data1, ddd,data1, -- php -- <?php $del=$_POST['del_no']; if($del!=""){ $data_all = file("data.txt"); for($i=0;$i<count($data_all);$i++){ $data_array = explode(",",$data_all[$i]); if($data_array[0]!=$del){//削除データ以外を再書き込み $txt="$data_array[0],$data_array[1],\n"; $fp = fopen("data.txt", "w"); flock($fp,1); foreach ($txt as $line) {// 1行ずつファイルへ書き込み? fwrite($fp, $line); } fclose($fp); break; } } } ?> <b>data list</b> <? $data_all = file("data.txt"); for($i=0;$i<count($data_all);$i++){ $data_array = explode(",",$data_all[$i]); echo "$data_array [0]<br />"; echo "<form method=\"post\">"; <input type=\"hidden\"name=\"del_no\" value=\"$data_array[0]\" />";//削除するデータをPOST echo "<input type=\"submit\" value=\"削除\" />"; echo "</form>"; } ?> こうすると、テキストデータが白紙になってしまいます。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 投稿記事を論理削除2

    PHPで掲示板の機能の一つである論理削除機能を作成しようと思っています。削除キーに削除パスワードを入力,投稿番号を指示したときに投稿者の記事を削除(物理削除ではありません)するようにしたいのです。スクリプトの一部を記述します。全文は補足に記述させていただきます。削除パスワードの送り方、そのパスワードかを確認、投稿番号の指示の仕方などお教えいただけないでしょうか? 流れ的には記事を書くときに、削除キーに削除パスワードを入力、 投稿を送信したあとに、投稿番号を指示して削除キーに入力した 削除パスワードを入力、削除ボタンを押して投稿を削除としたいのです。 $data = file("data.txt"); $i = 1; foreach($data as $value){ $view = explode("\t", $value); list($name, $mail, $body, $dt) = explode("\t",$value); if( $i < 11 ){ if($mail== ""){ # 削除ボタンが押されたら if($submit =="削除"){ $submit = $_POST["delete"]; } #このパスワードなら if($_delkey == "0123456789"){ $_POST["num"]; } if ( $num == $view[3] && $pass == "0123456789"){ } echo "お名前:$view[0]$view[3]<br>"; echo "本文:$view[2]<br>"; echo '<hr size="1" width="80%"><br>'; } else { echo "お名前:<a href=\"mailto:$mail\">$view[0]</a>$view[3]<br>"; echo "本文:$view[2]<br>"; echo '<hr size="1" width="80%"><br>'; } } $i++; }

    • ベストアンサー
    • PHP
  • phpでfopen()やfputs()が使えない

    CGIを使ってやりたいことがあり、PHPを独学で学び、レンタルサーバーで実験をしているのですが、fopen()やfputs()をつかうとエラーのようになります。 これがそれです。 http://pgc.sub.jp/form.php サーバーはlolipopというところを使っているのですが、こちらのほうが許可していないということでしょうか。 ソースは以下のようになります。 <html> <head> <title>実験掲示板</title> </head> <body> <h1>実験掲示板</h1> 書き込む内容を入力してください。<hr> <form name="form" action="./sample01.php" method="POST"> <input name="body" type="text" size="40"> <input type="submit" value="書込"><hr> </form> <?php $data = file("./data.txt"); for($i=0; $i<sizeof($data); $i++){ print "記事NO.${i}:${data[$i]}<br>\n<hr>"; } ?> </body> </html> <?php $body = $_REQUEST["body"]; $body = $body."\n"; ?><html> <head> <title>Sample01</title> </head> <body> <?php $fp = fopen("./data.txt","a"); fputs($fp,$body); fclose($fp); echo "書き込み完了<br>", "<a href=\"./form.php\">戻る</a>"; ?> </body> </html> プラス空のdata.txtファイル また、大学のPCを使用しているのですが、 http://localhost/ をすると 「Connection Failed」となってしまい、localhostでの実験ができません。これは大学側が禁止しているためでしょうか?研究室のものですので、IPアドレスはそれぞれに割り当てられているのですが。

    • ベストアンサー
    • PHP
  • フォームの値をまとめて取得する関数

    以下のようなフォームから値を取得するときに、(2)のような関数化したいと思っていますが、思うように取得できません。どこが問題かアドバイスください。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=sjis" /> <title>sample</title> </head> <body> <form action="" method="post"> 名前:<br /> <input type="text" name="name" size="30" value="" /><br /> コメント:<br /> <textarea name="comment" cols="30" rows="5"></textarea><br /> <br /> <input type="submit" value="登録する" /> </form> </body> </html> (1)問題なく表示できる <?php  foreach(${"_" . $_SERVER["REQUEST_METHOD"]} as $k=>$v) {   ${$k}=$v;  } echo "名前:$name<br>"; echo "コメント:$comment<br>"; ?> (2)表示できない? <?php function Request() {  foreach(${"_" . $_SERVER["REQUEST_METHOD"]} as $k=>$v) {   ${$k}=$v;  } } Request(); echo "名前:$name<br>"; echo "コメント:$comment<br>"; ?>

    • 締切済み
    • PHP

専門家に質問してみよう