2016-07-07 11 views
0

私はPHPに慣れていて、練習のために小額の通貨変換ページに取り組んでいます。それは一見、サーバー上で実行されていないことを、PHP/HTMLポストが期待どおりに機能しない

<?php 
$originalAmount = $_POST["originalAmount"]; 
$convertedAmount = 0.00; 
$currency1 = $_POST["currency1"]; 
$currency2 = $_POST["currency2"]; 
function convertCurrency($input, $origCurr, $convertCurr) { 

    if ($origCurr === 1){ 
     if ($convertCurr === 2){ 
      $convertedAmount = $input * 0.78; 
      return $convertedAmount; 
     } 
     elseif ($convertCurr === 3){ 
      $convertedAmount = $input * 0.90; 
      return $convertedAmount; 
     } 
     else { 
      $convertedAmount = $input; 
      return $convertedAmount; 
     } 
    } 

    if ($origCurr === 2){ 
     if ($convertCurr === 1){ 
      $convertedAmount = $input * 1.29; 
      return $convertedAmount; 
     } 
     elseif ($convertCurr === 3){ 
      $convertedAmount = $input * 1.16; 
      return $convertedAmount; 
     } 
     else { 
      $convertedAmount = $input; 
      return $convertedAmount; 
     } 
    } 

    if ($origCurr === 3){ 
     if ($convertCurr === 2){ 
      $convertedAmount = $input * 0.86; 
      return $convertedAmount; 
     } 
     elseif ($convertCurr === 1){ 
      $convertedAmount = $input * 1.11; 
      return $convertedAmount; 
     } 
     else { 
      $convertedAmount = $input; 
      return $convertedAmount; 
     } 
    } 
} 

$convertedAmount = convertCurrency($originalAmount, $currency1, $currency2); 
?> 

<html> 

<head> 
    <meta charset="utf-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <title>Currency Converter</title> 

    <!--jQuery--> 
    <script   src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script> 

    <!--Bootstrap 3--> 
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" /> 
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script> 

    <!--Custom CSS--> 
    <link href="main.css" type="text/css" rel="stylesheet"> 
</head> 

<body> 
    <div class="container"> 
     <!--Header Row--> 
     <div class="row page-header"> 
      <div class="col-xs-6"> 
       <h1>Currenccy Converter</h1></div> 
      <div class="col-xs-6"> 
       <p>Add items via the input below. 
        <br>Click to mark complete (Completed Items will be marked with a green background.) 
        <br>To delete a task, Click on the X. 
        <br>Double Click to edit the item, it will be moved to the add item box</p> 

      </div> 

     </div> 


     <!--Add Task/Input Row--> 
     <div class="row"> 
      <div class="col-xs-12 well"> 
       <h2 class="text-xs-center"><?php print $convertedAmount; ?></h2> 
       <form class="form-control" id="converterForm" action="index.php" method="post">   

        <select name="currency1" id="currency1"> 
         <option value="zzz">Starting</option> 
         <option value="1">USD</option> 
         <option value="2">GBP</option> 
         <option value="3">EUR</option> 
        </select> 

        <select name="currency2" id="currency2"> 
         <option value="zzz">Converted</option> 
         <option value="1">USD</option> 
         <option value="2">GBP</option> 
         <option value="3">EUR</option> 
        </select> 

        <div class="form-group"> 
         <label for="originalAmount" id="origLabel">Amount:</label> 
         <input id="originalAmount" type="number" value="0.00" name="originalAmount"> 
         <input type="submit" id="submit" name="submit" value="SUBMIT"> 
        </div> 


       </form> 
      </div> 
     </div> 

    </div> 
</body> 


</html> 

私の問題がある:私のPHPとHTMLコードがすべて「index.phpを」と呼ばれる1ページです。私は値としてechoのphpで更新しようとしていたreadonly入力を持っていましたが、submitをクリックすると動作しませんでした。その後、入力をechoを含むH2要素に置き換えました。

このページの目標は、javascript/ajaxの助けを借りずにHTMLとPHPを使用してすべてのアクションを完了することでした。

echoの値が$convertedの値を返さない理由は何ですか?私はむしろH2要素を使うよりもCSSでreadonlyの入力とスタイルを使いたいと思っていますが、どちらかといえばうまくいくでしょう。

あなたが上達していることを楽しみにしています。ありがとう。

答えて

2

問題: ===を使用している場合、変数の値とタイプの比較には===が使用されます。あなたの場合、$_POST['your_variable']は文字列型であり、文字列と数値を比較しています。 if ($origCurr === 1)。比較演算子を読むhere

enter image description here

ソリューション:いずれかの型キャスト変数や値のみを比較する==を使用しています。 if ($origCurr == 1)

+0

Ahh。ええ、私は== vs ===について知っていますが、私は間違ってそれを変換せずにint型を引っ張る入力型数値を使用していると仮定していました。 Doh。ありがとう! –

0

このエラーが発生する原因はRohitが原因です。また、入力変数の型付けを考慮する必要がある変換関数の代わりの方法を提供したいと思います。

function convertCurrency($input, $origCurr, $convertCurr) { 

    $conversionTable = array(
      '1' => array('2' => 0.78, '3' => 0.9), 
      '2' => array('1' => 1.29, '3' => 1.16), 
      '3' => array('2' => 0.86, '1' => 1.11) 
     ); 

     return $input * (($origCurr !== $convertCurr) ? $conversionTable[$origCurr][$convertCurr] : 1); 
} 
+0

良い選択肢、私はあなたが3番目のケースを逃したと思いますか? 'USD <=> USD' – Rohit

+0

@Rohit true! '$ origCurr == $ converCurr'の場合に反映する関数を更新しました – mulquin

+1

なぜ1を返すべきですか?これは入力値 'return($ origCurr!== $ convertCurr)でなければなりません。 $ input * $ conversionTable [$ origCurr] [$ convertCurr]:$ input; ' – Rohit

関連する問題