Dynamisches Abfragen und mehr?

stephandziurla

Erfahrenes Mitglied
Hallo!

Ich hab mal eine Frage, bei der ich einfach nicht weiterkomme. Vorweg möchte ich gleich sagen, dass einige Dinge nicht so nach "Vorschrift" sind, es aber nicht anders geht, bzw. ich es nicht anders möchte.

Also: ich habe eine DB, in der eine Tabelle T_Kundendaten aus mehreren Spalten besteht. Ein Teil dieser Spalten beginnt mit P, d.h. dieser Teil ist immer konstant. (Bsp: Pa, Pb, Pc, Pd, Pe.....) Das wäre beispiel im Rahmen der Normalisierung nicht akzeptabel, ich möchte aufgrund von Zeitmangel momentan nichts ändern.

In diesen Spalten stehen Begriffe, die für ein angebotenes Produkt stehen. Auf einer PHP-Seite habe ich ein Auswahlfeld (multiple) eingerichtet, mit dem ich mehrere Produkte anwählen kann. Pro Spalte in der DB steht jeweils nur 1 Wert.

Wenn ich den ersten Wert angeklickt habe, funktioniert die Abfrage und die richtigen Daten werden ausgegeben. Wie mache ich es jedoch, wenn ich "n" Werte anklicke? Kann ich das dann überhaupt in einer Abfrage realisieren?

Bin hier echt am Verzweifeln, wäre schön, wenn mir jemand helfen könnte!
 
Ich weiß jetzt nicht, wie das $_POST Array bei multiple Auswahlen aussieht.
Vielleicht mehrdimensional?

mach mal print_r($_POST) dann weißt du das. Dann siehst du auch, wie die Werte gespeichert sind, d.h du kannst sie alle speichern.
 
Hmm...ich hoffe es ist nicht schlimm zu sagen, wenn ich nicht auch nur im Geringsten weiß, was du meinst *lach*.
Lasse ich $_POST ausgeben, so bekomme ich:
Array ist: Array ( [selectsearch] => Array ( [0] => selectedproduct1 [1] => selectedproduct2 ) [Submit] => Senden )

Hm, irgendwie könnte das schon der richtige Weg sein. Aber wie weiter?
Ich habe mir was zusammengebastelt und das ist dabei rasusgekommen:

PHP:
$var = array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
for ($x=1; $x<=$i; $x++) {
  $var[x] = $_REQUEST['selectsearch'][0];
  echo "<br><br>Variable aus dem Array ist/sind: ".$var[x];
  echo "<br>";
}

Ich lasse ein Null-Array initialisieren und fülle es denn mit Werten in einer Schleife, die genau so lang ist, wie die selektierten Werte aus dem Auswahlfeld.
Als Ausgabe bekomme ich jedoch nur immer den letzten Wert. Wo kann der Fehler liegen?
 
Also ich würd nie einfach so so viele Indizes für das Array erstellen.
In PHP kannst du auch neue Indizes erstellen, wenn du das Array schon vorher erstellt hast.
Du musst nicht, wie in manchen OOP Sprachen, die größe des Arrays bestimmen.

$_REQUEST ist zu unsicher, das könnte alles sein: $_POST, $_GET, $_COOKIE.
Wenn du method="post" genommen hast, dann nimm auch $_POST.

Btw: $var[x] <--? du brauchst schon ein $ vor einer Variable.
Was ist $i?

PHP:
for ($x=0; $x <= (count($_POST['selectsearch'])-1); $x++) {
  $var[$x] = $_POST['selectsearch'][$x];
  echo "<br><br>Variable aus dem Array ist/sind: ".$var[$x];
  echo "<br>";
}
 
Irgendjemand_1 hat gesagt.:
Du musst nicht, wie in manchen OOP Sprachen, die größe des Arrays bestimmen.
Oh das war mir nich bekannt. Ich hab schon länger nicht mehr so intensiv PHP programmiert, da kann man mal durcheinander kommen, sorry.

Irgendjemand_1 hat gesagt.:
Das ist die Anzahl der Werte, die in dem Auswahlfeld angeklickt sind.

Irgendjemand_1 hat gesagt.:
PHP:
for ($x=0; $x <= (count($_POST['selectsearch'])-1); $x++) {
  $var[$x] = $_POST['selectsearch'][$x];
  echo "<br><br>Variable aus dem Array ist/sind: ".$var[$x];
  echo "<br>";
}

Ey super, das funktioniert! Danke, das ist echt nett. Schon bin ich einen Superschritt weiter gekommen. :-) :-)

Jetzt müsste ich nur noch überlegen und herausfinden, wie ich die Werte des Arrays dynamisch in der Datenbank abfrage. Wenn ich deine Hilfe richtig verstanden habe, spreche ich die einzelnen Werte mit $var[$x] an, richtig?
Dabei ist $var der Wert und $x die entsprechende "Stelle"? Stimmt das?
 
stephandziurla hat gesagt.:
Ey super, das funktioniert! Danke, das ist echt nett. Schon bin ich einen Superschritt weiter gekommen. :-) :-)

Klar funktioniert das ;)

stephandziurla hat gesagt.:
Jetzt müsste ich nur noch überlegen und herausfinden, wie ich die Werte des Arrays dynamisch in der Datenbank abfrage. Wenn ich deine Hilfe richtig verstanden habe, spreche ich die einzelnen Werte mit $var[$x] an, richtig?
Dabei ist $var der Wert und $x die entsprechende "Stelle"? Stimmt das?
02.09.05 10:26
Ja. Zwischen den [] stehen die Indizes, mit denen du die Elemente des Arrays ansprichst.
Fängt bei 0 an und geht bis count($_POST['selectsearch'])-1.
Theoretisch brauchst du das neue Array nicht, du könntest es sofort in die Datenbank einlesen, ohne noch ein Array zu erstellen.

edit:
Oder willst du was anderes machen, als sie Einzutragen?
 
Ich hab noch ne kleine Frage zu dem kleinen Quellcode, den du mir korrigiert hattest: Der zählt immer eins weiter, also es werden alle Einträge angezeigt und danach noch ein weiterer leerer. Woran kann das denn liegen?

Irgendjemand_1 hat gesagt.:
Oder willst du was anderes machen, als sie Einzutragen

Naja, das Ganze soll eine Suchfunktion sein, bei der ich die DB nach den Kriterien, die ich über dieses Auswahlfeld (multiple) setze, durchsuche.

s.o.: Das mit dem anzeigen hat sich erledigt...
 
Zuletzt bearbeitet:
stephandziurla hat gesagt.:
Ich hab noch ne kleine Frage zu dem kleinen Quellcode, den du mir korrigiert hattest: Der zählt immer eins weiter, also es werden alle Einträge angezeigt und danach noch ein weiterer leerer. Woran kann das denn liegen?

Daran, dass er einen Schleifendurchlauf zu viel macht.
Mhhh ...
Ich hab doch schon -1 drangehängt.
Naja dann mach halt mal folgendes:

PHP:
for ($x=1; $x <= (count($_POST['selectsearch'])-1); $x++) {
  $var[$x-1] = $_POST['selectsearch'][$x-1];
  echo "<br><br>Variable aus dem Array ist/sind: ".$var[$x-1];
  echo "<br>";
}
 
Sorry, mein Herausfinden und dein Posten haben sich überschnitten.

Mir ist gerade aber noch ein ganz anderes Problem eingefallen, was sich gerade aufgetan hat.
Hier mal ein Ausschnitt aus der Tabelle:

+---------------+
+ Produkt1 +
+ Produkt2 +
+ Produkt3 +
+ Produkt4 +
+ Produkt5 +
+---------------+

Dass ich Produkt 1 und 4 (bspw.) auswähle, klappt ja super. Allerdings ist ja bei der Ausgabe Produkt4 eigentlich das zweite Element. Wenn ich jetzt in der DB danach suche, wird in der falschen Spalte gesucht, nämlich in der zweiten Spalte. Produkt4 kann aber nur in Spalte4 stehen. Kann man das irgendwie so anpassen, dass das entsprechende Element auch die entsprechende Spalte in der DB ist? Ich hoffe, du weißt was ich meine, es klingt ein wenig wirr *lach* -- Danke aber schonmal für deine Hilfe!
 
Dann mach einfach in den Index ein -2 hintendran. Dann steht vorne die "normale" Zahl.
Sowas:
$var[4-2] == Produkt4

edit: muss eigentlich + anstatt minus heißen, habs wohl verwechselt
 
Zurück