2017-11-24 5 views
1

ユーザーがHTMLフォームを送信するときのPHP要約ページを作成しようとしています。PHP:ユーザーがHTMLフォームから選択したオプションに応じた合計価格を計算します。

image of the HTML form

このフォームには、ホテルの部屋のさまざまなオプションが含まれています。 HTMLにはラジオボタン(シングルルームまたはダブルルーム)とチェックボックス(ゲストが金曜日/土曜日/日曜日の夕食を含むことを希望する場合)が含まれています。

これらのオプションは、それぞれ異なる価格に関連付けられています.1つの部屋は$ 80、二重は$ 60、各食事は$ 8です。

現在のところ、選択したオプションをPHPフォームに表示することに成功しました。

Here is an image of an example PHP summary page.

しかし、私はゲストが選択したオプションの機能として計算、その後表示合計金額に苦労しています。

これを行うには良い方法がありますか?配列を使用する必要があるかもしれないと私には言いますが、どうやって調べたのか分かりません。あなたはHTMLコードを見てみたいと思った場合には

<form action="ski-trip-summary.php" method="post"> 
<table id="mainTable"> 
<tr> 
    <td class="mainSection"><b>Housing and Meals:</b><br /> 
    <table> 
     <tr> 
     <td><i>Room Choices</i><br /> 
      <input name="room" type="radio" value="single" /> 
       Single ($80) 
      <input name="room" type="radio" value="double" checked="checked" /> 
       Double ($40) </td> 
     </tr> 
     <tr> 
     <td><i>Meals desired ($8 each):</i><br /> 
      <table> 
       <tr><td>Friday Dinner</td> 
        <td><input name="fridayDinner" type="checkbox" /></td></tr> 
       <tr><td>Saturday Dinner</td> 
        <td><input name="saturdayDinner" type="checkbox" /></td></tr> 
       <tr><td>Sunday Dinner</td> 
        <td><input name="sundayDinner" type="checkbox" /></td></tr> 
      </table></td> 
     </tr> 
    </table> 
    </td></tr> 
</table> 

PHPコード

print 'You have signed up for a '; 
if ($_POST['room'] == 'single') { 
print 'single room.'; 
} elseif ($_POST['room'] == 'double') { 
print 'double room. <br /> <br />' ; 
} 

print 'Your meal signups are: <br />'; 

if (isset($_POST['fridayDinner']) && isset($_POST['saturdayDinner']) && isset ($_POST['sundayDinner'])) { 
print '<i>Friday dinner <br />' . 'Saturday dinner <br />' . 'Sunday dinner </i> <br />'; 

} elseif (isset($_POST['fridayDinner']) && isset($_POST['saturdayDinner'])) { 
print '<i>Saturday dinner <br />' . 'Sunday dinner </i> <br />'; 

} elseif (isset($_POST['fridayDinner']) && isset($_POST['sundayDinner'])) { 
print '<i>Friday dinner <br />' . 'Sunday dinner </i> <br />'; 

} elseif (isset($_POST['saturdayDinner']) && isset($_POST['sundayDinner'])) { 
print '<i>Saturday dinner <br />' . 'Sunday dinner </i> <br />'; 

} elseif (isset($_POST['saturdayDinner']) && isset($_POST['sundayDinner'])) { 
print '<i>Saturday dinner <br />' . 'Sunday dinner </i> <br />'; 

} else { 
print '<i>No meals </i> <br /><br />'; 

} 

ありがとう、と私は、任意の入力に感謝かこれをもっとうまくやっていく方法の提案!

+0

は問題を解決しませんが、ディナーのチェックボックスの入力は同じ名前である必要があります。名前の後ろに '[]'を使うのを忘れないでください。そうすれば配列になります。 – Cashbee

+0

各POST配列に整数を代入し、 '+'を使ってそれらを追加します - それらに1つの変数を代入します*「あなたの合計は...」と連結します*。 –

答えて

0

ほとんどあなたのようですね!トリッキーな部分はチェックボックスです:これを解決する良い方法は、配列を使ってチェックボックスの出力を保存することです。同様の解決策がここに表示されます:PHP Multiple Checkbox Array

ディナー変数を配列として返すには、HTMLフォームのnameフィールドに[]を必ず追加してください。

$roomtype = $_POST['room'] 
print 'You have signed up for a '; 
if ($roomtype == 'single') { 
    $roomcost = 80; 
    print 'Single room selected <br />'; 
} elseif ($roomtype == 'double') { 
    $roomcost = 40; 
    print 'Double room selected <br />'; 
} 


$room = $_POST['room']; 
$dinner = $_POST['dinner']; 
$singleDinnerCost = 8; 


if(isset($dinner)){ 
    // this part only makes sense if there are dinners selected. 
    // So we check for that in th line above 
    // if no meals are checked, the dict will not exist 
    print 'Your meal signups are: <br />'; 

    foreach ($dinner as $key => $day) { 
     print $day . ' dinner <br />'; 
    } 

} else { 
    // if no dinners are selected, the dinner dict will not even exit 
    print 'You have not selected any dinners ! <br />' 
} 


if(isset($dinner)){ 
    // if there are dinners selected, count them 
    $dinnerCount = count($dinner); 
} else { 
    // if there are no selected dinners, set the dinner count to 0 
    $dinnerCount = 0; 
} 

// compute total price 
$total = $dinnerCount * $singleDinnerCost + $roomprice; 

print 'Your total cost is $'.$total; 

は、この情報がお役に立てば幸いです、あなたのPHPに続いて

<input name="dinner[]" type="checkbox" value="Friday" /> 
<input name="dinner[]" type="checkbox" value="Saturday" /> 
<input name="dinner[]" type="checkbox" value="Sunday" /> 

:あなたはこのような何かを持っている必要があります!

0

夕食のチェックボックスの入力は、同じ名前だが値が異なる必要があります。名前の後に[]を使用することを忘れないでください。そうすれば配列になります。

<input name="dinner[]" type="checkbox" value="friday" /> 
<input name="dinner[]" type="checkbox" value="saturday" /> 
<input name="dinner[]" type="checkbox" value="sunday" /> 

そして、PHPコードであなたは、彼が選択したどのように多くのディナーをチェックし、合計を計算することができます

$total = 0; 
$singleDinnerCost = 8; 

if ($_POST['room'] == 'single') { 
    $total = 80; 
} elseif ($_POST['room'] == 'double') { 
    $total = 40; 
} 


if(isset($_POST['dinner'])){ 
    $dinnerCount = count($_POST['dinner']); // $_POST['dinner'] is an array 
    $total += $dinnerCount * $singleDinnerCost; 
} 

$echo 'Your total cost is $'.$total; 

注このコードは、合計を計算するために他のすべての文字列を印刷するだけではないということ。その部分を自分で追加することができます

+0

私は間違っているかもしれませんが、OPに問題があった部分を省いたと思います。 – Charles

関連する問題