

次のようなプログラムを描きました。
///////////////////////////////////////////////////////////////
$A1 = $_POST['A1'];
$B1 = $_POST['B1'];
$fp = fopen("data.dat", "a+");
flock($fp, LOCK_EX);
while($line = fgets($fp)){
list($A2,$B2) = explode("^", $line);
if($A1 == $A2 && $B1 == $B2) echo "成功";
else echo "ログイン失敗";
}
////////////////////////////////////////////////////////////////
ここでdata.datの内容は…
AAA^AAA
BBB^BBB
CCC^CCC
とします。
フォームから、A1=AAA,B1=BBBを与えたとき、
「成功」が出ると思っていたのですが、「失敗」と出てしまいます。
いろいろ考えてみたのですが、解決に至らず質問することにしました。
ご指摘、お願いします。
尚、フォームから正確に入力されていることと、
分岐のところを「if($A1 == $A2)」とすると、
正常に動くことは確認できました。
よろしくお願いします。

No.2ベストアンサー
- 回答日時:
ループ1回目 A2=AAA B2=AAA\n
ループ2回目 A2=BBB B2=BBB\n
ループ3回目 A2=CCC B2=CCC\n
となります。
>フォームから、A1=AAA,B1=BBBを与えたとき、
>「成功」が出ると思っていたのですが、「失敗」と出てしまいます。
これでは、ループのいずれの回でも「成功」になるはずがありません。
フォームから、A1=AAA, B1=AAAを与えて、プログラムを
while($line = fgets($fp)){
→ while($line = rtrim(fgets($fp))){
に変更すれば、ループの1回目は成功、2回目/3回目は失敗になります。
>フォームから、A1=AAA,B1=BBBを与えたとき、
>「成功」が出ると思っていたのですが、「失敗」と出てしまいます。
これは投稿時の記入ミスでした。失礼しました。
>while($line = fgets($fp)){
>→ while($line = rtrim(fgets($fp))){
>に変更すれば、ループの1回目は成功、2回目/3回目は失敗になります。
ズバリ解決しました。
rtrimの存在は初めて知りました。大変いい勉強になりました。
ありがとうございました。

No.1
- 回答日時:
> list($A2,$B2) = explode("^", $line);
ファイルの1行目を読んだとき、explode()によって
$A2にも$B2にも"AAA"が入ります。
フォームから$A1に"AAA"を、$B1に"BBB"を与えたのでしたら、
$B1と$B2が等しくないため、「ログイン失敗」と出力することは
正しいのではないでしょうか。
2行目を読んだときは、$A2にも$B2にも"BBB"が入ります。
やはりif文の条件を満たしませんので、「ログイン失敗」と
表示します。3行目も同じです。
(上の「補足」は間違いです。すみません)
すごく、自分で勘違いしていました。
他の方の意見も参考にしつつ、改良してみたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】特定の文字で改行(次の行)に行きたい。 3 2022/04/11 17:20
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
- Excel(エクセル) ¥マークを含むパスの処理について(マクロ、または関数) 2 2022/12/25 02:11
- 統計学 個別の期待値は小さいけど集計すると期待値は大きくなる場合とは? 4 2022/06/14 08:27
- Excel(エクセル) エクセルVBA 複数行にまたがっている選択を判定するには 2 2023/05/21 21:54
- Excel(エクセル) エクセルでIF関数中にIFERROR関数を使いたいのですが???? 5 2022/04/08 13:24
- JavaScript 電車の運賃を出すプログラムを作っています。 2 2022/06/22 09:36
- Excel(エクセル) ExcelのIF関数 2 2022/04/14 16:11
- Excel(エクセル) Excelの空文字判定について 7 2023/01/06 13:25
- Excel(エクセル) エクセル関数教えてください 3 2022/06/21 10:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ループを途中で抜けたいのですが。
-
入力した数値を倍々するプログラム
-
プログラミングの間違いを…
-
入力した文字列から母音だけを...
-
ループの特定入力終了
-
制御に関するプログラム
-
do-while文が禁止される理由
-
C言語 キーボードで入力された...
-
ゲームオーバーのプログラム
-
HEWのバグ?
-
C言語forループが完結した場合...
-
whileの途中で手続きを変化する...
-
C言語に関する質問
-
break文でループを一気に抜ける...
-
explodeと条件分岐
-
明日試験があります。アルゴリ...
-
if文を使わずに奇数・偶数を判断
-
UWSCにてある一定の動作を無限...
-
__asm int 3でのブレイクポイン...
-
階層型ニューラルネットに準ニ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
do-while文が禁止される理由
-
入力した数値を倍々するプログラム
-
ループを途中で抜けたいのですが。
-
C言語forループが完結した場合...
-
break文でループを一気に抜ける...
-
C言語、whileループを抜け出す...
-
入力した文字列から母音だけを...
-
プログラムで関数は使わない方...
-
For文の終了値を関数にしても問...
-
Cプログラムが終了しない
-
if文の中にfor文なのか、for文...
-
他言語で言うcontinue文
-
文字列を後ろから1文字ずつ表示...
-
if文を使わずに奇数・偶数を判断
-
整定時間
-
for文while文の無限ループの違...
-
excel VBA if文について
-
n重のfor文にするには?
-
特定の文字列が出てくるまでの...
-
VBScriptでSQLに接続し、CSV出...
おすすめ情報