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 |
#2 · Zasláno: 7. 3. 2015, 10:31:08
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 |
#3 · Zasláno: 7. 3. 2015, 10:33:45
Tomáš123:
Ďakujem, vyskúšam :) |
||
Alphard Profil |
#4 · Zasláno: 7. 3. 2015, 10:47:37
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 |
#7 · Zasláno: 7. 3. 2015, 12:58:06
Neviem no, nejak mi to nechce fungovať.
Predstavujem si to takto aby to v emaily vyzeralo: |
||
lionel messi Profil |
#8 · Zasláno: 7. 3. 2015, 13:00:12
tomas2245:
„Neviem no, nejak mi to nechce fungovať.“ Neviem no, asi to bude rozbité. Ukáž kód, inak sa nepohneme z miesta. |
||
tomas2245 Profil |
#9 · Zasláno: 7. 3. 2015, 13:03:04
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 |
#11 · Zasláno: 7. 3. 2015, 19:11:28
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"]; } if ($_POST["polozka1"] != NULL) { $polozka1='POLOŽKA 1: '.$_POST["polozka1"]; } |
||
tomas2245 Profil |
#12 · Zasláno: 7. 3. 2015, 19:54:48
Tomáš123:
Ďakujem :) |
||
Časová prodleva: 9 let
|
0