Jonny F.: Verständnissproblem array und SQL

Hallo,

ich habe folgendes Problem.

Ich habe ein Array das ich aus einen Listenfeld erzeuge, sprich ich wähle aus dem Listenfeld "Computername" aus dann schreibt es sich in das array  $_SESSION['availcol'] usw. es können natürlich auch mehrere ausgewählt werden
mit diesem array versuche ich nun eine SQL Query zu füllen sprich es soll so aussehen

SELECT "'.$_SESSION['availcol'].'" FROM bla;
Im SELECT sollen dann halt die ausgewählten Elemente stehen, sprich die Abfrage soll so aussehen.

SELECT Computername, Benuter, beispiel, Auto FROM SPALTE
       -----------------array---------------

Gibt es da einen Weg oder steh ich komplett auf dem schlauch.

Gruß Jonny f.

sry meine shift Taste funktioniert nicht mehr richtig :D

  1. Gibt es da einen Weg oder steh ich komplett auf dem schlauch.

    implode()

    sry meine shift Taste funktioniert nicht mehr richtig :D

    Nimm die andere :p

    1. Gibt es da einen Weg oder steh ich komplett auf dem schlauch.

      implode()

      sry meine shift Taste funktioniert nicht mehr richtig :D

      Nimm die andere :p

      Dein Satz in Gottes gehörgang :D des dauert ja ewig :D

      Gruß Jonny F.

  2. Hi,

    Ich habe ein Array das ich aus einen Listenfeld erzeuge, sprich ich wähle aus dem Listenfeld "Computername" aus dann schreibt es sich in das array  $_SESSION['availcol'] usw. es können natürlich auch mehrere ausgewählt werden
    mit diesem array versuche ich nun eine SQL Query zu füllen sprich es soll so aussehen
    SELECT "'.$_SESSION['availcol'].'" FROM bla;
    Im SELECT sollen dann halt die ausgewählten Elemente stehen, sprich die Abfrage soll so aussehen.

    SELECT Computername, Benuter, beispiel, Auto FROM SPALTE
           -----------------array---------------
    Gibt es da einen Weg oder steh ich komplett auf dem schlauch.

    ich weiß nicht, wo du deinen Schlauch hast - aber zum Thema: Um ein Array in einem SELECT-Statement an die DB zu übergeben, musst du das Array zunächst mal in einen String verwandeln. Sonst macht PHP das nämlich für dich, und es erscheint nur der String "Array" im SQL-Statement.
    Für diesen Fall bietet sich die PHP-Funktion implode() an (mit einem Komma als Separator).

    Kontextspezifische Maskierungen nicht vergessen! Hier ein Fall für mysql_real_escape_string().

    sry meine shift Taste funktioniert nicht mehr richtig :D

    Du meinst: Die Shift-Taste shift nicht mehr richtig? ;-)

    So long,
     Martin

    --
    Was du heute kannst besorgen,
    das geht sicher auch noch morgen.
    1. Du meinst: Die Shift-Taste shift nicht mehr richtig? ;-)

      Wie ist das Wetter?

      • CAPS-Lock
        Wie meinen?
      • Shift ohne Ende!

      SCNR

    2. Vielen Dank funktioniert einwandfrei :P

      Anhang:

      PC: Create new password
      User: enter "Pen*s"
      PC: Sorry your password isnt long enough

      Gruß Jonny F.

      1. Hi!

        PC: Create new password
        User: enter "Pen*s"
        PC: Sorry your password isnt long enough

        Wenn du das so formulierst, geht doch der Witz der Zweideutigkeit verloren. Mit "your password" wird es nämlich eindeutig, worauf sich die Meldung bezieht.

        Lo!

    3. Hi!

      SELECT "'.$_SESSION['availcol'].'" FROM bla;
      SELECT Computername, Benuter, beispiel, Auto FROM SPALTE

      Kontextspezifische Maskierungen nicht vergessen! Hier ein Fall für mysql_real_escape_string().

      Nö, das sind doch Identifier, die werden anders behandelt als es mysql_real_escape_string() tut. Verhindernde Maßnahmen (kleines bisschen runterrollen, hab da bei "Besonderheiten: Identifier, ORDER BY und der LIKE-Operator" einen Anker vergessen zu setzen).

      Und weil es Identifier sind, sind auch die "-Anführungszeichen in der obigen der zitierten Zeilen nicht richtig.

      Lo!

  3. Folgendes Problem erstürmt den Gimpfel in der Gosse :D

    Ich habe mehrere SQl Tabellen

    1. pc
      ID
      Name
      Benutzer
    2. bildschirm
      PC_ID
      Seriennummer

    Es kann ja nun sein, dass zwei Bildschirme an einen PC angeschlossen sind, nun möchte ich aber das nur ein Bildschirm ausgelesen wird.

    Normal würde ich die Abfrage ja so gestalten

      
    SELECT Name, Benutzer, Seriennummer  
    FROM pc INNER JOIN bildschirm ON pc.ID = bildschirm.PCID  
    
    

    Aber bei der ausgabe in PHP (Tabellen) würde ich dann ja zwei Zeilen generiert bekommen, ist es möglich das der Dödel einfach nur einen Bildschirm ausließt und den anderen einfach weglässt.

    benötigte Schreibzeit: 9 min 32 sec :D

    Gruß Jonny F.

    1. Hi,

      [...] den Gimpfel in der Gosse

      Ist das der Gipfel aller Grafikprogramme, bzw. was ins soziale Abseits geratene OS-Frickler mit seltsamem Verständnis von UI-Design dafür halten mögen? :-)

      Es kann ja nun sein, dass zwei Bildschirme an einen PC angeschlossen sind, nun möchte ich aber das nur ein Bildschirm ausgelesen wird.

      Normal würde ich die Abfrage ja so gestalten

      SELECT Name, Benutzer, Seriennummer

      FROM pc INNER JOIN bildschirm ON pc.ID = bildschirm.PCID

      
      >   
      > Aber bei der ausgabe in PHP (Tabellen) würde ich dann ja zwei Zeilen generiert bekommen, ist es möglich das der Dödel einfach nur einen Bildschirm ausließt und den anderen einfach weglässt.  
        
      Was dein Dödel kann und nicht kann, entzieht sich (zum Glück) meiner Kenntnis - aber nach der PC-ID gruppieren könntest du bspw., wenn es dir egal wäre, welcher der Bildschirme dann im Ergebnisdatensatz landet.  
        
      MfG ChrisB  
        
      
      -- 
      “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
      
      1. Hi,

        [...] den Gimpfel in der Gosse

        Ist das der Gipfel aller Grafikprogramme, bzw. was ins soziale Abseits geratene OS-Frickler mit seltsamem Verständnis von UI-Design dafür halten mögen? :-)

        So in etwa :D

        Was dein Dödel kann und nicht kann, entzieht sich (zum Glück) meiner Kenntnis - aber nach der PC-ID gruppieren könntest du bspw., wenn es dir egal wäre, welcher der Bildschirme dann im Ergebnisdatensatz landet.

        Tja ich kann mit dem Ding auch nur zwei sachen anfagnen :D
        Ja Danke funktioniert jetzt so wir ich es mir vorgestellt habe.

        Gruß Jonny F.

    2. Hätte auch schon wieder dass nächste Problem.

      $_SESSION['tablecolallpc'] ist ein array in dem aus dem Listenfeld die Elemente gespeichert werden, nun möchte ich ein SQL statement daraus Bilden, dass Problem ist das die Attribute der Tabellen aus SQL anders heißen als die aus dem Listeneld, dies wollte ich nun so lösen doch in dem array
      $_SESSION['mts'][]
      will er nichts eintragen, ist diese Konstellation überhaupt möglich.

        
      $_SESSION['mts'] = array();  
      foreach($_SESSION['tablecolallpc'] AS $cols)  
         {  
          switch($cols)  
      	{  
      	  case "Computername": $reqCondition.="b.name";break;  
      	  case "Benutzername": $reqCondition.="b.bmanufacturer";break;  
                case "Abteilung": $reqCondition.="b.abt";break;  
                case "Inventarnummer": $reqCondition.="b.invent";break;  
                case "Aktuelle Kostenstelle": $reqCondition.="b.akt_kost";break;  
                case "Alte Kostenstelle": $reqCondition.="b.ssn";break;  
                case "Seriennummer": $reqCondition.="b.ssn";break;  
        
        
                $_SESSION['mts'][] = $reqCondition; //SELECT wird generiert  
              }  
         }  
      
      

      Gruß Jonny F.

      1. Hi!

        switch($cols)
        {
          case "Computername": $reqCondition.="b.name";break;
          case "Benutzername": $reqCondition.="b.bmanufacturer";break;
                case "Abteilung": $reqCondition.="b.abt";break;
                case "Inventarnummer": $reqCondition.="b.invent";break;
                case "Aktuelle Kostenstelle": $reqCondition.="b.akt_kost";break;
                case "Alte Kostenstelle": $reqCondition.="b.ssn";break;
                case "Seriennummer": $reqCondition.="b.ssn";break;

        $_SESSION['mts'][] = $reqCondition; //SELECT wird generiert
              }

        Wenn ich den Code mal ordentlich schreibe, siehst du dann deinen Denkfehler

            switch($cols)  
            {  
                case "Computername":  
                    $reqCondition .= "b.name";  
                    break;  
                case "Benutzername":  
                    $reqCondition .= "b.bmanufacturer";  
                    break;  
                case "Abteilung":  
                    $reqCondition .= "b.abt";  
                    break;  
                case "Inventarnummer":  
                    $reqCondition .= "b.invent";  
                    break;  
                case "Aktuelle Kostenstelle":  
                    $reqCondition .= "b.akt_kost";  
                    break;  
                case "Alte Kostenstelle":  
                    $reqCondition .= "b.ssn";  
                    break;  
                case "Seriennummer":  
                    $reqCondition .= "b.ssn";  
                    break;  
                    $_SESSION['mts'][] = $reqCondition; //SELECT wird generiert  
            }
        

        Deine Zuweisung wird nicht auseführt, weil beim break das switch-Statement verlassen wird. Sie hätte ohne das break sowieso nur die Chance bei $cols == "Seriennummer" ausgeführt zu werden.

        Mit Zeilenumbrüchen und Leerzeichen zu sparen erhöht nicht die Übersichtlichkeit.

        Lo!

        1. Deine Zuweisung wird nicht auseführt, weil beim break das switch-Statement verlassen wird. Sie hätte ohne das break sowieso nur die Chance bei $cols == "Seriennummer" ausgeführt zu werden.

          Mit Zeilenumbrüchen und Leerzeichen zu sparen erhöht nicht die Übersichtlichkeit.

          Da geb ich dir recht, aber der Fehler lag
          $reqCondition .= "b.invent";
          an dem Punkt vor dem gleichheitszeichen :D

          könntest du mir hier vielleicht behilflich sein. Ich denk der Quelltext erklärt sich von selbst was ich da vor hab.

            
          echo "  
          <img src='image/".($_SESSION["ot"] == "ASC" AND $_SESSION['order'] == $cols? "up.png" : "down.png")."' class='imgupdown'>  
          ";  
          
          

          In der Session "order" steht ein Spaltenname der durch eine GET Variable übergeben wurde, $cols lass ich mir über eine foreach schleife ausgeben, $cols enthält alle Spaltennamen.

          Gruß Jonny F.

          1. Hi!

            Deine Zuweisung wird nicht auseführt, weil beim break das switch-Statement verlassen wird. Sie hätte ohne das break sowieso nur die Chance bei $cols == "Seriennummer" ausgeführt zu werden.
            Da geb ich dir recht, aber der Fehler lag
            $reqCondition .= "b.invent";
            an dem Punkt vor dem gleichheitszeichen :D

            Nicht nur. Wenn du allerdings sinnentstellende Kürzungen vorgenommen hast, kann die Antwort nicht richtig ausfallen. Ob es sinnvoll ist, eine Stringverknüpfung vorzunehmen, konnte ich auch cnith aus dem Ausschnitt erkennen. Wenn du sagst, dass du den . gar nicht benötigst, dann brauchst du auch kein $reqCondition als Zwischenvariable, denn dann könntest du gleich den jeweiligen Wert $_SESSION['mts'][] zuweisen.

            könntest du mir hier vielleicht behilflich sein. Ich denk der Quelltext erklärt sich von selbst was ich da vor hab.

            echo "

            <img src='image/".($_SESSION["ot"] == "ASC" AND $_SESSION['order'] == $cols? "up.png" : "down.png")."' class='imgupdown'>
            ";

            
            > In der Session "order" steht ein Spaltenname der durch eine GET Variable übergeben wurde, $cols lass ich mir über eine foreach schleife ausgeben, $cols enthält alle Spaltennamen.  
              
            Und was ist deine Frage dazu? Ich sehe keinen Fehler.  
              
              
            Lo!
            
            1. Nicht nur. Wenn du allerdings sinnentstellende Kürzungen vorgenommen hast, kann die Antwort nicht richtig ausfallen. Ob es sinnvoll ist, eine Stringverknüpfung vorzunehmen, konnte ich auch cnith aus dem Ausschnitt erkennen. Wenn du sagst, dass du den . gar nicht benötigst, dann brauchst du auch kein $reqCondition als Zwischenvariable, denn dann könntest du gleich den jeweiligen Wert $_SESSION['mts'][] zuweisen.

              Ja ich habe vorhin eine Stringverknüpfung gehabt, die habe ich aber dannach weg gemacht, daswegen ist es ja zu diesen negativen ausfallenden Konstrukt gekommen :D aber danke für den Tipp mit der direkten zuweisung.

              echo "  
              <img src='image/".($_SESSION["ot"] == "ASC" AND $_SESSION['order'] == $cols? "up.png" : "down.png")."' class='imgupdown'>  
               ";
              

              Und was ist deine Frage dazu? Ich sehe keinen Fehler.

              Ja is stell einfach mal so die Frage, Syntax von dieser Zeile ist richtig oder, also liegt es an der variablen zuordnung oder so naja des bringt mich jetzt schon mal en stückchen weiter danke :D

              Geruß Jonny F.

              1. Hi!

                Und was ist deine Frage dazu? Ich sehe keinen Fehler.
                Ja is stell einfach mal so die Frage, Syntax von dieser Zeile ist richtig oder, also liegt es an der variablen zuordnung oder so naja des bringt mich jetzt schon mal en stückchen weiter danke :D

                Ob die Syntax richtig ist, bekommt man durch einen Script-Start raus. Kommt keine Fehlermeldung, ist die Syntax in Ordnung. Man kann aber nicht davon ableiten, dass das Geschriebene auch dem Gemeinten entspricht. Einfach mal verschiedenes ausprobieren ist eine Möglichkeit, dabei kann man auch lernen. Gezielter kann man bei Fehlern weiterkommen, wenn man nachschaut was der Wunsch konkret in der Wirklichkeit anstellt. Verwende Kontrollausgaben, um die Inhalte deiner Variablen und auch die Ergebnisse von Ausdrücken zu überprüfen. Auch ist ein auf E_ALL gestelltes error_reporting (und display_errors auf on) beim Entwickeln sehr nützlich, um unter anderem fehlerhafte Variablenzugriffe angezeigt zu bekommen.

                Lo!

                1. Ich hätte mal eine neu Frage, gibt es eine Möglichkeit in einem Array einen Index zu suchen und den dann in einer Variablen zu speichern.

                  $_SESSION['array'] = array();

                  $_SESSION['array']['Computer']="sqlstatemant";
                  $_SESSION['array']['Besitzer']="besitzer.besitzer";
                  ect.

                  also das ich jetzt nach z.B. nach dem Index Computer suche
                   $_SESSION['array']['Computer']
                  und mir dann den Wert ausgeben lasse bzw. in einer Variablen speichern
                  "sqlstatemant"

                  sowas wie array_key_exists nur dass ich nicht true oder false rausbekomme, ich habe bist jetzt noch nichts gefunden, wäre nett wenn mir jemand auf die Sprünge helfen könnte.

                  Gruß Jonny F.

                  1. Hi!

                    Ich hätte mal eine neu Frage, gibt es eine Möglichkeit in einem Array einen Index zu suchen und den dann in einer Variablen zu speichern.

                    Sieht mir nach einem Wald-Bäume-Problem aus :-)

                    Ein Array ist unter PHP eine Ansammlung von Variablen.

                    $_SESSION['array']['Computer']="sqlstatemant";
                    also das ich jetzt nach z.B. nach dem Index Computer suche
                    $_SESSION['array']['Computer']
                    und mir dann den Wert ausgeben lasse bzw. in einer Variablen speichern

                    Beim Verwenden von $_SESSION['array']['Computer'] wird genau dieses

                    "sqlstatemant"

                    verwendet. Also mit beispielweise

                    echo $_SESSION['array']['Computer'];
                      fwrite($file, $_SESSION['array']['Computer']);
                      $_SESSION['array']['Computer'] = "was neues";

                    greifst du lesend und schreibend zu. Oder meintest du was anderes?

                    Lo!

                    1. echo $_SESSION['array']['Computer'];
                        fwrite($file, $_SESSION['array']['Computer']);
                        $_SESSION['array']['Computer'] = "was neues";

                      greifst du lesend und schreibend zu. Oder meintest du was anderes?

                      Nur lesend, ich habe aber eine Lösung gefunden.

                      Ich lese mit einer foreach schleife das array aus und in der foreach schleife gerade mit einer IF Anweisung nach nem Index suchen.

                      Gruß Jonny F.