• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPのファイル書き込み、呼び出しにおいて)

PHPのファイル書き込み、呼び出しにおいて

このQ&Aのポイント
  • PHP初心者です。score.txtから値を代入し、送られてきた値を書き込みたい
  • 送られてきた値をscore配列に代入したいが、すべて0になってしまう
  • score.txtの値に0が入る原因と対策がわからない

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

  • ベストアンサー
  • 11spec0
  • ベストアンサー率83% (10/12)
回答No.5

ANo.4で回答した者です。消し忘れた中括弧がありますので、そちらを消してください。そうすればうまくいくと思います。 for($k=0; $k<20; $k++){ /* 更新 */ if(isset($_POST["sel_$k"])){ $score[$k] = $_POST["sel_$k"]; }else{ $score[$k] ='0'; } /* 更新 */ } ←消し忘れでエラーが発生するので{を消してください。 fputs($pointer, "$score[$k]\n"); }

hikky22423
質問者

お礼

なるほど! と思い試したのですがやはり結果は同じでした。 if分の後の$scoreの表示をしてみた結果はすべて0に…。 テキストにもすべて0が書き込まれました。

その他の回答 (4)

  • 11spec0
  • ベストアンサー率83% (10/12)
回答No.4

<?php $fname = "score.txt"; $file = fopen($fname,"r"); for($l=0; $l<20; $l++){ $sc[$l]= fgets($file); $score[$l] = $sc[$l]; } fclose($file); print_r($score); $pointer=fopen("score.txt", "w"); flock($pointer, LOCK_EX); for($k=0; $k<20; $k++){ /* 更新 */ if(isset($_POST["sel_$k"])){ $score[$k] = $_POST["sel_$k"]; }else{ $score[$k] ='0'; } /* 更新 */ } fputs($pointer, "$score[$k]\n"); } flock($pointer, LOCK_UN); fclose($pointer); ?> こちらではどうでしょうか?

hikky22423
質問者

お礼

No5へのお礼に書こうと思ったのですが書いてしまったあとなのでこちらに書きます。すいません。 勘違いしてました!! 結果が全部0にはなりません。 ただ、if(isset($_POST["sel_$k"]))をつかうと、$_POSTで送られた値すべてがまとまってtrueとして帰ってくるみたいです。(確認はしてませんが) すべての配列にnullの値も含めて入ります。 なのでif文の条件を変えたところうまく行きました。 ご迷惑おかけしました。 ありがとうございます。

回答No.3

ANo.2です。 >しかしif文を使った直後には$score[$k]の値はすべて0となっています。(これもprint_r[$score[$k]で確認済) 確認していたのですね。ごめんなさい。

回答No.2

if文の後に、print_r($score)は試されましたか? もし書き込まれたscore.txtを読み込んでから確認しているのであれば、書き込みが正常に行われていない可能性もあるのでは? もし、print_r($score)も試されているのであれば、 $score[$k] == nullではなく、is_null($score[$k])ではどうでしょう。それか、falseとしての評価ではどうですか? if(!$score[$k]) いずれにしても、==はたまに挙動不審な評価をするので、私はあまり信用していないので、なるべく空文字の評価は上記のやり方か、===で型評価も加えて行ってます。

hikky22423
質問者

お礼

試したのですがやはりだめでした。 書き込み後ですべて0が代入されていました・・・。 やっぱり=って不審な評価をするんですか。 でもissetでもダメってどういうことでしょう・・・。

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.1

> $score[$k] = $_POST["sel_$k"]; > で値が送られているのは確認済みですが、 > if文でscore配列がすべて0にされてしまうようです。 デバッグのとっかかりとして、 当該if文の直前で$score[$k]の値を printなりechoなりしてみてはいかがでしょうか。

hikky22423
質問者

お礼

回答ありがとうございます。 直前でprint_r($score[$k])をすると、$score[$k]にはPOSTで送られた値が代入されています。 (例えば2番目と20番目に値を入れると Array[0]⇒[1]⇒2[2]⇒… [19]⇒4 という風に実行されます。) つまりif文を使う前に$score[$k]の配列には数値が入っているという事ですよね? しかしif文を使った直後には$score[$k]の値はすべて0となっています。(これもprint_r[$score[$k]で確認済) ということは、$score[$k]には値が入っているのに$score[$k]はnullとみなされるという事になるます。 そんなことあるんでしょうか?