Ankündigung

Einklappen
Keine Ankündigung bisher.

Hilfe - If-Elseif-Bedinung NUR fast richtig

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Hilfe - If-Elseif-Bedinung NUR fast richtig

    Hallo allerseits,

    Habe da eine dreifache If-Abfrage, die funktioniert nur fast richtig. Im Grunde geht es um Verschachtelungen Elseif.
    Der obere Teil und die Berechnung funktioniert. *Juhu* Aber die Ausgabe des Kommentars am Ende stimmt nicht.

    Es geht konkret darum, für eine einzugebende Zahl (die dritte Namen= "Sonne") zu prüfen, ob er zwischen den oben eingegebenen (Namen: DIS-Werte) liegen.

    Recht simpel eigentlich, aber die Schwierigkeit besteht darin, dass ein Kreis keine Werte über 360 besitzt. D.h. dass wenn der Anfangswert 355 der (astrologische Winkel "Hallbsextil" = Plus 30 Grad) dann nicht auf 385 geht, sondern auf 25.

    Wie gesagt, die Rechnung stimmt soweit. Es geht um boolsche Werte. Und die will ich zu zwei verschiedenen echos teilen, eben für liegt im Wertebereich oder "Kein Halbsextil."

    Hier der code:

    <p><center>DIS Anfang: <input type="text" name="disa"></center><br>
    <center>DIS Ende: <input type="text" name="dise"></center><br>
    <center>Sonne: <input type="text" name="so"</center></p>
    <input type="submit" value="Berechnen">
    </form>
    <?php
    if (isset($_POST['disa']) && is_numeric($_POST['disa']) &&
    isset($_POST['dise']) && is_numeric($_POST['dise']) &&
    isset($_POST['so']) && is_numeric($_POST['so']))
    ?>

    <p>
    <?php
    if ($_POST['so'] >= 30 + $_POST['disa'] && $_POST['so'] < 30 + $_POST['dise']) {
    echo "Sonne Halbsextil, Wert +4 oder +3 oder +2,5";
    } elseif
    ($c = $_POST["dise"] + 30)
    if ($c >= 360) {
    $c - 360;
    ($_POST['so'] >= 30 + $_POST['disa'] && $_POST['so'] < 30 + $c );
    echo "Sonne Halbsextil, Wert +4 oder +3 oder +2,5";
    }
    else {
    $d = $_POST["disa"] + 30;
    ($_POST['so'] >= 30 + $d && $_POST['so'] < $c);
    echo "<p>Kein Halbsextil.</p>\n";
    }
    ?>
    </p>


  • #2
    Hinweis:

    Es ist nicht mehr zeitgemäß, Anwendungslogik und Ausgabelogik zu kombinieren. Dadurch leidet die Wartbarkeit beider Komponenten. In der Regel folgen in PHP geschriebene Applikationen daher dem EVA-Muster, welches einen leicht nachvollziehbaren Datenfluss ermöglicht, besser wartbare Applikationen erzeugt und leichter von anderen Entwicklern verstanden wird. In der PHP-Welt hat sich hierauf aufbauend das (häufig falsch interpretierte) MVC-Muster [1] etabliert (siehe auch DCI oder ADR). Ganz einfach gesagt handelt es sich bei dem EVA-Muster um eine Aufteilung der Aktionen "Auswertung der Eingabeparameter", "Verarbeitung der damit verknüpften Anwendungslogik" und "Erzeugung und Übermittlung der Ausgabe". Oder vereinfacht: Erst Daten sammeln, dann daraus die Darstellung erzeugen und ausgeben. Die Verwendung einer Templateengine (mit Layout-Support) ist dafür Empfehlenswert - jedoch aber keine Voraussetzung.
    Standards - Best Practices - AwesomePHP - Guideline für WebApps

    Kommentar


    • #3
      Mal das ganze in PHP-Tags gepackt
      PHP-Code:

      <p><center>DIS Anfang: <input type="text" name="disa"></center><br>
      <center>DIS Ende: <input type="text" name="dise"></center><br>
      <center>Sonne: <input type="text" name="so"</center></p>
      <input type="submit" value="Berechnen">
      </form>
      <?php
      if (isset($_POST['disa']) && is_numeric($_POST['disa']) &&
      isset(
      $_POST['dise']) && is_numeric($_POST['dise']) &&
      isset(
      $_POST['so']) && is_numeric($_POST['so']))
      ?>

      <p>
      <?php
      if ($_POST['so'] >= 30 $_POST['disa'] && $_POST['so'] < 30 $_POST['dise']) {
      echo 
      "Sonne Halbsextil, Wert +4 oder +3 oder +2,5";
      } elseif
      (
      $c $_POST["dise"] + 30)
      if (
      $c >= 360) {
      $c 360;
      (
      $_POST['so'] >= 30 $_POST['disa'] && $_POST['so'] < 30 $c );
      echo 
      "Sonne Halbsextil, Wert +4 oder +3 oder +2,5";
      }
      else {
      $d $_POST["disa"] + 30;
      (
      $_POST['so'] >= 30 $d && $_POST['so'] < $c);
      echo 
      "<p>Kein Halbsextil.</p>\n";
      }
      ?>
      </p>
      Hast du ein paar Beispielwerte? (+ das erwartete Ergebnis) Mir fällts bisschen schwer mir vorzustellen, was überhaupt passieren soll.
      Relax, you're doing fine.
      RTFM | php.de Wissenssammlung | Datenbankindizes | Stay fit

      Kommentar


      • #4
        Zitat von VPh Beitrag anzeigen
        Hast du ein paar Beispielwerte? (+ das erwartete Ergebnis) Mir fällts bisschen schwer mir vorzustellen, was überhaupt passieren soll.
        Mir auch.

        Eine Gradangabe zwischen 0 und 360 kriegt man aber mit $grade % 360 wesentlich einfacher hin als mit abstrusen Subtraktionen.

        Kommentar


        • #5
          ich find ja bogenmas bei sowas besser.
          Recht simpel eigentlich, aber die Schwierigkeit besteht darin, dass ein Kreis keine Werte über 360 besitzt. D.h. dass wenn der Anfangswert 355 der (astrologische Winkel "Hallbsextil" = Plus 30 Grad) dann nicht auf 385 geht, sondern auf 25.
          @TE: schau mal auf: http://php.net/manual/en/function.fmod.php

          Kommentar


          • #6
            Jou,
            erstmal vielen Dank für die Antworten!!!
            Muss zuerst mal sagen, dass ich mir den Hinweis von moma angeguckt habe, verstehe erstmal Bahnhof -> werde die Gleise dann mit mehr Wissen etwas weiter verfolgen.
            Und vielleicht ist moma nicht nur ein Bot, vielleicht sogar den, den die Bots gefragt haben, als sie Fehler hatten beim Programmieren der Matrix

            Etwas qualifizierteres Kommentar: Ja, ja, ich habe selber gemerkt, dass ich mich da heillos verschachtele. War ja auch meine erste eigenständige If-Else-Geschichte, nachdem ich mir son Tutorial-Buch durchgelesen habe... -> weiß schon, was jetzt kömmt: "dieser blutige Anfänger leckt seine Wunden nur peu a peu weil er Vampir ist und der Kühlschrank kaputt - der sollte erst mal einfachere Sachen machen..."

            So, jetzt aba zur Sache.
            Es geht darum in den ersten beiden Abfragen Werte einzugeben, also z. B. 350 und 10. (Weil ja die Sonne im Kreis = Zeitverschiebung)
            Dann soll im Wert "sonne" der aktuelle Gradstand der Sonne eingegeben werden: z. B. 335.

            Halbsextil heißt in der Astrolgie 30 Grad Abstand -> 335 v. d. Sonne PLUS 30 = 365 - daraus soll werden 5.
            Bedingung ist also wahr.

            Stelle im Übrigen grad fest, habe MIST gebaut. Ich bin so ein Idiot.
            Es soll NATÜRLICH der Sonne 30 hinzu nicht den anderen. Das geht so viel einfacher!!!!

            Ich habe den Mist früher mit Excel gemacht, da überprüft man den Wert der Sonne anhand von den erhöhten DIS-Werten.
            Daher der (sicher falsche, zumindest aber irreführende) Ansatz.

            Kommentar


            • #7
              PHP-Code:
              aaaaa 

              Kommentar


              • #8
                So, jetzt weiß ich auch, wie der PHP-Code hier einfügen geht - siehe grad oben. *freu*

                Habe jetzt eine überarbeitete Version, die zumindest so lange funktioniert, so lange dieser dämliche DIS-Wert nicht zwischen z. B. 355 und 5 liegt.
                Und die geht so:

                PHP-Code:
                $a = ($_POST['so'] + 30);
                if (
                $a >= $_POST['disa'] && $a $_POST['dise']) {
                echo 
                "Sonne Halbsextil, Wert +4 oder +3 oder +2,5";
                } elseif (
                $a >= 360)
                $b = ($a 360);
                if (
                $b >= $_POST['disa'] && $b $_POST['dise']) {
                echo 
                "Sonne Halbsextil, Wert +4 oder +3 oder +2,5";
                } else {
                echo 
                "<p>Kein Halbsextil.</p>\n";

                Damit kann ich leichter die Funktion kopieren und einfach auf weitere Winkel dann mit minimal Aufwand verändern.

                Dass moma mit dem Bogenmaß recht hat, ist ohne Zweifel, aber für mich als Anfänger ist das hier schon ne LEEEEEIIIIIISTUUUUUNG


                Danke euch allen auf alle Fälle! Ohne Eure tatkräftige Ermunterung wäre ich nicht drauf gekommen, das Ganze umzustellen oder gar von vorne herein ne Variable einzufügen.
                DANKE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

                Kommentar


                • #9
                  Zitat von Paulnue Beitrag anzeigen
                  So, jetzt aba zur Sache.
                  Es geht darum in den ersten beiden Abfragen Werte einzugeben, also z. B. 350 und 10. (Weil ja die Sonne im Kreis = Zeitverschiebung)
                  Dann soll im Wert "sonne" der aktuelle Gradstand der Sonne eingegeben werden: z. B. 335.

                  Halbsextil heißt in der Astrolgie 30 Grad Abstand -> 335 v. d. Sonne PLUS 30 = 365 - daraus soll werden 5.
                  Bedingung ist also wahr.
                  Ich verstehe die Berechnung noch immer nicht. Was machst du nachfolgend mit den Werten 350 (disa) und 10 (disb)?

                  Außerdem: Deine if/elseif-Verschachtelung ist furchtbar. Bitte verwende IMMER die geschweiften Klammern {}.

                  Kommentar


                  • #10
                    Vermutlich werden damit dann die Horoskope für die nächste Ausgabe von "Freundin" generiert...
                    Lerne Grundlagen | Schreibe gute Beispiele | PDO > mysqli > mysql | Versuch nicht, das Rad neu zu erfinden | Warum $foo[bar] böse ist | SQL Injections | Hashes sind keine Verschlüsselungen! | Dein E-Mail Regex ist falsch

                    Kommentar


                    • #11
                      Außerdem: Deine if/elseif-Verschachtelung ist furchtbar. Bitte verwende IMMER die geschweiften Klammern {}.
                      +1
                      Sieh dir mal den PSR - Standard an, da haste ganz klar formulierte Coding-Conventions.
                      http://www.php-fig.org/

                      Dass moma mit dem Bogenmaß recht hat, ist ohne Zweifel, aber für mich als Anfänger ist das hier schon ne LEEEEEIIIIIISTUUUUUNG
                      Es ist schön, dass du so motiviert und freudig dabei bist, aber ich rate dir dazu, die hier gegebenen Tipps umzusetzen, dadurch lernst du ja weiter

                      Vermutlich werden damit dann die Horoskope für die nächste Ausgabe von "Freundin" generiert...


                      LG
                      https://github.com/Ma27
                      Javascript Logic is funny:
                      [] + [] => "", [] + {} => object, {} + [] => 0, {} + {} => NaN

                      Kommentar

                      Lädt...
                      X