-PR-
解決済み

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

  • 困ってます
  • 質問No.856318
  • 閲覧数54
  • ありがとう数6
  • 気になる数0
  • 回答数5
  • コメント数0

お礼率 72% (155/214)

こんにちは。
手袋の注文フォームを作ろうとしています。
まず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でのデータの受け渡しはコピペで作っているので間違えてはいないと思います…。
すみませんが、よろしくお願いします。
通報する
  • 回答数5
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.5
レベル7

ベストアンサー率 46% (6/13)

簡潔にしてみました。
このままで動作します。

<?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

お礼率 72% (155/214)

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

その他の回答 (全4件)

  • 回答No.1
レベル11

ベストアンサー率 41% (90/218)

 $sizessなどのPOSTから受け取った変数の中身ですが、ひょっとして文字列等になっていませんか?
 
 $size_goukei へ演算するところで、

$size_goukei = (strlen($sizess) + strlen($sizes) ... というように数値へ変換が必要じゃないでしょうか?
 
 まず、var_dump($size_goukei)で$size_goukeiをダンプしてみればいかがでしょう?
お礼コメント
amountainblast

お礼率 72% (155/214)

ありがとうございます。
早速試してみましたが変化がありませんでした。
すみませんが、もう少し詳しく教えて頂けないでしょうか?
ダンプって何ですか?
投稿日時 - 2004-05-13 11:31:30


  • 回答No.2
レベル12

ベストアンサー率 61% (349/567)

strlen($size_gokei) != 10

これはコピーミスですか?
strlen関数は文字列の長さを見るのですけど。
お礼コメント
amountainblast

お礼率 72% (155/214)

ご回答ありがとうございます。
普通にstrlen関数を使っていました。
strlen関数は文字列の長さを見るんですね…
っということは今回のような数字をみる場合は単純に

$size_gokei != 10

とかでいいのでしょうか?
よろしくお願いします。
投稿日時 - 2004-05-13 11:21:47
  • 回答No.3
レベル11

ベストアンサー率 51% (177/346)

こんにちは、横から失礼します。

>$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

お礼率 72% (155/214)

ありがとうございます。
その通りでAndにしないといけませんでした…。
投稿日時 - 2004-05-17 11:54:44
  • 回答No.4
レベル11

ベストアンサー率 41% (90/218)

 再び回答にきました。

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

お礼率 72% (155/214)

何度もありがとうございます。
フォームからは数値しか送られてきませんので、変数はそのまま演算します。
投稿日時 - 2004-05-17 11:56:38
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-

特集


開業・独立という夢を持つ人へ向けた情報満載!

ピックアップ

ページ先頭へ