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)...
Hat das einen besonderen Grund, warum du die Fehlermeldung verstümmmelt postest?

Und was versprichst du dir von
PHP:
if(empty($_POST["proSatz"]))
{
     $proS;
}
Hallo m.scatello,
im ersten Teil, verweißt er auf eine andere Datei, die die Berechnungen durchführt und auf die Zeile 31 in der Hauptdatei, wo die eig. Funktion steht.

Ich vermute, weil etwas nicht ausgewählt wurde, kann er etwas nicht berechnen.

Deshalb jetzt zum zweiten Teil, damit wollte ich erreichen, das er einen Wert bekommt, mit dem er rechnen könnte.
 
Würdest bitte einfach die komplette Fehlermeldung von PHP posten.

Du glaubst wirklich dass hiermit ein Wert zugewiesen wird?
PHP:
$proS;
 
Die kpl. Fehlermeldung
Fatal error: Uncaught TypeError: Unsupported operand types: string / int in
\xampp\htdocs\Projekte\E4_Grundstueck.incl.php: 13 Stack trace: #0
\xampp\htdocs\Projekte\E4_Grundstueck.php(31): nettPrmPro('proSatz', 16200)#1 {main} thrown in \xampp\htdocs\Projekte\E4_Grundstueck.incl.php on line 13


Ich glaube, dass er ein Wert übergeben kann.
 
Fatal error: Uncaught TypeError: Unsupported operand types: string / int in
\xampp\htdocs\Projekte\E4_Grundstueck.incl.php
Jetzt stelle dir mal vor, wir würden das Script E4_Grundstueck.incl.php kennen. :(

Du kannst noch nicht mal Fehlermeldungen richtig lesen. Und wenn du dir den Stack-Trace ansiehst, dann sollte dir auffallen, dass die Funktion nettPrmPro einen String übergeben bekommt, mit dem wohl in der Funktion gerechnet wird.

Auf "Richtig debuggen" habe ich dich schon mal hingewiesen, oder?

Und wie ein Select richtig auszusehen hat, kannst du hier mal nachlesen: HTML select tag
 
Zuletzt bearbeitet von einem Moderator:
Ohne php/JavaScript zu kennen, tippe ich bei seiner Fehlermeldung darauf, dass er versucht, einen String mit einem Integer zu verknüpfen mittels einem Operanden („+“-Zeichen?), ohne vorher den Int in einen String umzuwandeln (oder den String in Int bei math. Berechnungen)

kenne ich aus Pascal
 
Jetzt stelle dir mal vor, wir würden das Script E4_Grundstueck.incl.php kennen. :(

Du kannst noch nicht mal Fehlermeldungen richtig lesen. Und wenn du dir den Stack-Trace ansiehst, dann sollte dir auffallen, dass die Funktion nettPrmPro einen String übergeben bekommt, mit dem wohl in der Funktion gerechnet wird.

Auf "Richtig debuggen" habe ich dich schon mal hingewiesen, oder?

Und wie ein Select richtig auszusehen hat, kannst du hier mal nachlesen: HTML select tag
Klar, ist mir um Gefecht unter gegangen. :eek:

Ich könnte leider feststellen, dass mit der Übermittlung des Types, was falsch lief, ich mir diese nicht erklären kann.

Ja, RICHTIG, deshalb bin ich bei Punkt 8., deiner Liste, und frage hier nach.

Danke für den Hinweis der HTML, select tag. Ist geändert worden.
 
Hallo,
jetzt funktioniert alles wie es soll, der Erstaufruf, die Eingabe, die Berechnungen und die Ausgabe.

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>
<h2>Grundstückspreise</h2>
  <?php
    if(isset($_POST['breite']))
    {
    //Felder vorbelegen
        $breite = ($_POST['breite']);
        $laenge = ($_POST['laenge']);
        $preisqm = ($_POST['preisqm']);
        $proSatz = ($_POST['proSatz']);
        $cbmwst = (isset($_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>";
    }
    ?>
<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 id="proSatz" 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";
                        }
                    }
                    $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>
 
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)
                    $ausgabe .= " selected";

           $ausgabe .= ">$proS</option>\n";

           echo $ausgabe;
       }
     ?>
dann kannst du dir das isset in der Schleife sparen
 
Lösung
Zurück