Florian: Abfrage auf Auswahlfeld

Hallo!
Ich habe eine vielleicht ganz einfache Frage:
Ich habe ein Formular mit einem Auswahlfeld, wo mehrere Sachen angewählt werden können.
Nun habe ich dahinter eine Datenbankabfrage, welche durch das Auswahlfeld ergänzt wird.
v_entschwef ist der Name des Auswahlfeldes.
In VSql und VSql1 steht jeweils eine Datenbankabfrage, die durch die Auswahl des Auswahlfeldes ergänzt wird.
Mein Code:
if($v_entschwef !=""){
if($v_entschwef=="101"){$VSql.=" and MV.ID_VV_REE_ENTSCHW_IST=101"; $VSql1.=" and MV.ID_VV_REE_ENTSCHW_IST=101";}
Hier kämen dann noch weiter if.....
}
Nun meine Frage: Wenn ich eines auswähle, funzt es ganz prima, nur wenn ich mehrere auswähle, wird meine SQL- Anweisung immer nur um das letzte, also den höchsten Wert ergänzt.
Warum??
Wo liegt hier mein Fehler?
Danke im Voraus.
Gruß
Florian

  1. Hallo Florian

    Für mich sieht das so aus als ob entweder die Verschachtelung der if's nicht stimmt oder in v_entschwef nicht das steht was du erwartest.

    Folgender Lösungsansatz:
    Mach mal eine Ausgabe von v_entschwef und prüfe was dort drin steht. Wenn dort das steht was du erwartest, dann verfolge den Weg den deine Verschachtelung nimmt ebenfalls mit Kontrollausgaben.

    Muster:
    print "vor if (...)"
    if(...) {
    print "im if(...)"
    ...
    }

    Wenn das nicht weiter hilft noch mal melden.

    mfg
    Jörn

    1. Hallo!
      Erst einmal vielen dank für die Hilfe.
      Ich habe jetzt einfach ein echo $v_entschwef; gemacht.
      Ausgabe: Array
      Das heißt doch, daß mehrere Felder ausgewählt wurden, richtig?
      Nur wie lese ich jetzt die einzelnen Array- Inhalte aus?
      Danke und Gruß
      Florian

      1. Hi Florian,

        Erst einmal vielen dank für die Hilfe.
        Ich habe jetzt einfach ein echo $v_entschwef; gemacht.
        Ausgabe: Array

        um dir die Inhalte auszueben, probier mal:

        echo "<pre>"; print_r($meinarray); echo "</pre>";

        Dann kriegst du alles schön dargestellt ;-)

        Das heißt doch, daß mehrere Felder ausgewählt wurden, richtig?
        Nur wie lese ich jetzt die einzelnen Array- Inhalte aus?

        Gehe das Array mit einer For oder Foreach-Schleife durch und handle entsprechend.

        MfG, Dennis.

        --
        Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
        Zufällige Hinweise:
        ------------------------
        [remote-signature:http://riehle-web-modellbahn.s4.cybton.com/selfforum/signatur.php]
        1. Hallo!
          Ich bin das Array jetzt mit einer foreach- Schleife wie folgt durchgegangen:
          if($v_entschwef !=""){
          foreach($v_entschwef as $id_entschwef)
          if($id_entschwef=="101"){$VSql.=" and MV.ID_VV_REE_ENTSCHW_IST=101"; $VSql1.=" and MV.ID_VV_REE_ENTSCHW_IST=101";}
          if($id_entschwef=="102"){$VSql.=" and MV.ID_VV_REE_ENTSCHW_IST=102"; $VSql1.=" and MV.ID_VV_REE_ENTSCHW_IST=102";}
          if($id_entschwef=="103"){$VSql.=" and MV.ID_VV_REE_ENTSCHW_IST=103"; $VSql1.=" and MV.ID_VV_REE_ENTSCHW_IST=103";}
          if($id_entschwef=="151"){$VSql.=" and MV.ID_VV_REE_ENTSCHW_IST=151"; $VSql1.=" and MV.ID_VV_REE_ENTSCHW_IST=151";}
          if($id_entschwef=="152"){$VSql.=" and MV.ID_VV_REE_ENTSCHW_IST=152"; $VSql1.=" and MV.ID_VV_REE_ENTSCHW_IST=152";}
          if($id_entschwef=="153"){$VSql.=" and MV.ID_VV_REE_ENTSCHW_IST=153"; $VSql1.=" and MV.ID_VV_REE_ENTSCHW_IST=153";};
          }
          Leider wird mein SQL- Statement immer noch nur um den höchsten Wert (höste ID) erweiter, obwohl im Array mehrere Felder ausgewählt wurden, die ich mit    echo "<pre>"; print_r( $v_entschwef); echo "</pre>";
          auch ausgegeben habe.
          Wo liegt jetzt noch mein Fehler??
          Danke und Gruß
          Florian

          1. Hi

            Ich bin das Array jetzt mit einer foreach- Schleife wie folgt durchgegangen:
            if($v_entschwef !=""){
            foreach($v_entschwef as $id_entschwef)

            hier fehlt '{' für foreach

            if($id_entschwef=="101")

            ...
            $VSql1.=" and MV.ID_VV_REE_ENTSCHW_IST=153";};
            hier ist das letzte ; über und es fehlt die schließende '}'

            }

            mfg Jörn

      2. Hallo

        Das heißt doch, daß mehrere Felder ausgewählt wurden, richtig?

        Scheint so zu sein.

        Nur wie lese ich jetzt die einzelnen Array- Inhalte aus?

        for($i = 0; $i < count($v_entschwef);$i++) {
        print $v_entschwef[$i];
        }
        Anmerkung: Bitte beachte die Dokumentation der Funktion sizeof() b.z.w. count().

        mfg Jörn

  2. Hi,

    v_entschwef ist der Name des Auswahlfeldes.

    PHP ist dumm. Es erkennt Mehrfachauswahlen nur dann richtig, wenn der Name des Auswahlfeldes als Array gekennzeichnet ist, also v_entschwef[]

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
  3. Hallo!
    Ich habe das genauso gemacht:
    <select name="entschwef[]" size="5" multiple>
    .
    .
    .
    Weiter unten kommt dann folgendes:
    if($v_entschwef !=""){
    foreach($v_entschwef as $id_entschwef){

    if($id_entschwef=="101"){$VSql.=" and MV.ID_VV_REE_ENTSCHW_IST=101";}
    if($id_entschwef=="102"){$VSql.=" and MV.ID_VV_REE_ENTSCHW_IST=102";}
    if($id_entschwef=="103"){$VSql.=" and MV.ID_VV_REE_ENTSCHW_IST=103";}
    if($id_entschwef=="151"){$VSql.=" and MV.ID_VV_REE_ENTSCHW_IST=151";}
    if($id_entschwef=="152"){$VSql.=" and MV.ID_VV_REE_ENTSCHW_IST=152";}
    if($id_entschwef=="153"){$VSql.=" and MV.ID_VV_REE_ENTSCHW_IST=153";}
    }
    }
    So, habe ich nun nur eines angewählt, stimmt die Abfrage, bei mehreren kommt entweder kein Ergebnis oder ein fehlerhaftes (nur höchste ID angewählt).
    Die Ausgabe des Arrays liefert aber das richtige Ergebnis (echo.....).
    dort werden alle gewählten auch angezeigt.
    Gruß Florian

    1. Hallo,

      Ich habe das genauso gemacht:
      <select name="entschwef[]" size="5" multiple>

      Hier heißt dein Array entschwef

      Weiter unten kommt dann folgendes:
      if($v_entschwef !=""){

      Hier aber v_entschwef

      Habe mal schnell folgenden Test gemacht der bei mir auch funktioniert.

      <?php
      foreach ($_POST as  $key => $var) {$$key = $var;}

      print "<HTML><head><title>Test</title></head><body>\n";
      if(IsSet($cmd)) {
        if($v_entschwef !=""){
          foreach($v_entschwef as $id_entschwef){
            if($id_entschwef=="101"){$VSql.="101";}
            if($id_entschwef=="102"){$VSql.="102";}
            if($id_entschwef=="103"){$VSql.="103";}
            if($id_entschwef=="151"){$VSql.="151";}
            if($id_entschwef=="152"){$VSql.="152";}
            if($id_entschwef=="153"){$VSql.="153";}
            }
          }
          echo $VSql;
      }
      else {
      print "<form action="test.php" method=post>
       <select name="v_entschwef[]" size=5 multiple>
        <option>101</option>
        <option>102</option>
        <option>103</option>
        <option>151</option>
        <option>152</option>
        <option>153</option>
       </select>
       <input type=submit name="cmd" value=" Absenden ">
      </form>\n";
      }
      print "</body></html>\n";
      ?>

      Wenn ich jetzt 101,102,151 auswähle dann erscheint auch 101102151.
      Ich denke, daß ist was du brauchst musst du jetzt nur noch für dich anpassen.

      mfg Jörn