Frage von Padda4, 40

"Beenden" eines vergleichs bei nicht definierter variabel mit der if funktion PHP?

Hallo, ich habe letzte Woche mit der Programmierung begonnen, jetzt habe ich aber eine Frage zu der ich keine Antwort finden kann. Und zwar schreibe ich in PHP einen "Ist größer, ist kleiner, ist gleich" Vergleich mit PHP (Gehört zu den Aufgaben in der Schule).

Das ganze läuft über einen apache server. Die URL sieht wie folgt aus:localhost/php/uebung-vergleich.php?zahl1=5&zahl2=4 Das vergleicht er ganz normal und bringt auf die PHP Seite auch den richtigen Vergleich. Jetzt zum Problem. Wenn ich die aber möchte das ab einer undefinierten Variabel einfach nichts mehr ausspuckt quasi so: localhost/php/uebung-vergleich.php?zahl1=&zahl2=4.

Wenn mir jemand helfen könnte, mit einfachen codes (muss laut Lehrer gehen) wäre ich sehr dankbar.

Hier sehr ihr was ich bisher geschrieben habe:

https://gyazo.com/530d3293be86c7fd5627e19827a6b475

Antwort
von fluffiknuffi2, 5

Für das  was du mit break erreichen willst würde man wohl eher die nutzen.

http://php.net/manual/de/function.die.php

Antwort
von Malemeister, 15

Hallo,

erstmal vorweg: Wenn ich mir hier die Antworten angucke, dann sollten einige hier nochmal das Programmieren von vorne lernen...

Grundsätzlich gilt erstmal: Überprüfe jede Eingabe eines Users/Clienten!

Das ist das wichtigste was du in eigentlich jeder Programmiersprache beachten muss. Es gibt immer Menschen die dir was böses wollen.

Wenn du also eine Zahl erwartest, dann überprüfe auch ob du wirklich eine Zahl bekommst. Wenn nicht -> Fehlermeldung oder ähnliches!

Außerdem solltest du prüfen ob überhaupt eine Variable übergeben wird. Schon in deinen ersten 2 Zeilen können 2 Warnungen auftreten. Und zwar in dem Moment, wenn zahl1 und zahl2 einfach nicht per $_GET übergeben werden. Prüfe also auch ob alle Parameter die du erwartest überhaupt übermittel wurden. Beispiel:

if(isset($_GET['zahl1'])){
$zahl1 = $_GET['zahl1'];
}else{
//Entweder auf den Standart Wert setzen
$zahl1 = 0;
//Oder eben eine entsprechende Fehlermeldung
//$error = "Bitte gib eine Zahl ein";
}

Oder das ganze einfach in Kurzform:

$zahl1 = isset($_GET['zahl1'])? $_GET['zahl1'] : 0;

Wenn du das gemacht hast, eben noch die Prüfung ob der übergebene Wert überhaupt eine Zahl ist (hier bemühst du dich bitte selber und suchst dir die entsprechende Funktion raus).

Wenn du damit dann durch bist, hast du deine Variablen fertig geprüft und musst diese nun noch auswerten (das machst du ja schon ganz richtig).

Grüße

Kommentar von fluffiknuffi2 ,



Oder das ganze einfach in Kurzform bei PHP 7:


$zahl1 = $_GET['zahl1'] ?? 0;
Kommentar von TeeTier ,

Das ist das wichtigste was du in eigentlich jeder Programmiersprache beachten muss. Es gibt immer Menschen die dir was böses wollen.

Genauso ist es! Man muss jede Eingabe als potenziellen Angriff behandeln. Das gilt für alles, was nicht vom eigenen Programm generiert wurde, also auch Umgebungsvariablen, Header-Felder, und und und ...

Leider laufen einem manchmal solche Dinge über den Weg:

exec($_POST['cmd']);

Auf so etwas Krasses stoße ich zwar nur einmal alle 6 Monate, aber immerhin ... Dass $_SERVER['HTTP_REFERER'] ungeprüft weiterverarbeitet wird gibt es leider allzu häufig. ><

Antwort
von TheQ86, 21

Du machst es zu kompliziert.

<?php
$a = $_GET['zahl1'];
$b = $_GET['zahl2'];

if (isset($a) && isset($b)) {
    if ($a > $b) {echo('a ist größer als b');
    }
    if ($a == $ b) {
        echo('a ist gleich b');
    }
    if ($a < b) {
        echo('a ist kleiner als b');
    }
}
?>

Ein break; brauchst du auch nicht. Break bricht nur aus Schleifen und Switch aus.

Kommentar von fluffiknuffi2 ,

Kann man so machen aber zumindest in der dev-Umgebung sollte man Notices angezeigt bekommen und dann kommt dein isset zu spät.

Antwort
von webflexer, 20

Überprüfe doch ob beide Werte übergeben worden sind:

http://pastebin.com/gAui1YZ4

Antwort
von AnonYmus19941, 19

Benutz doch einfach "if (isset zahl1) {" bzw. "if (!isset zahl1) {"... Das prüft, ob die Variable einen Wert hat ("isset" = "is set"); damit sollte es gehen.

Kommentar von AnonYmus19941 ,

Sorry, hab den Code jetzt erst angeschaut...

Eigentlich sollte es doch so schon funktionieren...

Antwort
von RedKungFuMastr, 5

PHP isset() und empty() sind deine besten Freunde.

isset - Prüft, ob eine Variable existiert und nicht NULL ist.
empty - Prüft, ob eine Variable leer ist.

Antwort
von Kiboman, 5

if (isset(GET...) && !empty(GET...))...

optional noch ein && is_numeric(GET...)

Antwort
von Dream4Ever, 18

if($a || $b == "")
          Hier schrieb du jetzt rein was er in dem Fall tun solle z.B:
          echo "Keine leeren Variablen!";

Kommentar von webflexer ,

dieser vergleich ist falsch

Wenn Variable $a existiert ODER Variable b gleich leer ist?

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten