Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP Filterung

Einklappen

Neue Werbung 2019

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

  • PHP Filterung

    Hey zusammen, ich habe ein Problem.

    Im folgenden Code sieht man eine Funktion meines Codes. Die Parameter $schuetze und $anlass haben den Wert einer ausgewählten Spalte in einem Drop-Down Menu. Dieses befindet sich in einer anderen Funktion.
    Nun möchte ich über die SQL Query mit dem Parameterwert herausfinden, um welchen Anlass es sich handelt und diesen ausgeben.

    Allerdings gibt es mir auf der HTML-Seite immer nur den ersten Wert der IF-Schleife aus (Vereinsmeisterschaft), obwohl es sich nicht um diesen Wert handelt. Die SQL-Abfrage gibt mir allerdings den richtigen bzw. den im Drop-Down ausgewählten Wert aus.

    Code:
    static function suchen($schuetze, $anlass) 
        { 
    
            $sql = "SELECT anlass.anlassname FROM anlass WHERE anlass.id = '$anlass'";
    
            $anlassname = _Database::query($sql);
    
    
    
            if ($anlassname = 'Vereinsmeisterschaft') {
    
                echo "Vereinsmeisterschaft";
    
            } elseif ($anlassname = 'Fuchsstich') {
    
                echo "Fuchsstich";
    
            } elseif ($anlassname = 'Schrotmeisterschaft') {
    
                echo "Schrotmeisterschaft";
    
            } elseif ($anlassname = 'Gruppenwettkampf') {
    
                echo "Gruppenwettkampf";
    
            } else {
    
                echo "All";
            }

    Ich bin dankbar um jede Hilfe.

  • #2
    = ist eine Zuweisung
    == ist ein Vergleich

    Du solltest übrigens statische Methoden vermeiden. Das ist kontraproduktiv zu einer objektorientierten Programmierung und führt zu viele Probleme.

    Auch solltest du keine Werte direkt in SQL-Code einfügen. Das führt im besten Fall zu Fehlern und im schlimmsten Fall zu einer gravierenden Sicherheitslücke. Verwende stattdessen Prepared Statements.

    Kommentar


    • #3
      Ein
      PHP-Code:
      $anlassname _Database::query($sql); 
      sieht auch nicht aus als würdest du ein Skalar zurück bekommen. Das Ergebnis eines Selects ist i.d.R. 2 Dimensional. Du bekommst "Zeilen" zurück und die Zeilen sind in "Spalten" unterteilt.

      Kommentar


      • #4
        Alles klar, danke für die Tipps. Werde das Ganze einmal überarbeiten.

        Kommentar


        • #5
          Zitat von manuelautoma Beitrag anzeigen
          Allerdings gibt es mir auf der HTML-Seite immer nur den ersten Wert der IF-Schleife aus (Vereinsmeisterschaft),
          Es gibt keine if-Schleifen.

          $sql = "SELECT anlass.anlassname FROM anlass WHERE anlass.id = '$anlass'";
          Das müffelt gewaltig nach nicht behandeltem Kontextwechsel

          Kommentar


          • #6
            Ich konnte das Problem immer noch nicht lösen, habe den Code des Beitrags nochmals neu in verkürzter Version geschrieben und ein bisschen rumprobiert.

            $sql = "SELECT anlass.anlassname FROM anlass WHERE anlass.id = '$anlass'";
            $anlassname = _Database::query($sql);
            var_dump($anlassname);


            if ($anlassname == 'Vereinsmeisterschaft') {

            echo "true";

            } else {

            echo "false";
            }


            Wenn ich im Drop-Down Menu, von wo der Wert für $anlass kommt, nun zB. "Schrotmeisterschaft" auswähle, erscheint dieser Output:
            array (size=1) 0 => object(stdClass)[9] public 'anlassname' => string 'Schrotmeisterschaft' (length=19) Dies ist theoretisch der richtige Wert, allerdings wird dieser in der If-Abfrage nicht richtig gefiltert bzw. bekomme ich immer den Output "false".


            Ich weis gewisse Vorgänge meines Codes sind nicht ganz korrekt, ich bin allerdings wirklich ein absoluter Noob im programmieren und wäre dankbar, wenn mir jemand helfen könnte, diese Filterung richtig hinzubekommen.



            Kommentar


            • #7
              $anlassname enthält ja auch ein Objekt und kein String.

              Kommentar


              • #8
                Okay und wie könnte ich, in diesem Beispiel, das Objekt in einen String konvertieren?

                Bei der Variabel $anlassname handelt es sich ja ebenfalls um ein Array, ich habe bei gewissen convert-Methoden eine "array to string conversion" Fehlermeldung erhalten.

                Kommentar


                • #9
                  Wie wäre es damit, dass du dich mit den Grundlagen befasst, statt dir den Code von anderen Leuten schreiben zu lassen?

                  Kommentar


                  • #10
                    Ich brauche keinen vorgeschriebenen Code, ich brauche eine Erklärung.

                    Kommentar


                    • #11
                      Zitat von manuelautoma Beitrag anzeigen
                      Ich brauche keinen vorgeschriebenen Code, ich brauche eine Erklärung.
                      Code:
                      array (size=1) 0 => object(stdClass)[9] public 'anlassname' => string 'Schrotmeisterschaft' (length=19)
                      und was genau willst du da raus haben ?
                      Schrotmeisterschaft ?

                      schon mal in die docu geschaut ?
                      https://www.php.net/manual/de/language.types.object.php

                      Kommentar


                      • #12
                        Wenn du als Ausgabe bei PDO objekt voreingestellt hast, kommt als Ergebnis ein Objekt zurück, sonst meist ein Array. Niemals kannst du das Ergebnis so verwenden.
                        https://www.php.net/manual/de/pdo.query.php findest du Beispeile.

                        Wenn du zudem eine Variable an dein SQL übergibst muss diese maskiert werden mit Quote oder du vewendest prepared statments. Welche DB API hast du im Einsatz, das ist auch wichtig für dein weiteres Vorgehen?

                        Kommentar


                        • #13
                          Das ganze if-else Konstrukt macht ohnehin keinen Sinn... Da kann man auch einfach $anlassname ausgeben, wenn denn dort bereits "Vereinsmeisterschaft" oder "Fuchsstich" oder "Gruppenwettkampf" oder was-auch-immer drinsteht.
                          Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                          Kommentar


                          • #14
                            Es geht schlussendlich darum, dass ich mit dem if-else Konstrukt bei den einzelnen Anlässen die ausgewählt werden, auf die jeweilige "Anlassbearbeitungsseite" gelange. Diese sieht bei allen Anlässen anders aus.

                            Im var_dump output sieht man ja den Wert zB. Schrotmeisterschaft, dieser soll dann im if-else Konstrukt mit einem einfachen Wort (Schrotmeisterschaft) verglichen werden und so dann die Bearbeitungsseite der Schrotmeisterschaft aufrufen.


                            Kommentar


                            • #15
                              Zu der Frage über die DB API: Ich benutze phpMyAdmin, zudem müssten die Variablen in meinem SQL Code bereits maskiert sein, diese geben mir auch den richtigen Output

                              Kommentar

                              Lädt...
                              X