• ベストアンサー

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

こんにちは。 手袋の注文フォームを作ろうとしています。 まず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でのデータの受け渡しはコピペで作っているので間違えてはいないと思います…。 すみませんが、よろしくお願いします。

  • PHP
  • 回答数5
  • ありがとう数6

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

  • ベストアンサー
  • 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

  • 数字の合計をチェック

    お世話になります。 サンプルスクリプト探してましたが見つからなかったのでヒントとか教えてもらえれば助かります。 やりたいことは、 合計数を入力→AとBにそれぞれ枚数を入力 そのとき合計数とAとBにそれぞれ枚数を入力した数の合計が 合っていれば"合ってます" 違っていれば"違っています" とアラートを出したいのですが。 ジャバスクリプト超初心者ですのでどうか宜しくお願いします ------------------------------ <HTML> <HEAD> <TITLE> 合計数のチェック </TITLE> </HEAD> <SCRIPT LANGUAGE="javascript"> </SCRIPT> <BODY> <form name="form"> <p>合計数 <input name="total" type="text" id="total" size="5"> 枚</p> <p>A <input name="kazu1" type="text" id="kazu1" size="5"> 枚</p> <p>B <input name="kazu2" type="text" id="kazu2" size="5"> 枚</p> <p> <input type="submit" name="button" id="button" value="チェック"> </p> </form> </BODY> </HTML> ------------------------------

  • ファイルサイズがpost_max_sizeを超える場合のエラー処理について

    PHPでアップロードファイルのサイズチェックに関する処理で困っています。 アップロードファイルのサイズチェックを行う場合はPHPスクリプト内でスーパーグローバール変数の$_FILES[フォーム名]['size']からサイズチェックを行うのが一般的であると考えています。 ところが、php.iniのパラメーターpost_max_sizeを超えるサイズのファイルをアップロードしようとするとファイルのアップロードが行われないため$_FILES[フォーム名]['size']でのチェックも行えずユーザーにファイルサイズに起因するエラーであることを通知することが出来ません。 そこで、お知恵をお借りしたいのはpost_max_sizeを超えるサイズのファイルをアップロードした際(またはしようとした際)に、ユーザーにファイルサイズに起因するエラーであることを知らせる方法はあるのでしょうか? 方法の例として以下の2つを見つけたのですが、いずれもユーザーに的確にエラーを返すことが出来ません。 1.HTMLのFORMタグ内にMAX_FILE_SIZEを指定する。  → 指定した値より大きなファイルをアップロードすると画面がリロードされたような動きとなりフォームがクリアされます。 PHPスクリプトに処理がわたらないようでユーザーにエラーを返せません。(IE8 / Apache2.2 + PHP5の場合) 2.ブラウザ側スクリプトでファイルサイズを取得する  → IE限定の方法しかないためIE以外でも可能な方法を期待しています。 なにか良い方法をご存知の方はお力を貸してください。

    • ベストアンサー
    • PHP
  • 初めからカンマが付いている数を計算したいのですが。

    以下のようにテーブル内の数、A,B,Cを足して、 Dに合計を出したいのですが カンマを付けて表示させる方法がありますでしょうか? <HTML> <script type="text/javascript"> <!-- function goukei() { add=Number(document.all.A.innerText.substring(0,7)) +Number(document.all.B.innerText.substring(0,7)) +Number(document.all.C.innerText.substring(0,7)); document.all.D.innerText=document.all.D.innerText + add; } // --> </script> <BODY onload="goukei()"> <TABLE border="1"> <TR><TH>A</TH><TH ID="A">1,001</TH></TR> <TR><TH>B</TH><TH ID="B">10,010</TH></TR> <TR><TH>C</TH><TH ID="C">100,100</TH></TR> <TR><TH>合計</TH><TH ID="D"><!-- 合計表示 --></TH></TR> </TABLE> </BODY> </HTML>

  • PHPでMySQLのレコードを削除したい

    現在「基礎からのMYSQL」という本でXAMPPを導入しMySQL,PHPの基礎を勉強中です。 (mysql_query() を初めて学習中です。) 例にならってスクリプトを書いてみたのですが、MySQL内にあるレコードを削除するためのスクリプトがうまく作動しません。 (SELECT, INSERT, SEARCH は正常に作動します。DELETEだけがなぜかうまくいきません。) ApacheとMySQLは起動しています。 考えられる原因をおしえていただけませんでしょうか。よろしくおねがいいたします。 ソースコードは下記のとおりです。 ★HTML(トップページ) //メッセージ表示のスクリプトを呼び出すフォーム <form method="post" action="kantan_select.php"> メッセージを表示します<br> <input type="submit" value="メッセージ表示"> </form> //挿入のスクリプトを呼び出すフォーム <form method="post" action="kantan_insert.php"> 名前を入力してください<input type="text" name="a1"><br> メッセージを入力してください<input type="text" name="a2" size=150><br> <input type="submit" value="送信"> </form> //☆☆☆削除のスクリプトを呼び出すフォーム☆☆☆ <form mothod="post" action="kantan_delete.php"> 削除番号<input type="text" name="b1"><br> <input type="submit" value="削除番号送信"> </form> //検索のスクリプトを呼び出すフォーム <form method="post" action="kantan_search.php"> 検索キーワード<input type="text" name="c1"><br> <input type="submit" value="検索開始"> </form> ★レコード削除のPHPスクリプト <?php $s=mysql_connect("localhost","root","パスワード") or die("接続失敗"); print "接続しました<br>"; mysql_select_db("db1"); $b1_d=$_POST["b1"]; mysql_query("delete from tbk where bang=$b1_d") ; $re=mysql_query("select * from tbk order by bang"); while($kekka=mysql_fetch_array($re)){ print $kekka[0]; print ":"; print $kekka[1]; print ":"; print $kekka[2]; print "<br>"; } mysql_close($s); print "<br><a href='kantan.html'>メニューに戻る</a>" ?> <環境> Windows 7 XAMPP導入するための付属CD-ROMの内容  ・Apache(HTTPD2.2.6 + Openssl0.9.8e)   ・MySQL(5.0.45)  ・PHP(5.2.4)  ・PHP(4.4.7)  ・phpMyAdmin(2.11.1)  ・Zend Optimizer

    • 締切済み
    • PHP
  • PHPの初心者です。現在チェックボックスのデータ引き継ぎで困っています

    PHPの初心者です。現在チェックボックスのデータ引き継ぎで困っています。 簡単に言うと、資料請求一覧ページみたいなものがHTMLであり各箇所にチェックボックスがあります。そして複数をチェックして資料請求ボタンをクリックすると登録フォームに遷移し、尚且つチェックボックスがオンのVALUEは名前が、表示されている状態で、PHPを使い登録メールフォームを作るといった感じです。現在は入力フォームの状態で表示されるまでは辿り着いたのですが、確認画面に遷移すると、チェック項目が全て表示されなくなりました。 現状の入力フォームにあるPHPは <?php /* フォーム変数が存在する場合 */ if($_POST["color"] != ""){ $color = implode ("," , $_POST["color"]); print ($color); /* フォーム変数が存在しない場合 */ }else{ print ("選択されていません。"); } ?> <?php } ?> と言った感じです。確認画面でどういう風にPHPで記述したら良いのか判らないのが今の問題です。間違いはたくさんあると思いますが、恐れ入りますがPHPに詳しい方がいらっしゃいましたら是非ご教授頂きたいと思っております。どうぞ宜しくお願い致します。

    • ベストアンサー
    • PHP
  • PHP 送信されたフォームについて

    HTMLから送信されたフォームがうまくうけとれないので質問させていただきます。 HTML側でチェックボックスを用いてphp側に送ったところうまく結果が反映されません。 HTML側で以下のソースを書き <input type="checkbox" name="kaitouran321" value="a">a <input type="checkbox" name="kaitouran322" value="b">b <input type="checkbox" name="kaitouran323" value="c">c php側で <?php print(htmlspecialchars($_POST['kaitouran321'], ENT_QUOTES, 'UTF-8')); ?> <?php print(htmlspecialchars($_POST['kaitouran322'], ENT_QUOTES, 'UTF-8')); ?> <?php print(htmlspecialchars($_POST['kaitouran323'], ENT_QUOTES, 'UTF-8')); ?> および <?php if($_POST['kaitouran321'] == 'a' && $_POST['kaitouran322'] == 'b' && $_POST['kaitouran323'] == 'c') ?> $i++; と書きました。htmlキャラはしっかり受け取ってくれるのですが、if文で書いた方は反応してくれません(iが+1されない)。選択肢がひとつの時、if文は反応するので条件の書き方がおかしいのでしょうか? 回答お願いします。

    • 締切済み
    • PHP
  • 確認画面・完了画面・エラー画面が出るメールフォーム

    こんばんは。PHPを習いはじめて1ヶ月ぐらいしか勉強をしていない素人です。 今度仕事でメールフォームを作ることになり、入力画面に入れた情報をメールで受け取るところまではできるのですが、入力画面→確認画面→エラー画面→完了画面のように作りたいのですが、参考書やネットで調べてもいい解説がありませんでした。 下記のソースからこの先どういう作れば希望フォームになるのでしょうか?みなさんの力を貸してください。お願いします。 ★フォーム(HTMLソース) <html> <head> </head> <body> <form method="POST" action="post.php"> 名前<br> <input type="text" name="name" size="15"><br> 好きな果物<br> <input type="radio" name="food[]" value="orange">オレンジ <input type="radio" name="food[]" value="apple">りんご <input type="radio" name="food[]" value="strawberry">いちご<br> <input type="submit" value="送信"> </form> </body> </html> ★PHP(スクリプト) <?php $to='××××@○○○.jp'; $subject='テストメール'; $body="名前:".$_POST["name"]."\n"."好きな果物:".$_POST["food"][0]; if(mb_send_mail($to,$subject,$body)){ print('メール送信に成功しました。'); } else{ print('メール送信に失敗しました。'); } ?>

    • 締切済み
    • PHP
  • 上手くエラー表示がされないのと計算ができない

    PHP初心者です。 開発環境 apache2.0.59 PHP5.2.9 Eclipse3.3 以下のソースコードを見て下さい。 <?php session_start(); ?> <html> <head> <title>test3_2.php</title> </head> <body> <?php //kadai3_3.phpにて、氏名、商品それぞれに未入力の場合はセッション変数に「NG」が設定されます if ($_SESSION["name"]=="NG") { unset($_SESSION["name"]); print("氏名を入力して下さい。"."<br>"); } if ($_SESSION["shohin"]=="NG") { unset($_SESSION["shohin"]); print("商品の何れかをチェックして下さい。"."<br>"); } ?> <form action="./test3_3.php" method=post> 氏名:<input type="text" name="name" <?php print("value='".$_SESSION["name"]."'")?>> <br><br> 商品一覧<br> <!-- 全てのcheckboxの名称をshohin[商品名]として連想配列化する事により test3_3.phpではcheckboxが扱いやすくなります --> <input type="checkbox" name="shohin[A]" <?php print($_SESSION["shohin"]["A"]=="on" ? "checked":"") ?> >A商品  \\1,000<br> <input type="checkbox" name="shohin[B]" <?php print($_SESSION["shohin"]["B"]=="on" ? "checked":"") ?> >B商品 \\2,000<br> <input type="checkbox" name="shohin[C]" <?php print($_SESSION["shohin"]["C"]=="on" ? "checked":"") ?> >C商品 \\3,000<br> <input type="checkbox" name="shohin[D]" <?php print($_SESSION["shohin"]["D"]=="on" ? "checked":"")?> >D商品 \\4,000<br> <input type="checkbox" name="shohin[E]" <?php print($_SESSION["shohin"]["E"]=="on" ? "checked":"")?> >E商品 \\5,000<br><br> <input type="submit" value="送信"> </form> </body> </html> で次のtest3_3.phpのソースコードです。 <?php session_start(); /* * 氏名にデータが入っていない場合はセッション変数を「NG」を入っていた場合はセッション変数に氏名をセットする */ if (strlen($_POST["name"]==0)) { $_SESSION["name"] = "NG"; }else{ $_SESSION["name"] = $_POST["name"]; } if (isset($_POST["shohin"])) { $_SESSION["shohin"]=$_POST["shohin"]; }else{ $_SESSION["shohin"]="NG"; } /* * 氏名か商品の何れかが未入力(未チェック)の場合はtest3_2.phpに遷移します。 */ if ($_SESSION["name"]=="NG" or $_SESSION["shohin"]=="NG") { header("Location: test3_2.php?".SID); exit; } ?> <html> <head> <title>test3_3.php</title> </head> <body> <?php $fp = fopen("C:\Apache2\htdocs\test3_1.txt", "r"); while (!feof($fp)) { $buffer = fgets($fp); $ans = explode(",", $buffer); $shohin[$ans[0]] = $ans[1]; } fclose($fp); $sum = 0; while(list($key, $val)=each($shohin)) { if ($_POST[$key]=="on") { print($key."商品:\\".number_format($val)."<br>"); $sum += $val; $shohizei = $sum * 0.05; $goukei = $sum + $shohizei; } } print("---------------------------<br>"); print("合計金額:\\".number_format($sum)."<br>"); print("消費税  :\\".number_format($shohizei)."<br>"); print("税込金額:\\".number_format($goukei)); ?> </body> </html> 分からないのは氏名欄に何も書かない場合もしくは商品を1つも選択しない場合、それぞれエラー表示されるのですが、何故か氏名欄にはMGと言う値が入力されてリダイレクトされます。 なので、まずはその原因を探しているのですが、いくら見ても分かりません。 なので、氏名欄が空白のときにエラー表示されるのかどうかも分かりません。 もう1つは商品購入の際の計算式が表示されない事です。 その前に連想配列$_SESSION["shohin"]["A"]についても疑問点があります。 これは2次元連想配列と解釈するのでしょうか。 ちなみにtest3_1.txtには以下のような文章が書かれています。 A,1000 B,2000 C,3000 D,4000 E,5000 何か延々とソースコードを書き連ねただけみたいに見えますね。 読み辛いようでしたら、本当に申し訳ありません。 以上の疑問について回答を頂きたいと思い書き込みました。 どうぞ宜しくお願い致します。

    • 締切済み
    • PHP
  • 入力チェックについて

    今、メールフォームを作っているのですがHTMLで入力してもらいkakunin.phpでチェックします。入力ミスがあれば、error.htmlへミスが無ければそのままkakunin.phpで表示したいのですが、中々上手くいきません。長い文で恐縮ですがよろしければご教授ください。 ★HTML★ <form name="form1" method="post" action="kakunin.php"> <td width="64">お名前</td> <td width=<input type="text" name="name"></td> </tr> </table> <input type="submit" name="Submit" value="送信"> </form> ★kakunin.php★ <?php $name=$_POST["name"] $Submit=$_POST["Submit"] //記入チェック if($Submit=="送信") { if (empty ($name)){ header("Location: error.html"); exit; } } ?>

    • ベストアンサー
    • PHP
  • 入力チェックで戻る場合

    htmlのフォームactionからphp側で入力チェックを行った場合 下記のようにすると別ページに表示されますが、html側に戻って 表示するにはどのように行えばよいでしょうか。 ---html--- <form action="abc.php" method="post" > <input type="text" name="ord[name]" size="30" VALUE=""> <input type="submit" name="button_confirm" value="確認画面" /> ---abc.php--- <html> <head><title>output</title></head> <body> <?php $name = $_POST["order"]["name"]; if ($name == null) { //エラー表示 print ("名前が未入力<br />"); } ?> </body> </html>

    • ベストアンサー
    • PHP

専門家に質問してみよう