2016-01-12 2 views
-1

Предполагается, что это должно выглядеть так: sample output. Он только скажет: «Цена должна быть действительным номером», и больше ничего, если я ее тестирую, даже когда мои входы являются правильными числами, он все равно не рассчитает. Я не знаю, что я делаю неправильно здесь.Моя программа калькулятора кассира PHP не будет работать

Вот index.php

<?php 
     //set default value of variables for initial page load 
     if (!isset($description)) { $description = ''; } 
     if (!isset($unit_price)) { $unit_price = ''; } 
     if (!isset($quantity)) { $quantity = ''; } 
    ?> 
    <!DOCTYPE html> 
    <html> 
    <head> 
     <title>Assignment 1</title> 
     <link rel="stylesheet" type="text/css" href="YapAss1.css"> 
    </head> 

    <body> 
     <main> 
     <h1>Cashier</h1> 
     <?php if (!empty($error_message)) { ?> 
      <p class="error"><?php echo htmlspecialchars($error_message); ?>    </p> 
     <?php } ?> 
     <form action="checkout.php" method="post"> 

      <div id="data"> 
       <label>Description:</label> 
       <input type="text" name="investment" 
         value="<?php echo htmlspecialchars($description); ?>"> 
       <br> 

       <label>Unit Price:</label> 
       <input type="text" name="interest_rate" 
         value="<?php echo htmlspecialchars($unit_price); ?>"> 
       <br> 

       <label>Quantity:</label> 
       <input type="text" name="years" 
         value="<?php echo htmlspecialchars($quantity); ?>"> 
       <br> 
      </div> 

      <div id="buttons"> 
       <label>&nbsp;</label> 
       <input type="submit" value="Checkout Now"><br> 
      </div> 

     </form> 
     </main> 
    </body> 
    </html> 

checkout.php

<?php 
     // get the data from the form 
     $description = filter_input(INPUT_POST, 'description', 
      FILTER_VALIDATE_FLOAT); 
     $unit_price = filter_input(INPUT_POST, 'unit_price', 
      FILTER_VALIDATE_FLOAT); 
     $quantity = filter_input(INPUT_POST, 'quantity', 
      FILTER_VALIDATE_INT); 


     if ($unit_price === FALSE) { 
      $error_message = 'Price must be a valid number.'; 
     } else if ($unit_price <= 0) { 
      $error_message = 'Price must be a valid number.'; 

     // validate quantity 
     } else if ($quantity === FALSE) { 
      $error_message = 'Quantity must be a valid number.'; 
     } else if ($quantity <= 0) { 
      $error_message = 'Quantity must be a valid number.'; 
     } else { 
      $error_message = ''; 
     } 


     // if an error message exists, go to the index page 
     if ($error_message != '') { 
      include('index.php'); 
      exit(); 
     } 

     // calculate the future value 
     $sales_tax = .07; 
     $sub_total = $price * $quantity; 
     $total = $subtotal * $sales_tax; 



     // apply currency and percent formatting 

     $unit_price_f = '$'.number_format($unit_price, 2); 
     $quantity_f = '$'.number_format($quantity, 2); 
     $sub_total_f ='$'.number_format($sub_total, 2); 
     $sales_tax_f = $sales_tax.'%'; 
     $total_f ='$'.number_format($total, 2); 
    ?> 
    <!DOCTYPE html> 
    <html> 
    <head> 
     <title>Assignment 1</title> 
     <link rel="stylesheet" type="text/css" href="YapAss1.css"> 
    </head> 
    <body> 
     <main> 
      <h1>Checkout 12/27/2015</h1> 

      <label>Item Description:</label> 
      <span><?php echo $description; ?></span><br> 

      <label>Price:</label> 
      <span><?php echo $unit_price_f; ?></span><br> 

      <label>Quantity:</label> 
      <span><?php echo $quantity_f; ?></span><br> 

      <label>Sub Total:</label> 
      <span><?php echo $sub_total_f; ?></span><br> 

      <label>Sales Tax:</label> 
      <span><?php echo $sales_tax; ?></span><br> 

      <label>Total:</label> 
      <span><?php echo $total_f; ?></span><br> 
     </main> 
    </body> 
    </html> 
+1

Поля, которые вы проверяете, не имеют сходства с именами полей в вашей форме: 'years'! ==' количество'; 'interest_rate'! ==' unit_price'; 'invest'! ==' описание' –

+0

святое дерьмо. Я просмотрел его так много раз и до сих пор не замечал этого. большое спасибо – agentmg123

ответ

0

Вот ошибка:

$description = filter_input(INPUT_POST, 'description', 
      FILTER_VALIDATE_FLOAT); 
     $unit_price = filter_input(INPUT_POST, 'unit_price', 
      FILTER_VALIDATE_FLOAT); 
     $quantity = filter_input(INPUT_POST, 'quantity', 
      FILTER_VALIDATE_INT); 

Вы некорректные имена входных, представленные здесь.

Новый код

$description = filter_input(INPUT_POST, $_POST['investment'], 
      FILTER_VALIDATE_FLOAT); 
     $unit_price = filter_input(INPUT_POST, 'interest_rate', 
      FILTER_VALIDATE_FLOAT); 
     $quantity = filter_input(INPUT_POST, 'years', 
      FILTER_VALIDATE_INT); 

У вас также есть некоторые неопределенные переменные в вашем коде. Вам нужно перепроверить все переменные, которые вы используете.

0

На странице checkout.php у вас есть, если заявление:

if ($unit_price === FALSE) 

Таким образом, вы проверяете для boolean, тогда как это значение должно быть целым числом. Я просто чувак, что ваша цель состояла в том, чтобы проверить, установлена ​​ли эта переменная. Adjust, изменив, если заявление:

if (!isset(($unit_price)) 

То же самое происходит в переменной $ количестве. Сделав эту настройку, вы можете удалить php, который у вас есть на верхних 6 строках index.php. Goodluck!

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