• ベストアンサー

数の合計でのエラーチェック

こんにちは。 手袋の注文フォームを作ろうとしています。 まずHTMLで数量を入れるフォームを作りPHPで手袋の注文数が0か10でなかったらエラーを返すスクリプトを組もうとしています。 PHPのスクリプトを $sizess = $_POST['sizess']; $sizes = $_POST['sizes']; $sizem = $_POST['sizem']; $sizel = $_POST['sizel']; $size_goukei = ($sizess+$sizes+$sizem+$sizel); $size_gokei = (int)$size_goukei; if(strlen($size_gokei) != 0 | strlen($size_gokei) != 10){ print("合計を10にして下さい。<br />\n"); print("<a href=\"A.html\">戻る</a></font>"); } としていますが、合計を10にしてもエラーを返します。 おそらく変数の足し算が間違えていると思うのですが、どうしていいのか分かりません。すみませんが、何方かご教授を頂けないでしょうか? よろしくお願いします。 ※HTMLからPOSTでのデータの受け渡しはコピペで作っているので間違えてはいないと思います…。 すみませんが、よろしくお願いします。

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

  • ベストアンサー
  • rucifer
  • ベストアンサー率46% (6/13)
回答No.5

簡潔にしてみました。 このままで動作します。 <?php $arrItem =& $_POST; $total = 0; foreach ($arrItem as $key => $val){ $total = $total + intval($val); } print "合計は" . $total . "です。<br>"; if ($total == 0 || $total == 10){ // 正しい時の処理 }else{ // 正しくない時の処理 print("合計を10にして下さい。<br />\n"); print("<a href=\"A.html\">戻る</a></font>"); } ?>

amountainblast
質問者

お礼

ご回答ありがとうございます。 さすが専門家の方ですね。 私も始めは送られてくるデータを配列に格納しようと思っていたのですが,どうにもやり方がわかりませんでした… なるほどこのようにスクリプトを組めばいいんですね。大変参考になりました。ありがとうございます。

その他の回答 (4)

  • chupark
  • ベストアンサー率41% (90/218)
回答No.4

 再び回答にきました。  正直、関数をうろ覚えのまま回答してしまいましたが、#2の方の回答を拝見して、あ、本当だって思っちゃいました。    strlen関数を使う意味はこの場合なさそうですよね。  最初の回答も訂正します。    今回の場合、フォームがどのようになっているのかがわかりませんが、数値しか送られてこないという前提の元で組むのであれば変数は$size_gokeiにそのまま演算してもよいかもしれません。    なぜ条件分岐が通らないかをテストする際には、var_dump や echo などを使って $size_gokeiの中身を画面に出力し、何が格納されているかを見てみるとよいですよということが言いたかったのです。

amountainblast
質問者

お礼

何度もありがとうございます。 フォームからは数値しか送られてきませんので、変数はそのまま演算します。

回答No.3

こんにちは、横から失礼します。 >$size_gokei != 10 >とかでいいのでしょうか? いーけど、 >注文数が0か10でなかったらエラーを返す ってのは、0はOKってこと? だったら、条件をorでつないじゃだめ。 if($size_gokei != 0 || $size_gokei != 10){ だと、 1つめの条件「0でない」 2つめの条件「10でない」 以上のどちらか片方の条件、もしくは両方が 成り立つときに{}内を実行するんで、 例えば$size_gokeiの値が10のとき、 1つめの条件が成り立つので{}内は実行される。 if($size_gokei != 0 && $size_gokei != 10){ って、andにしないと。 読み違えてたら、ごめんなさい。

amountainblast
質問者

お礼

ありがとうございます。 その通りでAndにしないといけませんでした…。

  • taba
  • ベストアンサー率61% (349/567)
回答No.2

strlen($size_gokei) != 10 これはコピーミスですか? strlen関数は文字列の長さを見るのですけど。

amountainblast
質問者

お礼

ご回答ありがとうございます。 普通にstrlen関数を使っていました。 strlen関数は文字列の長さを見るんですね… っということは今回のような数字をみる場合は単純に $size_gokei != 10 とかでいいのでしょうか? よろしくお願いします。

  • chupark
  • ベストアンサー率41% (90/218)
回答No.1

 $sizessなどのPOSTから受け取った変数の中身ですが、ひょっとして文字列等になっていませんか?    $size_goukei へ演算するところで、 $size_goukei = (strlen($sizess) + strlen($sizes) ... というように数値へ変換が必要じゃないでしょうか?    まず、var_dump($size_goukei)で$size_goukeiをダンプしてみればいかがでしょう?

amountainblast
質問者

お礼

ありがとうございます。 早速試してみましたが変化がありませんでした。 すみませんが、もう少し詳しく教えて頂けないでしょうか? ダンプって何ですか?

関連するQ&A