21. září bude sraz! Od 18.00 v restauraci Tradice v Praze u Anděla
Autor Zpráva
tomas2245
Profil
Zdravím,

Mám spravenú objednávku klasicky cez inputy kde sa zadá počet kusov a to mi príde na mail...
Potreboval by som spraviť keď vyplnia napríklad 20 kusov tak sa to spočíta [ 20 * 0,20 = 4 € ] a to mi príde na email ako ,,Celková cena"

Ceny mám spravené nasledovne:
za kus: 0,20 , nad 100 kusov: 0,17 , nad 500 kusov: 0,16 , nad 1000 kusov: 0,14


V html môj kód vyzerá klasicky takto:

<input type="text" name="polozka1" size="5" /> ks


V php:

$meno=$_POST["meno"];
$priezvisko=$_POST["priezvisko"]

 if ($_POST["polozka1"] == NULL){
}
else{
$polozka1='POLOŽKA 1: '.$_POST["polozka1"];
}

 if ($_POST["polozka2"] == NULL){
}
else{
$polozka2='POLOŽKA 2: '.$_POST["polozka2"];
}


$text=$_POST["text"];
$text="
Meno: $meno
Priezvisko: $priezvisko

$polozka1
$polozka2


Bolo by niečo také možné spraviť?
V php som úplný amatér tak by som bol rád za podrobné vysvetlenie a návrh kódu.

Ďakujem :)
Tomáš123
Profil
tomas2245:
Nepochopil som, čo má uvedený kód spoločné s tvojim problémom, ale počítanie by šlo spraviť pomocou jednoduchej funkcie:
function spocitaj($pocetKusov) {
        if($pocetKusov < 100) {
            return $pocetKusov * 0.20;
        }
        elseif($pocetKusov < 500) {
            return $pocetKusov * 0.17;
        }
        elseif($pocetKusov < 1000) {
            return $pocetKusov * 0.16;
        }
        else {
            return $pocetKusov * 0.14;
        }
    }
    echo spocitaj(90); //Namiesto 90 dosadíš $_POST['polozka']

Na riadku 18 prepisuješ to, čo sa do premennej $text uložilo o riadok vyššie. Zmeň symbol = na symbol pripojenia ďalšieho reťazca .=.

Predpokladám, že podmienkou if ($_POST["polozkaN"] == NULL) overuješ, či bolo formulárové pole vyplnené. Skôr ale potrebuješ overiť, či je jeho hodnota číslom, aby si mohol ďalej počítať. Učiníš tak pomocou funkcie is_numeric(), prípadne sa môžeš pokúsiť o prevedenie akéhokoľvek iného dátového typu na číslo pomocou funkcie intval().
tomas2245
Profil
Tomáš123:

Ďakujem, vyskúšam :)
Alphard
Profil
Tenhle typ algoritmů je vždycky užitečné řešit obecně, ne zadrátovat číselníky do funkcí...
$itemsCount = 147; # číselná hodnota z formuláře

$prices = [ # ve tvaru: začátek skupiny => cena za skupinu
  1 => 0.20,
  101 => 0.17,
  501 => 0.16,
  1001 => 0.14,
];

$price = current($prices); # základní cena při neplatném vstupu
foreach ($prices as $levelCount => $levelPrice) {
    if ($levelCount > $itemsCount) {
        break;
    }
    $price = $levelPrice;
}

echo $itemsCount*$price;
tomas2245
Profil
Ďakujem vyskúšam,


Ešte mám otázku dá sa spraviť že tie údaje: meno, priezvisko budú orámované v tabuľke v emaily?
príkazom:

<table width="500" border="1" cellpadding="5" cellspacing="0" bordercolor="#000000">

<tr>
obsah
</tr>


lebo mi to písalo chybu hneď u width="500"
lionel messi
Profil
tomas2245:
lebo mi to písalo chybu hneď u width="500"
Neuviedol si znenie chyby, ale predpokladám, že pes bude zakopaný v nutnosti escapovať znaky, ktoré používaš v PHP na ohraničenie reťazca. To znamená, že keď ich nechceš použiť v tomto kontexte, musíš pred ne uviesť spätné lomítko.

Čiže napríklad takto:

$retazec = "<table width=\"500\" border=\"1\" cellpadding=\"5\" cellspacing=\"0\" bordercolor=\"#000000\">";

Ďalšie možné riešenia problému v tomto prípade:
1. Ohraničovať hodnoty HTML atribútov do apostrofov bez nutnosti escapovania (resp. ich neohraničovať vôbec).
2. Ponechať hodnoty HTML atribútov v úvodzovkách a použiť na ohraničenie reťazca v PHP apostrofy (potom bude potrebné escapovať apostrofy). Pozor však na rozdielnu interpretáciu doláru (porovnaj echo "Počet kusov: $ks"; a echo 'Počet kusov: $ks').
tomas2245
Profil
Neviem no, nejak mi to nechce fungovať.
Predstavujem si to takto aby to v emaily vyzeralo:
lionel messi
Profil
tomas2245:
Neviem no, nejak mi to nechce fungovať.
Neviem no, asi to bude rozbité.

Ukáž kód, inak sa nepohneme z miesta.
tomas2245
Profil
echo "<table>
<tr><td>Jmeno</td><td>Prijmeni</td></tr>
<tr><td>" . $GET['jmeno'] . "</td><td>" . $GET['prijmeni'] . "</td></tr>
</table>";

ten kód nie je môj našiel som ho.
lionel messi
Profil
tomas2245:
ten kód nie je môj
Viem, že s PHP začínaš a sám si veľmi dobre pamätám svoje prvé programátorské kroky. Jedna z dobrých rád preto znie: Pokiaľ cudziemu kódu vôbec nerozumieš, nie je obvykle najlepší nápad použiť ho.

našiel som ho.
Radšej sa nepýtam, kde, obsahuje triviálnu chybu.

echo "<table>
<tr><td>Jmeno</td><td>Prijmeni</td></tr>
<tr><td>" . $_GET['jmeno'] . "</td><td>" . $_GET['prijmeni'] . "</td></tr>
</table>";

$GET je premenná (presnejšie pole) ako každá iná (v tomto prípade podľa všetkého nedefinovaná a mala by vyhadzovať poznámku). Ty potrebuješ $_GET, tzv. superglobálne pole, ktoré slúži na prenos dát, napr. zadaných do formulára či URL vo forme parametrov.
Tomáš123
Profil
tomas2245:
Myslím, že by sa ešte zišlo spomenúť, že podmienka postavená tak ako tie tvoje:
if ($_POST["polozka1"] == NULL) { //prázdny blok podmienky nie je najčistejší nápad, i keď funguje
}
else{
$polozka1='POLOŽKA 1: '.$_POST["polozka1"];
}
... sa dá zjednodušiť a skrátiť:
if ($_POST["polozka1"] != NULL) {
  $polozka1='POLOŽKA 1: '.$_POST["polozka1"];
}
tomas2245
Profil
Tomáš123:

Ďakujem :)

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