PHP GETで飛ばす変数の中身についてのエラーと解決方法

このQ&Aのポイント
  • a.phpからb.phpに進むボタンを押したときに、エラーがない場合にa.phpに戻ってしまい$input2に「1」が入ってしまう問題が発生しています。
  • エラーチェックの処理で正しく$input2に値を代入できていない可能性があります。
  • PHPの勉強を始めたばかりで不足している点があるかもしれませんので、ご指摘いただければと思います。
回答を見る
  • ベストアンサー

PHP GETで飛ばす変数の中身

PHP GETで飛ばす変数の中身 a.php→b.phpへ進むボタンを押したとき、 a.phpのフォーム入力でエラーがあった場合はa.phpへ戻るページを作っています。 各フォームの入力チェックは正規表現で判定し、 誤った入力がされた場合は$input2="2"; 正しい入力の場合(else)は$input2=""; のような形で変数に値を代入しています。 ※$input2には「何も入らない」か「2」が入るようにしているつもりです。 入力エラー時にa.phpへ戻る記述は ------------------------------------------------------------------------------ if($input1=="1"||$input2="2"||$input3="3"){   header("Location:a.php?SID&input1=$input1&input2=$input2&input3=$input3"); } ------------------------------------------------------------------------------ のような形にしています。(長ったらしい部分は省いています。) ところが、エラーがないときにa.phpに戻ってb.phpに進まなくなってしまいました。 アドレスバーをみると【input2=1】となっており、なぜか$input2に「1」が入ってしまっているようです。 $input2には「何も入らない」か「2」が入るように記述しているつもりなのですが、 「1」が入ってしまう理由がよく分かりません。 エラーがない場合はb.phpへ進みたいので、「何も入らない」状態にしたいです。 なぜ「1」が入ってしまうのかお分かりの方がいらっしゃれば教えて頂けると嬉しいです。 ※PHPは勉強し始めたばかりなので、不足している点などあればご指摘下さい。 よろしくお願いします。

  • PHP
  • 回答数1
  • ありがとう数3

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

  • ベストアンサー
  • yuu_x
  • ベストアンサー率52% (106/202)
回答No.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 のルールは通よしません。

coconuts_musume
質問者

お礼

yuu_xさん、とても丁寧な説明ありがとうございます! PHP始めたばかりですが、こういうミスに気づかず数日間悩み続けてたりします(泣) 誤りの指摘だけでなく、色々とご説明頂けてとても助かりました。 それから、アドバイスまで頂いてありがとうございます。 ・左辺と右辺を逆に書く ・比較には「===」を使う ・"Location:~内の変数は{}で囲う はこれから実践させて頂きます! > クエリ変数に渡すときは エスケープも忘れずに。 最後に初心者の質問で申し訳ないのですが、特殊文字のエスケープというものでしょうか? 「&」→「&」と書くとかですか??

関連するQ&A

  • 変数の中に変数(と言う表現であってるのかな?)

    変数$aに1~10の数字が入っています。 さらに変数$b1~$b10があります。 これを$aと$b末尾の数字が同じものを変更したいです。 例えば、$aが2の場合、$b2を変更ですね。 $b"$a" =□□; こんな感じです。 この「$b"$a"」、どのように記述したらいいのでしょうか? 上の書き方であってますか?

    • ベストアンサー
    • Perl
  • PHPの変数の渡し方

    現在以下のような位置関係のファイルでa.phpからb.phpに変数を渡したいのですが、うまく行きません。 ├dir1 │ └a.php └dir2   └b.php a.php <?php public function a(){ $value = "test"; } ?> b.php <?php public funcition b(){ print($value); } ?> phpについてwebで調べ、a.phpで$valueをglobalにしてb.phpでは 関数内でinclude('../dir1/a.php')を記述して$GLOBALS['$value']を 使ってみたのですが、うまく値がとれませんでした。 a.phpで変数をテンプレートに設定して $smarty->Set('Value', $value); それをb.phpで取得しようとしたのですが $smarty->getTemplateVars(Value); 取得する事ができませんでした。 同じようにgeTTemplateVarsを使って別のphpでは取得出来たりするのですが、 このsmartyのスコープ?というのもわかりません。 phpScheduleItというスケジュール管理のパッケージを触っていて、 php自体初めてで深い実装が全て追えていません。 勉強不足で申し訳ないのですが、何かヒントとなる事がありましたらご教示頂けますでしょうか。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • javascriptにphpの変数を用いる

    JavaScriptでサブウインドウのフォームから親ウインドウのフォームにデータを送るプログラムを書いています。 親ウインドウのページによって処理を変えているのですが、phpの変数を使うと関数自体がエラーになってしまいます。 どう書くのが正しいのでしょうか?教えてください。 プログラムは下記です。 if(page=="0"){ window.opener.document.form_name.input_name.value=input_data; window.close(); } else{   for(i=1; i<6; i++){     var pagename = "page_"+i;     if(page == pagename){ window.opener.document.<?php echo $_GET[form_name]; ?>.<?php echo $_GET[input_name]; ?>.value=input_data; window.close();   } }

  • PHPから文字列を変数に割り当てたい

    変数aにPHPから文字列や空文字を割り当てたいのですが、 次のようなコードだと http://ideone.com/dHmbVY 「b is not defined」や「Unexpected token」といったエラーが出てしまいます・・・ 次のように var a = <?php echo 3 ?>; 文字列じゃなくて数字ならエラーが出ずに済むのですが、 どのように記述すればPHPから文字列を割り当てるとこができるのでしょうか?

  • あるファイルで使った変数を別のファイルで使いたい

    たとえば php1.php php2.php というファイルを作ったとします。 php1.phpで $A='ピーエイチピー'; $B[0]=1; $B[1]=2; という変数を決めたとき、 この変数をphp2.php の中で使うにはどうしたらいいでしょうか? 具体的には、 http:~php1.phpというホームページでフォームなどを用いて ユーザーにある変数$a,$b[0],$b[1]の値を入力させ、 その変数の値に複雑な計算をさせた結果の変数$A,$B[0],$B[1] をphp2.phpという別のページのphp内で使いたいです。

    • ベストアンサー
    • PHP
  • フォームから受け取ったデータを変数に/PHP

    入力フォームからデータを送信し、受け取ります。 <form action="index.php" method="post"> <input type="text" name="hoge"> <input type="submit"> </form> <?php echo htmlspecialchars($_POST['hoge']); ?> この時に受けったデータが、「りんご」だとして この「りんご」を変数にしたいです。 ↓ <?php $keyword = "りんご"; ?> このようにするには、 <form action="index.php" method="post"> <input type="text" name="hoge"> <input type="submit"> </form> <?php echo htmlspecialchars($_POST['hoge']); ?> の後にどのような処理をすればよいでしょうか? または初めから「$keyword」としてフォームからデータを送ることはできるのでしょうか? 何卒ご指導の程よろしくお願いします。

    • ベストアンサー
    • PHP
  • phpの変数について

    phpの変数として<?= ~ ?>は設定できないのでしょうか? 例) $test = "<?= $smple ?>" <html> <body> <p>$test</p> </body> </html> 上の記述だと文字列として扱われてしまうので、以下のように表示されてしまいます。 <html> <body> <p><?= $smple ?></p> </body> </html> 変数を使用して、通常のphp構文のように使用することはできないのでしょうか? 若しくは、同じことを実現するためには別のやり方や関数などを用いなければならないのでしょうか? 基本的なことを質問している気がしますが、どなたかご教授願います。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • PHPで変数の文字コードをまとめて変えたい

    初めまして、 PHPで変数 $a1から$a100 に入っている文字コードをまとめて変更したいのですが可能でしょうか? $a1 = mb_convert_encoding($a1, "SJIS", "auto"); $a2 = mb_convert_encoding($a2, "SJIS", "auto"); 上記のように$a1から$a100まで入力するしかないのでしょうか? 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 入力フォームからconfig.phpを変更したい

    こんにちは。 PHPで作った入力フォームから、 --config.php-- $test = '○○'; の○の部分(変数の値)を変更したいのですが、 どうすればよいでしょうか? 予定としては、 admin.phpに入力フォームを埋め込み、そこの入力フォームに入力されたものをsubmitすると、config.phpの 変数の値が変更されるという風にしたいのです。 例 1.入力フォームに"test"と入力されました。 2.それをsubmitしました。 3.すると、config.phpの変数$test が、$test = 'test'; に変更される。 どなたかお願いします!

    • 締切済み
    • PHP
  • HTMLとPHPを分けた時の変数?について

    HTMLで値などを入力し、PHPで処理をする方法として、 ネットのサンプルソースでどの様に行われているか見たところ、 HTMLにてC言語でいう所の変数らしきものが無く、 また、PHPにも書く値に等しい変数が見受けられませんでした。 HTMLで値を入力してどの様にPHPに渡っているのか分からなかったのでご教授願いたいと思い書き込みました。 参考 eweb メールフォーム・アンケートフォーム 参考にしたソースは「Sample 1:アンケートフォーム」になります http://php.eweb-design.com/1301_mail.html 何卒宜しくお願い致します。

    • 締切済み
    • PHP

専門家に質問してみよう