einfaches rechnen

dropsi

Grünschnabel
Hallo,

ich habe ein normales Formular (für eine Bildbestellung) indem man zwischen 3 Bildgrößen und 3 Bildvarianten wählen kann. Abhängig von der gewählten Größe und Variante ergibt sich dann der Preis.

Hier mein Code dazu:
PHP:
$format_13cm18cm = 9.90 ; // Preis für Variante 1 im Format 13x18 (Basic)
$format_21cm29cm = 14.90 ; // Preis für Variante 1 im Format 21x29  (Basic)
$format_29cm42cm = 19.90 ; // Preis für Variante 1 im Format 29x42 (Basic)

$basic = 0.00 ; // Variante 1 - kann ich sicher auch weglassen
$premium = 10.00 ; // Variante 2 - hier wird zum Preis 10euro dazugerechnet
$plus + $format_13cm18cm = 20.00 ; // Variante 3 - hier soll bei format 13x18 - 20euro zum Basic Preis dazu
$plus + $format_21cm29cm = 30.00 ; // Variante 3 - hier soll bei format 21x29 - 30euro zum Basic Preis dazu
$plus + $format_29cm42cm = 40.00 ; // Variante 3 - hier soll bei format 29x42 - 20euro zum Basic Preis dazu



$variante = $_POST['variante']; 

if ($variante == "basic") 
    { 
    $Preis2 = $basic; 
    } 
elseif ($variante == "premium") 
    { 
    $Preis2 = $premium; 
    } 
elseif ($variante == "plus") 
    { 
    $Preis2 = $plus; 
    } 

$format = $_POST['format']; 

if ($format == "format_13cm18cm") 
    { 
    $Preis = $format_13cm18cm; 
    } 
elseif ($format == "format_21cm29cm") 
    { 
    $Preis = $format_21cm29cm;  
    } 
elseif ($format == "format_29cm42cm") 
    { 
    $Preis = $format_29cm42cm; 
    } 


$Betrag = $Preis2 + $Preis ;
$Betrag = sprintf("%01.2f", $Betrag);
$Betrag = str_replace(".", ",", $Betrag); 
echo "Ihre Bestellung kostet $Betrag Euro inkl. Porto und Verpackung!"

Mein Problem besteht nun also darin, dass bei der Variante 3 (plus) der Preis, abhängig vom Format, um 20euro, 30euro oder 40euro mehr werden soll, was so aber bislang nicht funktioniert.

Bin eigentlich Designer, habe daher wirklich kaum Ahnung von php.
Wahrscheinlich ist der Fehler sehr einfach, aber auch stundenlanges googlen und die Suche im Forum brachten mich nicht weiter.

Danke.
 
Moin dropsi,

soetwas lässt sich gut über einen Array lösen, Beispiel:
PHP:
$preise = array(
  'format_13cm18cm' =>  array(
    'basic'   =>  9.90,
    'premium' =>  19.90,
    'plus'    =>  29.90
  ),
  'format_21cm29cm' =>  array(
    'basic'   =>  14.90,
    'premium' =>  24.90,
    'plus'    =>  44.90
  ),
  'format_29cm42cm' =>  array(
    'basic'   =>  19.90,
    'premium' =>  29.90,
    'plus'    =>  59.90
  )
);
du kannst dann per
Code:
$preise[$_POST['format']][$_POST['variante']]

bequem auf den Preis zugreifen :)

Beachte: wenn du die Preise irgendwo ausgeben willst, musst du den Preis vorher mit [phpf]number_format[/phpf] behandeln, da ansonsten die Nullen am Ende der Nachkommastellen von PHP verschluckt werden, da diese bei Fliesskommazahlen ohne Bedeutung sind.
Du könntest alternativ auch die Zahlen in Anführungszeichen setzen, aber da ich annehme, dass du damit eh noch rechnen musst(MWSt. oder Gesamtsumme des Warenkorbs errechnen) wäre das überflüssig.
 
Erstmal Danke für deine Antwort. Habe jetzt ein wenig rumprobiert, aber so ganz hinbekommen habe ich es leider trotzdem nicht.

Das:
Code:
$preise[$_POST['format']][$_POST['variante']]

soll mir in deinem Beispiel jetzt den Preis ausgeben, oder habe ich das falsch verstanden?

Bekomme jedenfalls immer die Meldung:
Parse error: syntax error, unexpected '[', expecting ']' in seite2.php on line 249

In der Zeile steht der Code von oben.

Sorry falls ich mich doof anstelle :)
 
Ich glaube du hast das Prinzip eines Arrays nicht verstanden.

Ein Array ist nichts weiter wie ein Datencontainer - genau wie eine Variable, nur anders. ;)

Bei Sven's Beispiel kannst du also wie folgt auf die darin gespeicherten Daten zugreifen:
PHP:
echo $preise['format_13cm18cm']['basic'];
echo $preise['format_13cm18cm']['premium'];
echo $preise['format_21cm29cm']['basic'];

In deinem Formular könntest du nun also - zum Beispiel - ein Dropdown-Menü einbauen, welches den Namen "format" trägt. Die darin enthaltenen Options haben als Value "format_13cm18cm", "format_21cm29cm" und "format_29cm42cm".

Das selbe wiederholst du mit einem Feld namens "variante", worin die verschiedenen Varianten enthalten sind.

Wird das Formular nun abgeschickt, kannst du über die o. g. Zeile direkt auf den Preis zugreifen, anstatt für jeden Fall eine extra if-Abfrage schreiben zu müssen.
 
Den Ablauf des Zugriffs hat DeluXe ja gut erläutert :)

Keine Ahnung, woher der Parse-Fehler bei dir kommt, dort dürfte beim Einbau etwas daneben gegangen sein.
Hier mal ein funktionierendes Beispiel anhand meiner Codeschnipsel:
PHP:
<?php
$preise = array(
  'format_13cm18cm' =>  array(
    'basic'   =>  9.90,
    'premium' =>  19.90,
    'plus'    =>  29.90
  ),
  'format_21cm29cm' =>  array(
    'basic'   =>  14.90,
    'premium' =>  24.90,
    'plus'    =>  44.90
  ),
  'format_29cm42cm' =>  array(
    'basic'   =>  19.90,
    'premium' =>  29.90,
    'plus'    =>  59.90
  )
);  

if(isset($_POST['format'])//Prüfen, ob Formular gesendet wurde
    && isset($_POST['variante'])
      && isset($preise[$_POST['format']][$_POST['variante']]))
{
  echo 'Ihre Auswahl:'.$_POST['format'].'('.$_POST['variante'].')'
                      .'<strong>&nbsp;&euro;'.
                      number_format($preise[$_POST['format']][$_POST['variante']],2,',','.').
                      '</strong>';
                      
}
?>
<form method="post">
<select name="format">
<?php
//format-Liste füllen
foreach($preise as $k => $v)
{
  echo '<option>'.$k;
}
?>
</select>
<select name="variante">
<?php
//variante-Liste füllen
foreach($preise['format_13cm18cm'] as $k => $v)
{
  echo '<option>'.$k;
}
?>
</select>
<input type="submit">
</form>
 
An dem Beispiel von Sven ist nur ein was zu bemängeln: die option-Tags sind nicht HTML valid. Verbessert müsste das Beispiel dann so aussehen:
PHP:
<?php
$preise = array(
  'format_13cm18cm' =>  array(
    'basic'   =>  9.90,
    'premium' =>  19.90,
    'plus'    =>  29.90
  ),
  'format_21cm29cm' =>  array(
    'basic'   =>  14.90,
    'premium' =>  24.90,
    'plus'    =>  44.90
  ),
  'format_29cm42cm' =>  array(
    'basic'   =>  19.90,
    'premium' =>  29.90,
    'plus'    =>  59.90
  )
);  

if(isset($_POST['format'])//Prüfen, ob Formular gesendet wurde
    && isset($_POST['variante'])
      && isset($preise[$_POST['format']][$_POST['variante']]))
{
  echo 'Ihre Auswahl:'.$_POST['format'].'('.$_POST['variante'].')'
                      .'<strong>&nbsp;&euro;'.
                      number_format($preise[$_POST['format']][$_POST['variante']],2,',','.').
                      '</strong>';
                      
}
?>
<form method="post">
<select name="format">
<?php
//format-Liste füllen
foreach($preise as $k => $v)
{
  echo '<option value="'.$k.'">'.$k.'</option>';
}
?>
</select>
<select name="variante">
<?php
//variante-Liste füllen
foreach($preise['format_13cm18cm'] as $k => $v)
{
  echo '<option value="'.$k.'">'.$k.'</option>';
}
?>
</select>
<input type="submit">
</form>
 
Dann sind sie eben nicht wohlgeformt - läuft ja in etwa auf das Gleiche hinaus. Aber meine Variante sieht auf jeden Fall schöner im Quelltext aus :)
 
Super, funktioniert spitze. Muss zwar nun haufen Formulare umschreiben aber ist halt so, wenn man keine Ahnung von php hat :)

Danke auf jedenfall dafür.

Eine Frage habe ich aber noch.

Wie kann ich den einzelnen Optionen richtige Namen geben?
Ich habe aus dem Dropdown-Menü jetzt Radio-Button gemacht und möchte natürlich, dass dort nicht "format_13cm18cm" sondern "Format: 13cm x 18cm" steht.

Danke nochmal.
 
Zurück