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

Hallo,

Ich habe eine vielleicht ganz einfache Frage:
Ich habe ein Formular mit einem Auswahlfeld, wo mehrere Sachen
angewählt werden können.

Meinst du ein multiple-select? Wenn ja, dann musst du natürlich den Namen des selectfeldes auf

v\_entschwef[]

setzen, dann werden die Werte in das array v_entschwef[] gespeichert und du kannst einzeln auf die zugreifen (wie mit einem normalen array).

Sag bescheid, wenn ich dich falsch verstanden habe.

Gruss, Omar Abo-Namous

Hallo!
Ich habe das genauso gemacht:

.
.
.
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,

zuerst muss du natürlich beide variablen gleich benennen, also

Dann solltest du lieber abfragen, ob das ganze ein Array ist, also:

if(is_array($v_entschwef)){
foreach($v_entschwef as $id_entschwef){

dann kannst du dein weiteres vorgehen auch kürzer schreiben:

$VSql.=" and MV.ID_VV_REE_ENTSCHW_IST=".$id_entschwef;
}

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…).

Du kannst kein Array über echo … ausgeben, versuchs mal mit print_r($v_entschwef) und gib die Ausgabe davon mal an.

Das ist erstmal alles, was mir dazu einfällt.

Gruss, Omar Abo-Namous

Hallo!
Ich bin mittlerweile etwas vorangekommen:
erst einmal muß man schon prüfen(wie Du schon geschrieben hast), ob es ein Array ist. Wenn ja, muß es doch ungefähr so lauten:
and MV.ID_VV_REE_ENTSCHW_IST=$v_entschwef
danach müßte dann aber ein or folgen:
or MV.ID_VV_REE_ENTSCHW_IST=$v_entschwef
Dann muß geprüft werden, wann das Array zuende ist,richtig?
Ich habe das ungefähr so versucht:
if($v_entschwef !="")
{
$VSql.=" and";
$VSql1.=" and";
if(is_array($v_entschwef))
{
foreach($v_entschwef as $id_entschwef)
{
$VSql.=" MV.ID_VV_REE_ENTSCHW_IST=$id_entschwef or MV.ID_VV_REE_ENTSCHW_IST=$id_entschwef";
}
}
else
{
$VSql.=" MV.ID_VV_REE_ENTSCHW_IST=$v_entschwef";
}

Ergebnis:
befehl wurde nicht korrekt beendet. Array beinhaltet aber alles korrekt.
Gruß
Florian

Hallo!
Mittlerweile habe ich meien Code folgendermaßen geändert:
101: pipapo102: weißnich103: nochWatt

$VSql="Select
xyz
from Tabelle
where
bedingung1
,bedingung1
.
.
.

Unten dann:
if($v_entschwef !="")
{
$VSql.=" and id=000";
if($v_entschwef==„152“){$VSql.=" or ID=152"; } //Hier habe ich es mit und ohne geschweifte Klammern probiert.
}

Ergebnis ist, wenn ich nichts auswähle(die If-Anweisung also false ist), läuft es alles richtig.
Wenn ich eins auswähle, lommt kein Ergebnis (also als wenn !="").
Es wird also nicht richtig geprüft,was in $v_entschwef steht. So zumindest meine Vermutung.
Aber syntaktisch müsste das doch richtig sein?!
Danke und Gruß
Florian

Hallo Florian,

Darf man fragen, was du mit

if($v_entschwef !="")

eigentlich erreichen willst? Falls du erfragen willst, ob eine Variable gesetzt ist, dann kannst du das mittels isset($v_entschwef) tun.

{
$VSql.=" and id=000";
if($v_entschwef==„152“){$VSql.=" or ID=152"; } //Hier habe ich
es mit und ohne geschweifte Klammern probiert.
}

Ergebnis ist, wenn ich nichts auswähle(die If-Anweisung also
false ist), läuft es alles richtig.
Wenn ich eins auswähle, lommt kein Ergebnis (also als wenn
!="").
Es wird also nicht richtig geprüft,was in $v_entschwef steht.
So zumindest meine Vermutung.

Du vergisst wieder, dass $v_entschwef ein array ist!

Vielleicht kannst du mit einfachen Worten sagen, was du mit diesen Abfragen erreichen willst, denn in jedem neuen Beitrag von dir steht eine vollkommen anderer Algorithmus, der auch ein anderes Ergebnis hat. Wenn wir wüssten, was du als „Endstring“ erreichen willst, könnten wir dir hoffentlich besser helfen.

Gruss, Omar Abo-Namous