- ベストアンサー
PHP GETで飛ばす変数の中身についてのエラーと解決方法
- a.phpからb.phpに進むボタンを押したときに、エラーがない場合にa.phpに戻ってしまい$input2に「1」が入ってしまう問題が発生しています。
- エラーチェックの処理で正しく$input2に値を代入できていない可能性があります。
- PHPの勉強を始めたばかりで不足している点があるかもしれませんので、ご指摘いただければと思います。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
始めたばかりということなので、 とりあえず、原因は単なるタイポ if($input1=="1"||$input2="2"||$input3="3"){ ↓ if ($input === '1' || $input2 === '2' || $input3 === '3') { 比較のつもりが代入になっています。 ただ、慣れていても誤ってしまうことがあるので、最悪の事態に備えるため、左辺と右辺を逆に書いたりもします。 if ('1' === $input || '2' === $input2 || '3' = $input3) { // 最後は誤り このようにしておけば、もし誤って記述してしまっても、リテラルには代入できませんので、エラーメッセージで知らせてくれます。 ついでに、変数の型を意識して記述することをお勧めします。 例外もありますが、極力比較には == では無く === を、 数値を使うなら数値型で $input1 = 1; などとする。 ちなみに、提示コードの $input2 で表示された値は数値の 1 の意 ではなく、true の意です。 # true は言語構文であって値ではないので、表示されるときは 1(又は -1 など) さらについでに、気になってしょうがないので よくよく、変数の埋め込みに "Location:a.php?SID&input1=$input1&input2=$input2&input3=$input3" のような記述を見かけますが、可能な限り変数を {} で囲ったほうがいいでしょう。 "Location: a.php?SID&input1={$input1}&input2={$input2}&input3={$input3}" 又は "Location: a.php?SID&input1=${input1}&input2=${input2}&input3=${input3}" あ~それから、$input? が必ず数値ならいいですが、クエリ変数に渡すときは エスケープも忘れずに。SQL や、HTML など、なんでもそうですが、それらにはそれらのルールがあります。PHP のルールは通よしません。
お礼
yuu_xさん、とても丁寧な説明ありがとうございます! PHP始めたばかりですが、こういうミスに気づかず数日間悩み続けてたりします(泣) 誤りの指摘だけでなく、色々とご説明頂けてとても助かりました。 それから、アドバイスまで頂いてありがとうございます。 ・左辺と右辺を逆に書く ・比較には「===」を使う ・"Location:~内の変数は{}で囲う はこれから実践させて頂きます! > クエリ変数に渡すときは エスケープも忘れずに。 最後に初心者の質問で申し訳ないのですが、特殊文字のエスケープというものでしょうか? 「&」→「&」と書くとかですか??