2011-06-24 2 views
0

Хорошо, не совсем то, что я ожидал ... Я не знал, что мой код был настолько уродливым ... извините! Что я могу сделать, чтобы исправить это? Я действительно хотел бы просто выполнить (что я думал) простую математику, чтобы получить итоговые значения. Я везде искал и читал так много информации о массивах, и, очевидно, я просто не понимаю концепцию ... больше помощи приветствуется и будет НАСТОЯТЕЛЬНО оценена!Выполнение математики по значениям массива чисел в PHP


Я создаю форму заказа макета, который имеет радиокнопки, флажки и использует массивы, чтобы показать общую сумму покупки. У меня есть форма, которая работает, за исключением того, что я не могу получить общую сумму из двух разных массивов, которые у меня есть. $ total = $ extras + $ extra не работает и честно, я должен был знать, что это не может быть так просто! ... Любые предложения о том, какую формулу использовать, чтобы я мог получить общую сумму в долларах всех выбранных опций? Кроме того, может ли кто-нибудь помочь мне, чтобы элементы флажка были перечислены в новой строке, а не в целом новой таблице?

Заранее благодарен!

Еще несколько вещей: я должен держать это в сокращении и хотел бы сохранить вывод в таблице, как это ... кроме этого, не стесняйтесь изменять все, что вам нужно.

Я новичок в 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

indenting - ваш друг – 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, чтобы знать, что он должен быть там, так это снова проблема с w/me? Я обещаю, что я обычно не так медленно. Я, как правило, довольно хороший программист, но я новичок в PHP, и до сих пор мне кажется, что я просто хочу нервничать! LOL – Craig

+0

ах, да. пропустил ')' - отредактировал –

0

Впечатляющий код Doug. Ненавижу говорить вам, но я думаю, что может быть еще одна ошибка. Я не могу понять, почему, но если кто-нибудь еще выполнит этот код, они увидели бы, что математика будет выполняться только на его дополнительные $ 1.50 «Нет».

+1

Спасибо, что указали это. Fwiw, я больше интересовался запуском OP, чем созданием рабочего скрипта. Ошибка исправлена ​​(возможно): '$ total = $ value [$ _ POST ['total']]'. (Вероятно, вы должны публиковать комментарии как комментарии, а не независимые ответы). Приветствия. –

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

  • Нет связанных вопросов^_^