Autor Zpráva
lionel messi
Profil
Zdravím,

trochu sa vŕtam v niektorých mojich starších kódoch a narazil som na kalkulačku v PHP. Kód funguje správne, ale problémom je nepraktické pridanie novej položky (musím ho urobiť na mnohých miestach). Príklad:

Formulár:
<form method="post">
Lorem: <input type="number" size="1" name="lorem"> ks
Ipsum: <input type="number" size="1" name="ipsum"> ks
Amen: <input type="number" size="1" name="amen"> ks
<input type="submit" name="submit" value="Spočítať cenu fytopufu"> ks
</form>

Spracovanie formulára:
<?php

$cenaLorem = 3.89;
$cenaIpsum = 4.99;
$cenaAmen = 7.99;

if(!isset($_POST['submit']))
{
    include "kalkulacka-formular.php";
}

else
{
    
    $cenaCelkom = 0;
    $cenaFinalLorem = 0;
    $cenaFinalIpsum = 0;
    $cenaFinalAmen = 0;
    
    if($_POST['lorem'] > 0)
    {
        $cenaFinalLorem = $_POST['lorem'] * $cenaLorem;
        echo "<p class=\"vypocet\">Lorem: $_POST[lorem] × $cenaLorem € = ". $_POST['lorem'] * $cenaLorem ." €</p>";
    }
    
    if($_POST['ipsum'] > 0)
    {
        $cenaFinalIpsum = $_POST['ipsum'] * $cenaIpsum;
        echo "<p class=\"vypocet\">Ipsum: $_POST[ipsum] × $cenaIpsum € = ". $_POST['ipsum'] * $cenaIpsum ." €</p>";
    }
    //to isté pre Amen
    
    $cenaCelkom += $cenaFinalLorem + $cenaFinalIpsum + $cenaFinalAmen;
    
    echo "Celková cena fytopufu: $cenaCelkom €";
}
?>

Kód počíta, ale pridanie novej položky (ku ktorému dochádza pomerne často) je zbytočne zložité. Bolo by možné tento kód prepísať do elegantnejšej formy? Uprednostňujem procedurálne riešenie pred OOP, ktoré neovládam.

Ďakujem za každú radu.
ŠimizuŠikenze
Profil *
Pole v PHP snad znáš
Fisir
Profil
Reaguji na lionela messiho:
Rychlý náčrt:

<?php
$fields = array(
    'lorem' => array(
        'title' => 'Lorem',
        'coefficient' => 3.89
    ),
    'ipsum' => array(
        'title' => 'Ipsum',
        'coefficient' => 4.99
    ),
    'amen' => array(
        'title' => 'Amen',
        'coefficient' => 7.99
    )
);

if(!isset($_POST['submit'])){
    echo('<form action="" method="post">');
    foreach($fields as $name => $properties){
        echo(htmlspecialchars($properties['title']).': <input type="number" size="1" name="'.htmlspecialchars($name, ENT_QUOTES).'"> ks');
    }
    echo('<input type="submit" name="submit" value="Spočítat cenu fytopufu">');
    echo('</form>');
} else {
    $final = 0;
    $intermediate = array();
    foreach($fields as $name => $properties){
        $value = $fields[$name]['value'] = floatval($_POST[$name]);
        $result = $value * $properties['coefficient'];
        $intermediate[$name] = $result;
        $final += $result;
    }
    foreach($intermediate as $name => $result){
        echo('<p class="vypocet">'.htmlspecialchars($fields[$name]['title']).': '.$fields[$name]['value'].' × '.$fields[$name]['coefficient'].' € = '.$result.' €</p>');
    }
    echo('Celková cena fytopufu: '.$final.' €');
}
?>
lionel messi
Profil
ŠimizuŠikenze:
Pole v PHP snad znáš
Áno, bolo mi jasné, že cesta na 99,99% povedie týmto smerom, ale stále mi robí problém pochopenie vnorených polí (nemyslím syntaktické, skôr logické — nikdy mi nenapadne ich využiť).

Fisir:
Ďakujem pekne, funguje bezchybne.
Fisir
Profil
Reaguji na lionela messiho:
Ďakujem pekne, funguje bezchybne.
Není zač, ale jak tak koukám, tak jsem místo rychlého náčrtu udělal celý výkres :-).

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0