Berechnung von Grundstückpreisen

Kenney

Mitglied
Erstellen Sie ein PHP-Skript zur Berechnung von Grundstückspreisen. Es soll folgende Funktionen bieten:
- Länge und Breite eines Grundstücks in Metern einlesen.
- Preis pro Quadratmeter einlesen,
- den Preis des Grundstücks berechnen und ausgaben,
- je nach Auswahl zwischen 3 und 7 % Provision aufschlagen und den Preis ausgeben,
- je nach Auswahl 19 % Mehrwertsteuer aufschlagen und den Preis ausgeben.

Hier ist mein Entwurf:
PHP:
<!doctype html>
<html lang="de">
<head>
  <meta charset="utf-8">
  <title>Berechnung des Grundstückes</title>
  <?php
    error_reporting(-1);
    ini_set("display_errors", 1);
    ?>
  <?php
  include("E4_Grundstueck.incl.php");
  ?>
</head>
<body>
  <form method="post">
  <h2>Grundstückspreise</h2>
  <?php
    if(isset($_POST["breite"]))
      {
        $breite = htmlspecialchars($_POST["breite"], ENT_QUOTES);
        $laenge = htmlspecialchars($_POST["Laenge"], ENT_QUOTES);
        $preisqm = htmlspecialchars($_POST["preisqm"], ENT_QUOTES);
        $proSatz = $_POST["proSatz"];
        $cbmwst = $_POST['cbmwst'];
        echo "<hr>";
        echo "$cbmwst<br>";
        print_r($cbmwst);
        echo "<hr>";
        var_dump($cbmwst);
        echo "<hr>";
        $qm = multiplikation($breite, $laenge);
        echo "Quadrat $qm<br>";

        $nettPr = multiplikation($preisqm, $qm);
        echo "Nettopreis $nettPr<br>";

        $proNett = nettPrmPro($proSatz, $nettPr);
        echo "Nettopreis mit Provistion".($proNett)."<br>";

        $brPr = nettPrmMwst($cbmwst, $proNett);
        echo "Bruttopreis $brPr<br>";

      echo "<p>Breite: $breite m</p>";
      echo "<p> Länge: $laenge m</p>";
      echo "<p> Preis pro qm: $preisqm €</p>";
      echo "<p>Nettopreis: $nettPr €</p>";
      echo "<p>Nettopreis mit Provision: $proNett €</p>";
      echo "<p>Bruttopreis: $brPr €</p>";
    }
  ?>
    <fieldset>
      <label for="breite">Breite: </label>
      <input type="text" id="breite" name="breite" placeholder="Breite?">
      <br>
      <label for="laenge ">Länge: </label>
      <input type="text" id="laenge" name="Laenge" required placeholder="Länge?">
      <br>
      <label for="preisqm: ">Preis pro m²: </label>
      <input type="text" id="preisqm" name="preisqm" required placeholder="Preis / m²?">
      <br>
      <label for="proSatz">Provisionssatz: </label>
        <select id="proSatz" name="proSatz">
          <option value="3" <?php if("3" == 3)
                                    {
                                      echo " selected";
                                    }?>> 3 </option>
          <option value="4" <?php if("4" == 4)
                                    {
                                      echo " selected";
                                    }?>> 4 </option>
          <option value="5" <?php if("5" == 5)
                                    {
                                      echo " selected";
                                    }?>> 5 </option>
          <option value="6" <?php if("6" == 6)
                                    {
                                      echo " selected";
                                    }?>> 6 </option>
          <option value="7" <?php if("7" == 7)
                                    {
                                      echo " selected";
                                    }?>> 7 </option>
        </select>
      <br>
      <input type="checkbox" id="cbmwst" name="cbmwst[]" value="19" <?php if(empty($_POST))
                                                                          {
                                                                            var_dump($_POST);
                                                                          }?>>
      <label for="MwSt">MwSt</label>
    </fieldset>
    <p>
    <input type="submit" value="Berechnen">
    </p>
  </form>
</body>
</html>

Ich bin natürlich wieder für eure hilfreichen Kommentare dankbar.
 
Zuletzt bearbeitet von einem Moderator:
Lösung
B
Wenn du das
PHP:
    <?php
        $proSatzArr = [3, 4, 5, 6, 7];
        foreach($proSatzArr As $proS)
        {
            $ausgabe = "<option value='$proS'";
            if(isset($_POST["proSatz"]))
            {
               if($_POST["proSatz"] == $proS)
               {
                    $ausgabe .= " selected";
               }
           }
           $ausgabe .= ">$proS</option>\n";
           echo $ausgabe;
       }
     ?>
änderst in
PHP:
    <?php
        $proSatzArr = [3, 4, 5, 6, 7];
        
        $proSatz = isset($_POST["proSatz"]) ? $_POST["proSatz"] : "";
        
        foreach($proSatzArr As $proS)
        {
            $ausgabe = "<option value='$proS'";
        
            if ($proSatz == $proS)...
Könntest du vielleicht mal alles in ein Posting schreiben, anstatt 3 hintereinander?
 
Schöner Hinweis. Die Idee dahinter, war, dass wenn er "3" gewählt hat auch mit 3 rechnet.

Die if() könnte man kompakter gestalten, jedenfalls bei der Provision?
In dem Fall würde ich das <option> Feld mit PHP zusammenbauen.
Stell dir vor, du hast 100 <options> Tags, willst du dann in jeden eine if Abfrage reinbauen (die so eh eigentlich falsch ist) ?

Im anderen Thema wurde dir ja schon erklärt, wie man sowas zusammenbaut.
Da muss nur noch eine Abfrage rein, welches Feld selektiert wurde und dann hast du ein Problem weniger.
 
Anstelle von Option-buttons würde ich ne ComboBox/DropDownList nehmen.
oder einfach ein Textfeld, welches den eingegebenen Wert gegen die Grenzen (3 bis 7%) validiert. So kann man auch 4,75% Provision eingeben, und sich das ganze „If„-Gemurkse sparen.
 
Anstelle von Option-buttons würde ich ne ComboBox/DropDownList nehmen.
oder einfach ein Textfeld, welches den eingegebenen Wert gegen die Grenzen (3 bis 7%) validiert. So kann man auch 4,75% Provision eingeben, und sich das ganze „If„-Gemurkse sparen.
Vielen Dank. Ich versuche diesen Vorschlag umzusetzen.


In dem Fall würde ich das <option> Feld mit PHP zusammenbauen.
Stell dir vor, du hast 100 <options> Tags, willst du dann in jeden eine if Abfrage reinbauen (die so eh eigentlich falsch ist) ?

Im anderen Thema wurde dir ja schon erklärt, wie man sowas zusammenbaut.
Da muss nur noch eine Abfrage rein, welches Feld selektiert wurde und dann hast du ein Problem weniger.
Dir auch vielen Dank. Dieses werde ich auch umsetzen.
 
Ich bin hier zwar weit gehend draußen wegen des "Viele Köche ..." aber ein Hinweis: Angesichts der Tatsache, dass der Fragesteller noch einige Verständnisprobleme hat ist es wenig zielführend, x Varianten vorzuschlagen. Statt dessen auf eine konzentrieren und versuchen zu erklären, wie sie funktioniert. Das Select aus dem Eingangsposting ist dafür durchaus geeignet weil der Fragesteller es schon in seinem vorigen Projekt verwendet hat.
 
Hallo,
die Vorschläge sind eingearbeitet worden.

Leider kann ich diese nicht testen, weil ich den Fehler nicht korrekiert bekomme.

uncaught typeerror: unsupported operand types: string / int

Hier das abgeänderte Modell
Code:
<!doctype html>
<html lang="de">
<head>
  <meta charset="utf-8">
  <title>Berechnung des Grundstückes</title>
  <?php
    error_reporting(-1);
    ini_set("display_errors", 1);
    ?>
  <?php
  include("E4_Grundstueck.incl.php");
  ?>
</head>
<body>
  <?php
    if(isset($_POST["breite"]))
    {
    ?>
  
  <?php  
    //Felder vorbelegen
        $breite = (isset($_POST["breite"])) ? $_POST["breite"]: "";
        $laenge = (isset($_POST["laenge"])) ? $_POST["laenge"]: "";
        $preisqm = (isset($_POST["preisqm"])) ? $_POST["preisqm"]: "";
        $proSatz = (isset($_POST["proSatz"])) ? $_POST["proSatz"]: "";
        $cbmwst = (isset($_POST["cbmwst"])) ? $_POST["cbmwst"]: "";
 
    //Berechnung
        $qm = multiplikation($breite, $laenge);
        $nettPr = multiplikation($preisqm, $qm);
        $proNett = nettPrmPro($proSatz, $nettPr);
        $brPr = nettPrmMwst($cbmwst, $proNett);
    
    //Ausgabe
      echo "<p>Breite: $breite m<br>
                Länge: $laenge m<br>
                Preis pro qm: $preisqm €<br>
                Nettopreis: $nettPr €<br>
                Nettopreis mit Provision: $proNett €<br>
                Bruttopreis: $brPr €</p>";
    
  ?>
  <?php
    }
    ?>
<h2>Grundstückspreise</h2>
  <form method="post">
    <fieldset>
      <label for="breite">Breite: </label>
      <input type="text" id="breite" name="breite" required placeholder="Breite?">
      <br>
      <label for="laenge ">Länge: </label>
      <input type="text" id="laenge" name="laenge" required placeholder="Länge?">
      <br>
      <label for="preisqm: ">Preis pro m²: </label>
      <input type="text" id="preisqm" name="preisqm" required placeholder="Preis / m²?">
      <br>
      <label for="proSatz">Provisionssatz: </label>
        <select name="proSatz">
        <?php
        $proSatzArr = [3, 4, 5, 6, 7];
                foreach($proSatzArr As $proS)
                    {
                    $ausgabe = "<option value '{$proS}'";
                    if(isset($_POST["proSatz"]))
                    {
                        if($_POST["proSatz"] == $proS)
                        {
                            $ausgabe .= " selected";
                        }
                    }
                    if(empty($_POST["proSatz"]))
                    {
                        $proS;
                    }
                    $ausgabe .= ">$proS</option>\n";
                    echo $ausgabe;
                    }
        ?>
        </select>
      <br>
      <input type="checkbox" id="cbmwst" name="cbmwst" value="19">
      <label for="cbmwst">MwSt</label>
    </fieldset>
    <p>
    <input type="submit" value="Berechnen">
    </p>
  </form>
</body>
</html>

Vielleicht könntet ihr mich auf die richtige Spurr bringen.
 
Zurück