Kabraxxi: Fehler im Script

Moin,

ich hoffe dass Ihr mir helfen könnt, ich habe ein kleines Script geschrieben, dass mir was ausrechnen soll.

Hier mal eine kleine Erklärung dazu:

1.) User wählt, dass er Angestellter ist
2.) User wählt, dass er Männlich ist
3.) User wählt z.b. dass er 1950 geboren ist.

so nun sollte das Script rechnen nun das raus bringen:

$paket1 = 148.70;
$paket2 = 225.74;
$paket3 = 326.54;

bei 1950 stimmt das alles noch, denn das sind die Ausgangswerte, aber wenn der User nun folgendes wählt:

1.) User wählt, dass er Angestellter ist
2.) User wählt, dass er Männlich ist
3.) User wählt z.b. dass er 1951 geboren ist

dann rechnet er einfach nichts mehr. Es kommt genau das gleiche Ergebnis raus, wie bei 1950 und es sollte aber foglendes raus kommen:

$paket1 = 143.52;
$paket2 = 217.84;
$paket3 = 315.11;

der Preis ergibt sich aus diesem:

elseif ($_POST["berufsstatus"]=="s")
{
 if($_POST["geschlecht"]=="m")
 {
 $gtec = 3.5;
 }
 else
 {
 $gtec = 1.95;
 }
}

So ich kopiere euch mal das komplette Script rein, das ist habe, ich kann da wirklich kein Fehler feststellen, hoffe mal, dass Ihr mir da weiter helfen könnt:

  
<?php  
  
print_r($_POST);  
  
$begin = date("Y");  
$jahre = $begin - $_POST["geburtsjahr"];  
$jahre = 50 - $jahre;  
  
var_dump($jahre);  
  
if ($_POST["berufsstatus"]=="a")  
{  
 if($_POST["geschlecht"]=="m")  
 {  
 $gtec = 3.5;  
 }  
 else  
 {  
 $gtec = 1.95;  
 }  
}  
elseif ($_POST["berufsstatus"]=="s")  
{  
 if($_POST["geschlecht"]=="m")  
 {  
 $gtec = 3.5;  
 }  
 else  
 {  
 $gtec = 1.95;  
 }  
}  
// S + M  
if ($_POST["berufsstatus"]=="s" && $_POST["geschlecht"]=="m")  
{  
$paket1 = 148.70;  
$paket2 = 225.74;  
$paket3 = 326.54;  
}  
elseif ($_POST["berufsstatus"]=="a" && $_POST["geschlecht"]=="m")  
{  
$paket1 = 148.70;  
$paket2 = 225.74;  
$paket3 = 326.54;  
}  
  
if ($_POST["geburtsjahr"] == "1950")  
{  
$gtec = "";  
}  
  
if ($gtec != "")  
{  
$ges_paket1 = $paket1 + ($jahre * ($packet1 / 100 * $gtec));  
$ges_paket2 = $paket2 + ($jahre * ($packet2 / 100 * $gtec));  
$ges_paket3 = $paket3 + ($jahre * ($packet3 / 100 * $gtec));  
}  
else  
{  
$ges_paket1 = $paket1;  
$ges_paket2 = $paket2;  
$ges_paket3 = $paket3;  
}  
?>  

Mit freundlichen Grüßen,
Kabraxxi

  1. ich hab jetzt keine lust, mich durch deine if-wüste zu hangeln - aber warum machst du nicht ein mehrdimensionales array?

    $foo = array(1950 => array (  
        maennlich => array (  
          paket1 => '100',  
          paket2 => '200',  
        ),  
        weiblich => array (  
          paket1 => '150',  
          paket2 => '250',  
        ),  
      ),  
    );  
      
    echo $foo[$_POST['jahr']][$_POST['geschlecht']];  
    
    

    dann sparst du dir die ungünstige rechnerei und die vielen ifs

  2. So ich kopiere euch mal das komplette Script rein, das ist habe, ich kann da wirklich kein Fehler feststellen, hoffe mal, dass Ihr mir da weiter helfen könnt:

    [code lang=php]

    ...

    if ($_POST["berufsstatus"]=="a")
    {
    if($_POST["geschlecht"]=="m")
    {
    $gtec = 3.5;
    }
    else
    {
    $gtec = 1.95;
    }
    }

    ...

    // S + M

    ...

    if ($_POST["geburtsjahr"] == "1950")
    {
    $gtec = "";
    }

    if ($gtec != "")

    Wie kommst du darauf, dass $gtec == "" oder != "" sein könnte? Du hast es ja gar nicht initialisiert, und somit ist $gtec undef

    prüfe deine POST Variablen mit isset()

    mfg Beat;

    --
    Woran ich arbeite:
    X-Torah
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
  3. if ($gtec != "")
    {
    $ges_paket1 = $paket1 + ($jahre * ($packet1 / 100 * $gtec));
    $ges_paket2 = $paket2 + ($jahre * ($packet2 / 100 * $gtec));
    $ges_paket3 = $paket3 + ($jahre * ($packet3 / 100 * $gtec));

    schau dir nochmal die Werte in den Klammern an. Du wirst deutsch gedacht haben, aber hast englisch geschrieben.

    $paCket1 ist nicht definiert!

    gruß

    Oliver

    1. echo $begrüßung;

      $paCket1 ist nicht definiert!

      Solche Fehler bekommt man übrigens mit einer Notice erzählt, wenn man das error_reporting auf E_ALL (und display_errors auf on) stellt.

      echo "$verabschiedung $name";

  4. Moin,

    ich bin es nochmals, habe mein Code etwas umgeschrieben und es geht auch fast. Bis zu einem bestimmten jahrgang wird auch richtig gerechnet aber ab 1980 kommt dann ein - Betrag raus und das ist ja falsch. Hat da einer eine Idee oder sieht jemand den Fehler?

    Hier nochmals der neue Code:

    <?php

    // Melde alle PHP Fehler
    error_reporting(E_ALL);

    //print_r($_POST);

    $begin = date("Y");
    $jahre = $begin - $_POST["geburtsjahr"];
    $jahre = 50 - $jahre;
    $jahre = max ( 0, $_POST["geburtsjahr"] - 1950);

    //var_dump($jahre);

    if ($_POST["berufsstatus"]=="a")
    {
     if($_POST["geschlecht"]=="m")
     {
     $gtec = 3.5;
     }
     else
     {
     $gtec = 1.95;
     }
    }
    elseif ($_POST["berufsstatus"]=="s")
    {
     if($_POST["geschlecht"]=="m")
     {
     $gtec = 3.5;
     }
     else
     {
     $gtec = 1.95;
     }
    }

    // S + M
    if ($_POST["berufsstatus"]=="s" && $_POST["geschlecht"]=="m")
    {
    $paket1 = 148.70;
    $paket2 = 225.74;
    $paket3 = 326.54;
    }

    elseif ($_POST["berufsstatus"]=="a" && $_POST["geschlecht"]=="m")
    {
    $paket1 = 148.70;
    $paket2 = 225.74;
    $paket3 = 326.54;
    }

    if ($_POST["geburtsjahr"] == "1950")
    {
    $gtec = "";
    }

    if (!empty($gtec))
    {
    $ges_paket1 = $paket1 - ($jahre * ($paket1 / 100 * $gtec));
    $ges_paket2 = $paket2 - ($jahre * ($paket2 / 100 * $gtec));
    $ges_paket3 = $paket3 - ($jahre * ($paket3 / 100 * $gtec));
    }
    else
    {
    $ges_paket1 = $paket1;
    $ges_paket2 = $paket2;
    $ges_paket3 = $paket3;
    }
    ?>

    Mit freundlichen Grüßen,
    Kabraxxi

    1. echo $begrüßung;

      ich bin es nochmals, habe mein Code etwas umgeschrieben und es geht auch fast. Bis zu einem bestimmten jahrgang wird auch richtig gerechnet aber ab 1980 kommt dann ein - Betrag raus und das ist ja falsch. Hat da einer eine Idee oder sieht jemand den Fehler?

      Bitte betreibe Debugging. Das ist eine teilweise aufwendige und wenig beliebte Tätigkeit, aber das gehört zum Programmieren wie das Amen zur Kirche. Mach Kontrollausgaben, auch der Zwischenergebnisse, und vergleiche so Wunsch und Wirklichkeit. Wenn du Probleme mit der Fehlersuche hast, oder ein Verhalten feststellst, die du dir nicht erklären kannst, frage bitte gezielt. Für Kontrollausgaben ist echo ein Anfang, var_dump() jedoch gibt vom übergebenen Argument (Variable oder Ausdruck) Inhalt und Typ aus, und ist damit präziser. (Bei komplexen Strukturen empfiehlt sich ein vorheriges <pre>.)

      echo "$verabschiedung $name";

      1. Guten Abend,

        so ich habe mal noch ein wenig selber was dran gemacht und ich habe es hin bekommen. Sollte jemand Interesse haben, wie es richtig aussieht, dann hier das richtige Script:

        <?php  
          
          
        //print_r($_POST);  
          
        //$begin = date("Y");  
        //$jahre = $begin - $_POST["geburtsjahr"];  
        //$jahre = 50 - $jahre;  
        $jahre = $_POST["geburtsjahr"] - 1950;  
          
        //var_dump($jahre);  
          
        if ($_POST["berufsstatus"]=="a")  
        {  
         if($_POST["geschlecht"]=="m")  
         {  
         $gtec = 3.5;  
         }  
         else  
         {  
         $gtec = 1.95;  
         }  
        }  
        elseif ($_POST["berufsstatus"]=="s")  
        {  
         if($_POST["geschlecht"]=="m")  
         {  
         $gtec = 3.5;  
         }  
         else  
         {  
         $gtec = 1.95;  
         }  
        }  
          
          
        // S + M  
        if ($_POST["berufsstatus"]=="s" && $_POST["geschlecht"]=="m")  
        {  
        $paket1 = 148.70;  
        $paket2 = 225.74;  
        $paket3 = 326.54;  
        }  
          
        elseif ($_POST["berufsstatus"]=="a" && $_POST["geschlecht"]=="m")  
        {  
        $paket1 = 148.70;  
        $paket2 = 225.74;  
        $paket3 = 326.54;  
        }  
          
        for($i=0; $i<$jahre; $i++)  
        {  
        $paket1= $paket1-($paket1/100)*$gtec;  
        $paket2= $paket2-($paket2/100)*$gtec;  
        $paket3= $paket3-($paket3/100)*$gtec;  
        }  
          
        ?> 
        

        so jetzt habe ich noch eine ganz kleines Prob. Ich habe aber zwei Abfragen und zwar ja einmal das M wie Männlich und einmal das W wie Weiblich. Jetzt sollte er ja die andere Rechnung nehmen und zwar die 1,95 % für Weiblich. Gerade rechnet er ja bei M mit 3,5%. Kann mir da jemand sagen, wie ich da weiter machen kann?

        Gruß,
        Kabraxxi