Ankündigung

Einklappen
Keine Ankündigung bisher.

PhP Code-Analyse.

Einklappen

Neue Werbung 2019

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

  • PhP Code-Analyse.

    Hallo zusammen, ich heiße Alex und bin ein ziemlicher Anfänger in PHP. Wir haben an der Hochschule eine Aufgabe erhalten diese sollen wir ausführen und schauen welches Problem es sich in diesem Code handelt und wie wir diesen lösen können:

    PHP-Code:
    $initial 'J';
    $name = (($initial == 'M') ? 'Mike'
    : ($initial == 'J') ? 'John'
    : ($initial == 'C') ? 'Catherine'
    : ($initial == 'T') ? 'Thomas'
    'unknown');
    echo 
    $name;
    echo 
    "\n"
    Die Ausgabe lautet : Thomas
    Ich vermute die Ausgabe soll John sein, weil im Code die Variable inital als J deklariert wurde.

    Könnte mir jemand eine kurze Erklärung beschreiben? Ich habe mir schon einen Kurs für PhP gekauft und werde meine Kentnisse im laufe der Zeit verbessern. Bis Montag müssen wir die Aufgabe fertig bekommen und ich habe leider keine Ahnung wie ich hier vorgehen soll.

    Ich bedanke mich schon im Voraus für eure Hilfe

    SG
    Kusja

  • #2
    Ein Forum ist nicht dafür gedacht Hausaufgaben für andere zu erledigen oder gar fremden Code zu erklären. Wenn du Fragen zu einer Aufgabe hast, solltest du dich an deinen Lehrer wenden.

    Kommentar


    • #3
      Das ist warscheinlich nicht was du hören willst, aber der Code ist selbst das Problem. Das sind verschachtelte ternäre Ausdrücke. Das macht so doch keiner. Dafür gibt es Arrays, dann hast du auch das Problem nicht

      Ich zeige dir hier mal wie es auf jeden Fall mal "richtiger" wäre. Zu dem Code oben .. den will ich mir nicht ansehen, ausserdem sollst du das doch selbst erarbeiten oder beim Aufgabensteller es nochmals erklären lassen.

      PHP-Code:
      $aNames = [
          
      'M' => 'Mike',
          
      'J' => 'John',
          
      'C' => 'Catherine',
          
      'T' => 'Thomas'
      ];

      $initial 'J';

      echo 
      $aNames[$initial] ?? 'unknown'

      Kommentar


      • #4
        Die Aufgabe ist garnicht mal trivial,
        weswegen vermutlich einige das Handtuch werfen. Als Tipp empfehle ich Dir, lies mal was zum Thema Abarbeitungsreihenfolge von Operationen.
        Mehr verrate ich mal noch nicht.

        Kommentar


        • #5
          Die aktuelle PHP Version liefert die Antwort dazu schon fertig:

          PHP-Code:
          DeprecatedUnparenthesized `a ? b : c ? d : eis deprecated. Use either `(a ? b : c) ? d : e` or `a ? b : (c ? d : e)

          Kommentar


          • #6
            Im Handbuch steht ja schon, das man das nicht machen soll.

            Die Aufgabe lautet doch, finde einen Weg wie J zu John ausgewertet werden kann. hausl hat ja schon mal eine Tipp gegeben, verbleiben noch weitere Möglichkeiten wie man zum Ziel kommt.

            Siehe auch Kontrollstrukturen hierzu.

            Die Überschrift ist auch irreführend, da der Code für einen Anfänger nicht aufzulösen ist.

            Kommentar


            • #7
              Hallo zusammen,

              also ich hätte es wahrscheinlich so gelöst, auch wenn es dem TE nicht weiter helfen wird.

              PHP-Code:
                 <?php
              $initial 
              'J';
              if(
              $initial == 'J')
              {
              $name 'John';
              }
              elseif (
              $initial == 'M')
              {
                  
              $name 'Mike';
              }
              elseif (
              $initial == 'C')
              {
                  
              $name 'Catherine';
              }
              elseif (
              $initial == 'T')
              {
                  
              $name 'Thomas';
              }
              elseif (
              $initial == '')
              {
                  
              $name 'Bitte eine Initiale eingeben';
              }
              echo 
              $name ?? "Es gibt keinen Namen mit der Initiale $initial;

              ?>
              LG Stefan

              Kommentar


              • #8
                Das ist halt genau so, wie man es nicht machen soll. Also ein schönes Negativbeispiel.

                Kommentar


                • #9
                  Hallo hellbringer

                  Wenn Du jetzt noch geschrieben hättest, warum man es so nicht machen soll, hätten vielleicht auch die was davon, die nicht wissen warum dies ein Negativbeispiel ist.

                  Kommentar


                  • #10
                    Die Daten stehen fix im Code drin und können so nicht zB. aus einer Datenbank oder einem Config-File geladen werden. Beim Beispiel #3 von hausl könnte das Array auch einer Datenbank, einem Config-File, einem API-Aufruf, usw. usf. stammen. Man ist damit einfach weitaus flexibler und hat weniger Programmieraufwand als mit deinem gezeigten Code.

                    Kommentar


                    • #11
                      Ja ok da hast Du Recht. Aber der Code vom TE bezieht sich ja auch nicht auf eine Datenbank, also warum so weit denken?. Also ich kaufe mir kein rotes Auto und foliere es dann Gelb, weil ich vielleicht Mal ein rotes Auto haben will, das aber noch gar nicht sicher ist. Aber egal, Du hast natürlich Recht und man sollte eben vorausschauend arbeiten. Macht später vieles einfacher.

                      Kommentar


                      • #12
                        Zitat von SteffMB Beitrag anzeigen
                        Ja ok da hast Du Recht. Aber der Code vom TE bezieht sich ja auch nicht auf eine Datenbank, also warum so weit denken?
                        Dass dieser Code Müll ist, wurde ja schon mehrmals erklärt. Nur weils da schlecht gemacht ist, heißt es noch lange nicht, dass mans selber auch schlecht machen soll.

                        Zitat von SteffMB Beitrag anzeigen
                        Also ich kaufe mir kein rotes Auto und foliere es dann Gelb, weil ich vielleicht Mal ein rotes Auto haben will, das aber noch gar nicht sicher ist. Aber egal, Du hast natürlich Recht und man sollte eben vorausschauend arbeiten. Macht später vieles einfacher.
                        Naja, weder der Code vom TE noch dein Code ist einfacher oder kürzer. Im Gegenteil, bei diesen Codes hat man wesentlich mehr Aufwand und die Fehleranfälligkeit steigt. Also warum es so machen?

                        Kommentar


                        • #13
                          Ich bin echt interessiert dran, das ganze php/html etc. zu verstehen und umzusetzen. Darum bin ich echt dankbar für jeden Tipp und Hinweis, wie der von Dir.
                          Ich habe jetzt eine Seite "test.php" und in meiner Datenbank eine Tabelle mit den Namen und hab den Code angepasst, funktioniert auch. Aber die große Frage ist, ob es so richtig ist wie ich es gemacht habe oder ob dies auch wieder falsch ist.

                          PHP-Code:
                              <?php
                              
                          require('inc/db.php');
                              
                          $initiale $_POST['initiale'];
                              
                          $sql "SELECT name FROM initiale WHERE initiale = '$initiale' ";
                              if (
                          $erg $db->query($sql)) {
                              
                          $datensatz $erg->fetch_object();
                              }
                              
                          ?>
                          <!DOCTYPE html>
                          <html lang="de">
                          <head>
                          <meta charset="UTF-8">
                          <title>Test</title>
                          <meta name="description" content="Test">
                          </head>
                          <body>

                          <form method="post" action="test.php">
                          <div class="ui-block-a">
                          <input type="search" list="1" name="initiale" required autofocus>
                          <datalist id="1">
                          <option value="A">
                          <option value="B">
                          <option value="C">
                          <option value="D">
                          <option value="E">
                          <option value="F">
                          <option value="G">
                          <option value="H">
                          <option value="I">
                          <option value="J">
                          <option value="K">
                          <option value="L">
                          <option value="M">
                          <option value="N">
                          <option value="O">
                          <option value="P">
                          <option value="Q">
                          <option value="R">
                          <option value="S">
                          <option value="T">
                          <option value="U">
                          <option value="V">
                          <option value="W">
                          <option value="X">
                          <option value="Y">
                          <option value="Z">
                          </datalist>
                          </div>
                          <input type="submit" value="speichern">
                          </form>
                          <br>
                              <?php
                              
                          echo htmlspecialchars($datensatz->name ?? "Es gibt keinen Namen mit der Initiale $initiale");
                              
                          ?>
                          </body>
                          </html>
                          LG Stefan

                          Kommentar


                          • #14
                            - Wenn man das erstmals aufruft gibts einen Fehler, weil kein $_POST vorhanden.

                            - SQL-Injection Lücke

                            - Schön ist noch, wenn man den gewählten Wert im Select auch wieder vorbelegt nach dem Submit. https://php-de.github.io/jumpto/ausw...misch-erzeugen

                            - Und da könnte man überlegen ob man das nicht per PHP-Schleife erzeugen lässt. Wegen der Vorbelegung - siehe voriger Punkt - und. D-R-Y Prinzip irgendwie:
                            PHP-Code:
                            <option value="A">
                            <
                            option value="B">
                            <
                            option value="C">
                            <
                            option value="D">
                            <
                            option value="E">
                            <
                            option value="F">
                            <
                            option value="G">
                            <
                            option value="H">
                            <
                            option value="I">
                            <
                            option value="J">
                            <
                            option value="K">
                            <
                            option value="L">
                            <
                            option value="M">
                            <
                            option value="N">
                            <
                            option value="O">
                            <
                            option value="P">
                            <
                            option value="Q">
                            <
                            option value="R">
                            <
                            option value="S">
                            <
                            option value="T">
                            <
                            option value="U">
                            <
                            option value="V">
                            <
                            option value="W">
                            <
                            option value="X">
                            <
                            option value="Y">
                            <
                            option value="Z"

                            Kommentar


                            • #15
                              Zitat von hausl Beitrag anzeigen
                              - Wenn man das erstmals aufruft gibts einen Fehler, weil kein $_POST vorhanden.

                              - SQL-Injection Lücke

                              - Schön ist noch, wenn man den gewählten Wert im Select auch wieder vorbelegt nach dem Submit. https://php-de.github.io/jumpto/ausw...misch-erzeugen

                              - Und da könnte man überlegen ob man das nicht per PHP-Schleife erzeugen lässt. Wegen der Vorbelegung - siehe voriger Punkt - und. D-R-Y Prinzip irgendwie:
                              Da viele es nicht kennen:
                              PHP-Code:
                              foreach(range('A','Z') as $char):
                                
                              printf('<option value="%s">%1$s</option>'$char);
                              endforeach; 
                              Bzw:
                              PHP-Code:
                              foreach(range('A','Z') as $char) {
                                
                              printf('<option value="%s">%1$s</option>'$char);

                              Kommentar

                              Lädt...
                              X