2011-06-24 14 views
0

私が期待していたものではありません...私のコードは非常に壊れやすいものではありませんでした...ごめんなさい!それを修正するために私は何ができますか?私は本当に(私が思ったように)合計を得るための簡単な数学を達成したいと思います。私はどこでも見て、配列に関する情報をたくさん読んでいます。明らかに私はコンセプトを理解していません...それ以上の助けが歓迎され、大いに感謝されるでしょう!数値配列の数値をPHPで計算する


私はラジオボタン、チェックボックスがあり、合計購入金額を表示するために配列を使用モック注文フォームを作成しています。私は私が持っている2つの異なる配列から合計量を得ることができないことを除いて動作しているフォームがあります。 $ total = $ extras + $ additionalは動作しておらず、正直なところ、私はそれが簡単ではないことを知っていたはずです! ...選択されているすべてのオプションの合計金額を得ることができるように、どのような式を使用するかに関する提案はありますか?また、チェックボックスの項目が新しい行ではなく、まったく新しいテーブルに表示されるように誰も助けてくれますか?

ありがとうございます!

カップル以上のこと:私はこれを還元しておかなければならず、テーブルの出力をそのままにしておきたいと思っています。それ以外のものは自由に変更してください。

私はPHP配列を使い慣れていて、その値に関しては難しいと思われますが、PHPの配列がどれくらい重要かを知っているので、どのように動作しているのか見たいと思います!

<?php 

    /*This stuff is only here because I want to make sure 
    there are 2 decimal places in the final numbers since 
    I'm dealing in "money" values*/ 
    $total = number_format ($total,2); 
    $value = number_format ($value,2); 
    $additional = number_format ($additional,2); 


    $value = array("Short Trip"=>15.99, "Long Trip"=>28.99, "Overnight"=>10.99 "Forever"=>99.99); 

    if(isset($_POST['travel'])) { 

    $extras = array("Hair Brush"=>1.50, "Shampoo"=>1.50, "Toothpaste"=>1.50, 
    "Cream Rinse"=>1.50, "Tooth Brush"=>1.50, 
    "Shower Cap"=>1.50, "Washcloth"=>1.50, "Mouthwash"=>1.50); 

    if (isset($_POST['extras'])) { 
    foreach ($_POST['extras'] as $additional) { 
    echo "<table border =\"2\"> 
    <tr><td>Item</td><td>Charges</td></tr> 
    <tr><td>".$_POST['travel']."</td> 
    <td> $".$value[$_POST['travel']]."</td></tr> 
    <tr> 

    <td>".$additional."</td> 
    <td> $".$extras[$additional]."</td> 

    </tr> 
    <tr><td>Your total</td> <td>".$total."</td></tr> 
    </table>"; 

    } 
    } 
    } 

    ?> 


    <html> 
    <body> 
    <form action="" method="post"> 

    <table border="2"> 
    <tr> 
    <td colspan="2" align="center" scope="col">Stay Information</td> 
    </tr> 
    <tr> 
    <td><input type="radio" name="travel" value="Short Trip" />Short trip $15.99</td> 
    <td><input type="radio" name="travel" value="Long Trip" />Long trip $28.99</td> 
    </tr> 
    <tr> 
    <td><input type="radio" name="travel" value="Overnight" />Overnight $10.99</td> 
    <td><input type="radio" name="travel" value="Forever" />Forever $99.99</td> 
    </tr> 
    </table> 
    <table border="2"> 
    <tr> 
    <td colspan="2" scope="col">What will you need?($1.50 each)</td> 
    </tr> 
    <tr> 
    <td><input type="checkbox" name="extras[]" value="Hair Brush" />Hair Brush</td> 
    <td><input type="checkbox" name="extras[]" value="Shampoo" />Shampoo</td></tr> 
    <tr> 
    <tr><td><input type="checkbox" name="extras[]" value="Toothpaste" />Toothpaste</td> 
    <td><input type="checkbox" name="extras[]" value="Cream Rinse" />Cream Rinse</td></tr> 
    </tr> 
    <tr> 
    <td><input type="checkbox" name="extras[]" value="Tooth Brush" />Tooth Brush</td> 
    <td><input type="checkbox" name="extras[]" value="Shower Cap" />Shower Cap</td></tr> 
    <tr> 
    <tr><td><input type="checkbox" name="extras[]" value="Washcloth" />Washcloth</td> 
    <td><input type="checkbox" name="extras[]" value="Mouthwash" />Mouthwash</td></tr> 
    </tr> 

    <tr><td colspan="2"> 
    <input type="submit" value="Submit"></td></tr> 
    </table> 
    </form> 
    </body> 
    </html> 
+1

あなたはhtmlタグの前にテーブルをエコーし​​ています。それを行う良い方法ではありません – Ibu

+0

このコードは読めません。 – kapa

+0

インデントはあなたの友人です – dqhendricks

答えて

2

コメントは、あなたのコードの書式設定されて主なものをいくつかの問題を指摘しています。実際、スクリプトで何が間違っていたのか把握しようとすると、フォーマットが混乱すると無駄な時間がかかります。

まず、$valueの配列にカンマがないことがわかります。

$value = array("Short Trip"=>15.99, "Long Trip"=>28.99, "Overnight"=>10.99 "Forever"=>99.99) 
// comma here -----------------------------------------------------------^ 

の書式は、ある程度スタイルの問題ですが、あなたがより簡単に、このようなミスをキャッチすることができるように主なポイントは、読みやすさです。私はあなたが問題を抱えているどの部分に明確ではないんだけど、彼らは今意志として、更なる問題が存在する可能性があり

<?php 

$value = array(
    "Short Trip" => 15.99, 
    "Long Trip" => 28.99, 
    "Overnight" => 10.99, 
    "Forever" => 99.99 
); 

$extras = array(
    "Hair Brush" => 1.50, 
    "Shampoo" => 1.50, 
    "Toothpaste" => 1.50, 
    "Cream Rinse" => 1.50, 
    "Tooth Brush" => 1.50, 
    "Shower Cap" => 1.50, 
    "Washcloth" => 1.50, 
    "Mouthwash" => 1.50 
); 

// combine condititions 
if (isset($_POST['travel']) && isset($_POST['extras'])) { 

    $total = $value[$_POST['travel']]; 
    // start table html (before foreach loop) 

    // store html in a variable to print later 
    $html = "<table border =\"2\"> 
       <tr> 
       <td>Item</td> 
       <td>Charges</td> 
       </tr> 
       <tr> 
       <td>" . $_POST['travel'] . "</td> 
       <td> $" . $total . "</td> 
       </tr>"; 

    foreach ($_POST['extras'] as $additional) { 
     // add a row per extra 
     $html .= "<tr> 
        <td>" . $additional . "</td> 
        <td> $" . $extras[$additional] . "</td> 
        </tr>"; 

     // increment total 
     $total += $extras[$additional]; 
    } 
    $html .= "<tr> 
       <td>Your total</td> 
       <td>" . $total . "</td> 
       </tr> 
      </table>"; 

} 
?> 
<html> 
<body> 
<form action="" method="post"> 

<?php 
if (isset($html)) { 
    echo $html; 
} 
?> 

<table border="2"> 
..... 

:ここ

は、スクリプトがどのように見えるか何かの要約版ですデバッグするのがはるかに簡単です。

+0

うわー!あなたの助けをありがとう!私は書式設定の力を理解していて、公平になるために私の中にはコピー/貼り付けが失われていました。あなたの投稿は素晴らしいですが、私はもう一つ質問があることを認めなければなりません。何も私のコードを見て、それを試して、エラーを取得するよりも愚かな気分にさせていません({22行目の}私はそれがそこにあるはずであることを知っている十分なPHPを知っているので、私は通常これが遅くないと約束します。私はたいていかなり良いプログラマーですが、私はPHPを初めて使いました。そして今のところ私はちょうどそれを神経質にしたいと思っています! LOL – Craig

+0

ああ、はい。 ')'を編集しました –

0

印象的なコードダグ。私はあなたに言うことが大嫌いですが、もう一つ誤りがあると思います。理由は分かりませんが、他の誰かがこのコードを実行していると、数学は彼の1.50ドルの「追加」アイテムでのみ実行されていることがわかります。

+1

これを指摘してくれてありがとう。私は、作業スクリプトを作成するよりもOPを開始することに興味がありました。エラーは(多分)固定されています: '$ total = $ value [$ _ POST ['total']]'。 (おそらく、このようなコメントはコメントであり、独立した回答ではないはずです)。 –

関連する問題