Abfrage auf Auswahlfeld
Florian
- php
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
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
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
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.
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
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
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
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
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
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