2016-07-07 4 views
0

Я довольно новичок в PHP и работаю на маленькой странице конвертера валют для практики. Мой PHP и HTML код все на одной странице под названием «index.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 echo в качестве значения, но когда я нажал кнопку submit, это не сработало. Затем я заменил вход элементом H2, который содержит echo.

Мои цели для этой страницы заключались в том, чтобы выполнить все действия с помощью HTML и PHP без помощи javascript/ajax.

Есть ли какая-либо сверхъестественная причина, почему echo в значении не вернет значение $converted? Я бы предпочел использовать ввод и стиль для чтения только с CSS, чем с использованием элемента H2, но я тоже буду работать.

С нетерпением ждем того, что вы прекрасно думаете. Благодарю.

ответ

2

Проблема: Вы используете === всего, если условия, === используется для сравнения значения, а также тип переменной. В вашем случае $_POST['your_variable'] имеет тип string, и вы сравниваете строку с номером. 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

Хорошая альтернатива, я думаю, вы пропустили третий случай? 'USD <=> USD' – Rohit

+0

@Rohit true! Я обновил функцию, чтобы отразить случай, когда '$ origCurr == $ convertCurr' – mulquin

+1

Почему он должен возвращать 1? Должно быть введено значение 'return ($ origCurr! == $ convertCurr)? $ input * $ conversionTable [$ origCurr] [$ convertCurr]: $ input; ' – Rohit

Смежные вопросы