Page 1 of 1

Tutorial: Formularberechnungen

Posted: Mon 20. Jan 2014, 08:40
by santscho
Hier ein paar Formular-Berechnungen

Zuerst eine leere php-Datei "kalkulation.php" erstellen in template/inc_script/frontend_init

Beispiel 1: Formular-Felder addieren.
5 Felder: wert1, wert2, wert3, wert4, wert5
1 Feld hidden: total

Kalkulation.php:

Code: Select all

<?php
if(isset($_POST)) {
$ans1 = $_POST['wert1'];
$ans2 = $_POST['wert2'];
$ans3 = $_POST['wert3'];
$ans4 = $_POST['wert4'];
$ans5 = $_POST['wert5'];
$_POST['total'] = $ans1 + $ans2 + $ans3 + $ans4 + $ans5;
}
?>

Beispiel 2: Formularfelder multiplizieren
1 Feld (unbedingt sicherstellen dass nur Zahlen akzeptiert werden): anzahl_fotos
1 Feld hidden (hier den Preis pro Stueck als default eingeben): preis_foto
1 Feld hidden: total

Kalkulation.php:

Code: Select all

<?php
// Formular was sent
if(isset($_POST['anzahl_fotos'])) {
  // Calculation here...
    $_POST['total'] = xss_clean($_POST['anzahl_fotos']) * xss_clean($_POST['preis_foto']);
}
?>

Re: Tutorial: Formularberechnungen

Posted: Mon 20. Jan 2014, 08:52
by update
Ay Ay Danke!
Das fängt ja gut an :D :D

Re: Tutorial: Formularberechnungen

Posted: Mon 20. Jan 2014, 09:23
by santscho
Im Beispiel 2 moechte ich nun noch halben Preis pro foto berechenen wenn die Checkbox "Member" angetickt wird. Werte fuer die Checkbox: 1 (nicht member) und 2 (member)
Etwa so...

Code: Select all

<?php
// Formular was sent
if(isset($_POST['anzahl_fotos'])) {
  // Calculation here...
    $_POST['preis_foto_member'] = xss_clean($_POST['preis_foto']) / xss_clean($_POST['member']);
    $_POST['total'] = xss_clean($_POST['anzahl_fotos']) * xss_clean($_POST['preis_foto_member']);
}
?>

Re: Tutorial: Formularberechnungen

Posted: Mon 20. Jan 2014, 10:01
by Oliver Georgi
Nie nur auf $_POST testen — das ist immer gesetzt, da Superglobale. Immer konkret. Und Typprüfung bzw. Umwandlung nicht vergessen!

Code: Select all

<?php
if(isset($_POST['wert1])) {
$ans1 = (int) $_POST['wert1'];
$ans2 = (int) $_POST['wert2'];
$ans3 = (int) $_POST['wert3'];
$ans4 = (int) $_POST['wert4'];
$ans5 = (int) $_POST['wert5'];
$_POST['total'] = $ans1 + $ans2 + $ans3 + $ans4 + $ans5;
}
?>
Und Obacht mit dem xss_clean, das ist nicht nötig hier. Wenn dort Zahlen erwartet werden, einfach Typumwandlung vornehmen.

Code: Select all

<?php
// Formular was sent
if(isset($_POST['anzahl_fotos'])) {
  // Calculation here...
    $_POST['member'] = floatval($_POST['member']);
    $_POST['preis_foto'] = floatval($_POST['preis_foto']);
    $_POST['anzahl_fotos'] = intval($_POST['anzahl_fotos']);
    // attention division / 0 
    if($_POST['member'] && $_POST['preis_foto'] && $_POST['anzahl_fotos']) {
        $_POST['preis_foto_member'] =  $_POST['preis_foto'] / $_POST['member'];
        $_POST['total'] = $_POST['anzahl_fotos'] * $_POST['preis_foto_member'];
    } else {
        $_POST['preis_foto_member'] = 0; // This cannot be!!! 
        $_POST['total'] = 0;
        // ERROR Handling
    }
}
?>
Ich weiß nicht, warum Du hier intern mit $_POST arbeitest, also sinnvoller wäre, dass die Preise NICHT über Post kommen! Sonst kann ich das einfach manipulieren.