• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Wenn 2 von 3 Variablen leer sind, dann...

aJunkie

Mitglied
Hallo,

ich habe drei Variablen (Taschenrechner), wovon 2 gegeben sein müssen.
Also muss eines frei bleiben bzw. zwei dürfen nicht fehlen.

Ich habe es so gemacht:
PHP:
 if (($grundwert && $prozentsatz && (!$prozentwert))) {
ist natürlich blöd, jetzt jedes mit anderer reihenfolge zu prüfen.

Kann man mit PHP drei Variablen geben, schauen lassen, ob zwei gegeben sind, andernfalls...?

Arraymäßig?
 
Hallo,
also ich würd's wirklich ganz einfach durch eine If-Abfrage lösen:

PHP:
<?php
if ($grundwert and $prozentsatz or $grundwert and $prozentwert or $prozentsatz and $prozentwert) {
  // Rechnung kann ausgeführt werden
}
?>

MfG Icy
 
Es würde mich wundern wenn PHP durch diese Abfrage noch ordentlich durchsteigt.

PHP:
$i = 0;
$grundwert AND $i++;
$prozentsatz AND $i++;
$prozentwert AND $i++;

// Edit: natürlich 1 < $i oder meinet wegen auch $i >= 2 ^^
if(1 < $i) {
    // mach was
}

Nicht so schön unleserlich aber einfach und effektiv. :)
 
Zuletzt bearbeitet von einem Moderator:
Es würde mich wundern wenn PHP durch diese Abfrage noch ordentlich durchsteigt.

PHP:
$i = 0;
$grundwert AND $i++;
$prozentsatz AND $i++;
$prozentwert AND $i++;
 
if($i == 2) {
// mach was
}

Nicht so schön unleserlich aber einfach und effektiv. :)

und wenn alle drei variablen leer sind
PHP:
if($i >= 2) {
 
versuchs doch mit der abfrage:
PHP:
if(isset($variable) AND isset($variable2) AND !isset($variable3))
heißt soviel wie:
wenn variable und variable2 gesetzt sind und variable3 leer ist, wird der if teil ausgeführt!
 
versuchs doch mit der abfrage:
PHP:
if(isset($variable) AND isset($variable2) AND !isset($variable3))
heißt soviel wie:
wenn variable und variable2 gesetzt sind und variable3 leer ist, wird der if teil ausgeführt!

Das Selbe steht doch schon in der Fragestellung! Du hast lediglich das && durch ein AND ersetzt, was GENAU das SELBE ist.
 
Ja, das geht. Ist das selbe (:
Wenn du nur die Variable hinschreibst, prüft PHP, ob es einen Rückgabewert gibt. Das geht nur, wenn die Variable gesetzt ist.

MfG Icy
 
Viele eurer Vorschläge schaffen es nicht sauber durch striktes error reporting: error_reporting(E_ALL | E_STRICT);

Da kann entweder isset in der Bedingung helfen (siehe flemli) oder ein explizites "Null"-Setzen/Initialisieren der Variablen vor den Abfragen (das sollte man sowieso immer tun):

PHP:
$grundwert = (isset($_POST['grundwert'])) ? (float) $_POST['grundwert'] : 0;

Noch ein Ansatz, der hier aber vielleicht ein wenig übertrieben ist:

PHP:
<?php

error_reporting(E_ALL | E_STRICT);

$_POST['grundwert'] = 10;
//$_POST['prozentwert'] = 5;
//$_POST['prozentsatz'] = 0.025;

$fields = array('grundwert', 'prozentwert', 'prozentsatz');

$cnt = 0;
foreach ($_POST as $key => $value) {
    if (in_array($key, $fields)) {
        $cnt++;
    }
}

if ($cnt < 2) {
    echo 'Weniger als zwei Felder gesetzt.';
}
 
Hmm...

Ich habe es wohl nicht ganz verstanden...
Muss mich konzentrieren,.
Denn ich mag eine Ausgabe haben, wenn weniger als zwei, also entweder nur ein oder garkein Feld ausgefüllt ist.

Das ist dann nämlich wohl falsch.

PHP:
<?php

$i = 0;
$grundwert AND $i++;
$prozentsatz AND $i++;
$prozentwert AND $i++;

if(1 < $i) {

    if (($prozentwert && $prozentsatz && (!$grundwert))) {
        $grundwert = $prozentwert / $prozentsatz * 100;
        $ausgabe = $prozentwert . " sind " . $prozentsatz . "% von " . $grundwert;
    }
    
    if (($grundwert && $prozentsatz && (!$prozentwert))) {
        $prozentwert = $grundwert * $prozentsatz / 100;    
            if ($prozentsatz > 100) {
            $prozentwert *= 100;
            }
        $ausgabe = $prozentsatz . "% von " . $grundwert . " sind " . $prozentwert;
    }
    
    if (($grundwert && $prozentwert && (!$prozentsatz))) {
        $prozentsatz = $prozentwert / $grundwert * 100;    
        $ausgabe = $prozentwert . " von " . $grundwert . " sind " . $prozentsatz . "%";
    }
    else echo "Blabla";
}
?>
 
ich habe drei Variablen (Taschenrechner), wovon 2 gegeben sein müssen.
Also muss eines frei bleiben bzw. zwei dürfen nicht fehlen.

Muss mich konzentrieren,.
Denn ich mag eine Ausgabe haben, wenn weniger als zwei, also entweder nur ein oder garkein Feld ausgefüllt ist.

Ich bin verwirrt. :)

Aber irgendwas klappt doch schon ganz gut, oder?
 
Das Rechnen funktioniert super.
Ich mag nur eine Ausgabe, dass WENN nur 1 oder garkein Feld ausgefüllt ist.
Dazu müssen die drei ja überprüft werden.

Zwei gegeben -> Rechne
Nur eins oder garkeins -> String ausgeben.

Es geht um die Fallentscheidungen, ob es einfacher geht als so, wie ich es im Startthread gezeigt habe.
 
Zuletzt bearbeitet:
PHP:
<?php

$i = 0;
$grundwert AND $i++;
$prozentsatz AND $i++;
$prozentwert AND $i++;

if(1 < $i) {

    if (!$grundwert) {
        $grundwert = $prozentwert / $prozentsatz * 100;
        $ausgabe = $prozentwert . " sind " . $prozentsatz . "% von " . $grundwert;
    } elseif(!$prozentwert) {
        $prozentwert = $grundwert * $prozentsatz / 100;    
            if ($prozentsatz > 100) {
            $prozentwert *= 100;
            }
        $ausgabe = $prozentsatz . "% von " . $grundwert . " sind " . $prozentwert;
    } elseif(!$prozentsatz) {
        $prozentsatz = $prozentwert / $grundwert * 100;    
        $ausgabe = $prozentwert . " von " . $grundwert . " sind " . $prozentsatz . "%";
    } else {
        // wenn wir hier sind ist irgendwas falsch gelaufen.
    }
}

Wenn du in dem block bist weißt du schon das 2 Variablen da sind also brauchst du in der abfrage auch nur noch nach einer Prüfen. ;)
 
PHP:
<?php

$i = 0;
$grundwert AND $i++;
$prozentsatz AND $i++;
$prozentwert AND $i++;

if(1 < $i) {

    if (!$grundwert) {
        $grundwert = $prozentwert / $prozentsatz * 100;
        $ausgabe = $prozentwert . " sind " . $prozentsatz . "% von " . $grundwert;
    } elseif(!$prozentwert) {
        $prozentwert = $grundwert * $prozentsatz / 100;    
            if ($prozentsatz > 100) {
            $prozentwert *= 100;
            }
        $ausgabe = $prozentsatz . "% von " . $grundwert . " sind " . $prozentwert;
    } elseif(!$prozentsatz) {
        $prozentsatz = $prozentwert / $grundwert * 100;    
        $ausgabe = $prozentwert . " von " . $grundwert . " sind " . $prozentsatz . "%";
    } else {
        $not = "Bitte zwei Werte eingeben, um das leere Feld zu berechnen.";
    }
} 
?>

Wenn ich nur ein Feld eingebe oder garkeins, passiert auch nichts. $not wird nicht ausgegeben.

Es ist im Prinzp wie vorher:
PHP:
    if (($prozentwert && $prozentsatz && (!$grundwert))) {
        $grundwert = $prozentwert / $prozentsatz * 100;
        $ausgabe = $prozentwert . " sind " . $prozentsatz . "% von " . $grundwert;
    }
    
    if (($grundwert && $prozentsatz && (!$prozentwert))) {
        $prozentwert = $grundwert * $prozentsatz / 100;    
            if ($prozentsatz > 100) {
            $prozentwert *= 100;
            }
        $ausgabe = $prozentsatz . "% von " . $grundwert . " sind " . $prozentwert;
    }
    
    if (($grundwert && $prozentwert && (!$prozentsatz))) {
        $prozentsatz = $prozentwert / $grundwert * 100;    
        $ausgabe = $prozentwert . " von " . $grundwert . " sind " . $prozentsatz . "%";
    }
 
PHP:
<?php

$i = 0;
$grundwert AND $i++;
$prozentsatz AND $i++;
$prozentwert AND $i++;

if(1 < $i) {

    if (!$grundwert) {
        $grundwert = $prozentwert / $prozentsatz * 100;
        $ausgabe = $prozentwert . " sind " . $prozentsatz . "% von " . $grundwert;
    } 
    elseif(!$prozentwert) {
        $prozentwert = $grundwert * $prozentsatz / 100;    
            if ($prozentsatz > 100) {
            $prozentwert *= 100;
            }
        $ausgabe = $prozentsatz . "% von " . $grundwert . " sind " . $prozentwert;
    } 
    else {
        $prozentsatz = $prozentwert / $grundwert * 100;    
        $ausgabe = $prozentwert . " von " . $grundwert . " sind " . $prozentsatz . "%";
    }
}
else {
  $not = "Bitte zwei Werte eingeben, um das leere Feld zu berechnen.";
}
?>
 
Danke.

PHP:
<h1>Prozentrechner</h1>
<?php
$i = 0;
$grundwert AND $i++;
$prozentsatz AND $i++;
$prozentwert AND $i++;

    if(isset($richtig) && ($richtig == "allesklar")) {
if(1 < $i) {

    if (!$grundwert) {
        $grundwert = $prozentwert / $prozentsatz * 100;
        $ausgabe = $prozentwert . " sind " . $prozentsatz . "% von " . $grundwert;
    } 
    elseif(!$prozentwert) {
        $prozentwert = $grundwert * $prozentsatz / 100;    
            if ($prozentsatz > 100) {
            $prozentwert *= 100;
            }
        $ausgabe = $prozentsatz . "% von " . $grundwert . " sind " . $prozentwert;
    } 
    else {
        $prozentsatz = $prozentwert / $grundwert * 100;    
        $ausgabe = $prozentwert . " von " . $grundwert . " sind " . $prozentsatz . "%";
    }
}
else {
  $not = "Bitte zwei Werte eingeben, um das leere Feld zu berechnen.";
}
    }
?> 
<p align="center" style="font-weight:bold;">Zwei Werte eingeben, um das leere Feld auszurechnen.</p>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<p><strong>Grundwert</strong>: <input type="text" name="grundwert" value="<?php echo $grundwert; ?>"></p>
<p><strong>Prozentsatz</strong>: <input type="text" name="prozentsatz" value="<?php echo $prozentsatz; ?>"></p>
<p><strong>Prozentwert</strong>: <input type="text" name="prozentwert" value="<?php echo $prozentwert; ?>"></p>

<p><?php if ($not) echo $not; elseif (!$not) echo $ausgabe; ?></p>

<br>
<input type="hidden" name="richtig" value="allesklar">
<input type="submit" value="Ausrechnen">
</form>
 
Code:
action="<?php echo $_SERVER['PHP_SELF']; ?>"

PHP_SELF kann anfällig für XSS-Attacken sein. An dieser Stelle reicht einfach:

Code:
action=""

Zudem basiert dein Script auf register_globals, was nicht zu empfehlen ist.
 
Natürlich, keine Register Globals ;)
Heißt: Fang die Post-Daten vernünftig ab.

MfG Icy
 
Zurück
Oben