###やりたいこと
フォームに「返信を希望する」のような、オンかオフのみのチェックボックスがあるのですが、
オン(デフォルト)の時は希望する、オフの時は希望しないと出力されるようにしたいです。
###現状
下記コードにて、issetの時はチェックをオンでもオフでも「希望する」が返ってきてしまい、
emptyの時はどちらの場合も「希望しない」が返ってきます。
###ためしたこと
index.php(value値を外したりcheckedを外したりreply[]→replyにしたりしました。)
php
1<input id="reply" type="checkbox" checked="checked" name="reply[]" value="希望する"/>返信を希望する
受取側のphp
php
1 //返信希望判定 2if (isset($_POST['reply'])) { //issetの時はオンでもオフでも希望する、emptyの時はどちらの時も希望しないが返ってきます 3 $reply= "希望する"; 4 } else { 5 $reply= "希望しない" 6 }
ちなみに、受け取り側のPHPを以下のようにすると、オンとオフの時でそれぞれtrue、falseとなります。
php
1 $reply= $_POST["reply"];
以上、ご教示いただけないでしょうか。
まず、$_POST['reply']に、チェックつけた時とつけてない時それぞれどんな値が入ってるか確認して、質問文にその値の状態も記載して下さい。
issetは、変数が存在するかしないかしかみないので、
変数が存在するとどんな値が入っていようと、trueを返しますので条件としては不十分です。
echoなどを使用するとエラーになってしまい処理を続行できなくなってしまいます。
メール送信で非同期処理を行っているためでしょうか。。
var_dumpで出し、
次行でexit();
を行い、いったんそこで処理を止めるといいかと。
$_POST['reply']、取得できたようですね。
var_dumpでだしたとき、
String(4)になりましたか?それとも、Booleanになりましたか?
もし文字列(Stringの方)が入っていたとしたら、
ifで条件式にした時は、trueだろうが、falseだろうが、文字列なので、
比較演算するとtrueになります。
非同期なので、phpの前にjsの処理がありますが、jsの処理内でconsole_logをするとtrueやfalseで返ってきて、追記の通りPHP側でも実行すればtrueやfalseで返ってきます。
しかし、前述の通りphpにvar_dumpなどを書いてしまうとエラーとなってしまいvar_dumpの結果を見ることができないのです。。
(15:17 齟齬があったので編集しました)
いや、それが本当なら、
$reply= $_POST["reply"];
はどうやって確認したんですか?
php構文ですよね?
これもjs上での話(trueかfalseが入ってるうんぬんの話)だったら、まったく話違ってきますよ。
あくまで、JS上でわかってる値なんですね?
だったら、そう質問本文に書いてください。
そして、js上でtrue or falseなら、そのままの値でphpにPOSTしてるなら、
十中八九、PHP側では文字列に変換されて入ってるので、
Boolean値で比較できるようにしなければいけません。
"var_dumpやechoがエラーになります"と書いているのであって、
フォームからの送信結果ではfalseやtrueになります。
確認が出来ないので実行(送信まで)して確認するしかなく。
>js上でtrue or falseなら、そのままの値でphpにPOSTしてるなら
はい、そのため上記の結果となっています。
>Boolean値で比較できるようにしなければいけません。
trueやfalseという結果はBoolean値ではないのですか?
回答しましたのでご確認ください。
trueかfalseだったとしても、文字列になってしまえば、
boolean的には必ずtrueになってしまいます。
HTMLフォームからPOST送信した場合、(JSからの送信の場合でも同様)PHPで受け取ったときに、
boolean値は、文字列に変換されてしまいます。
>trueやfalseという結果はBoolean値ではないのですか?
上記のこちらの質問について、別回答をいただきありがとうございます。
回答3件
あなたの回答
tips
プレビュー