Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Folgendes Problem:

Habe mehrere DD Menüs die Werte aus einer MYSQL Tabelle übernehmen, gebe diese mit POST weiter als Assoziatives Array.

Nach dem klick auf Submit habe ich dann folgendes POST Array:


Array
(
[X] => bla
[Y] => blubb
[TID] => 1
[FID] => 1
[LID] => 1
[L] => 100
[P] => -250
[S] => -250
[T2] => 1
[F2] => 2
[L2] => 1
[L2] => 100
[P2] => -250
[S2] => -250
[T3] => 1
[F3] => 3
[L3] => 1
[L3] => 100
[P3] => -250
[S3] => -250
)
[/PHP]

Die SQL Abfrage dazu:

[PHP]
$testabfrage = "SELECT 'blubb'
FROM syst
WHERE (S= '$_POST[S]')
AND (T = '$_POST[T]')
AND (F = '$_POST[F]')
AND (L = '$_POST[L]')
AND (P = '$_POST[P]')
GROUP by '$_POST[bla]'";
$testresult = mysql_query($testbfrage) or die("Anfrage fehlgeschlagen: " . mysql_error());

diese Abfrage habe ich 3 mal wobei bla und blubb immer gleich sind aber der Rest unterschiedlich wie ihr seht.

Mein eigentliches Problem ist aber das man im vorigen Fenster auswählen kann, welches der Werte an der Stelle bla steht. ich hätte z.B. anstatt X einfach P z.B. nehmen können. dann würde die Abfrage so aussehen müssen:


$testabfrage = "SELECT 'blubb'
FROM syst
WHERE (S= '$_POST[S]')
AND (T = '$_POST[T]')
AND (F = '$_POST[F]')
AND (L = '$_POST[L]')
AND (X = '$_POST[X]')
GROUP by '$_POST[bla]'";
$testresult = mysql_query($testbfrage) or die("Anfrage fehlgeschlagen: " . mysql_error());

[/PHP]

und im Array wäre natürlich nicht [X] => bla sondern [P] => bla.

Also wie mache ich eine dynamische Abfrage ?

Mir würde auch schon ein wenig weiterhelfen wie ich das hier gebacken kriege:

[PHP]
$testabfrage = "SELECT 'blubb'
FROM syst
WHERE (Arrayschlüssel2 = 'Arraywert2')
AND (Arrayschlüssel3 = 'Arraywert3')
AND (Arrayschlüssel4 = 'Arraywert4')
AND (Arrayschlüssel5 = 'Arraywert5')
AND (Arrayschlüssel6 = 'Arraywert6')
GROUP by '$_POST[bla]'";
$testresult = mysql_query($testbfrage) or die("Anfrage fehlgeschlagen: " . mysql_error());

Hoffe das ist verständlich und mir kann jemand helfen.

Hallo,

ich sehe jetzt nur die Möglichkeit das Statement schrittweise durch Konkatination und entsprechende if Selektionen zusammenzusetzen.

Du könntest auch mit einer foreach Schleife durch das Array laufen und dir die Werte speichern und später die gespeicherten Werte in das Statement einsetzen.

Frank

also wenn POST['X'] => bla wird nach X gruppiert?

ich würd als erstes mal ein element 'bla' in POST ablegen das angibt wonach gruppiert wird

POST['bla'] => 'X'

das einfachste wäre wohl alle beötigten elemente aus POST in bedingungen umzuschreiben und in ein weiteres array zu packen. das ganze dann einmal mit implode behandeln.

etwa so:


$aWhere = array();
// erstmal alle werte die in allen querys auf tauchen müssen
$aWhere[] = '\'T\' = \''.$_POST['T'].'\'';
[..]
// dann der dynamische teil
switch ($_POST['bla']) {
case 'X':
$aWhere[] = '\'P\' = \''.$_POST['P'].'\'';
break;
case 'P':
$aWhere[] = '\'X\' = \''.$_POST['X'].'\'';
break;
[..]
}
$sQuery = 'SELECT blubb FROM syst ';
$sQuery .= implode(' AND ', $aWhere);
$sQuery .= ' GROUP BY '.$_POST['bla'];
[/PHP]

ich hoffe dir hilft das hier (ist ungetestet, aber der Prinzip sollte verständlich sein):


$testabfrage = "SELECT 'blubb'
FROM syst
WHERE ";
$keys = array_keys($_POST);
for ($i=0; $i<count($keys); $i++) {
if ($i>0) {
$testabfrage .= " AND ";
}
$testabfrage .= " (".$keys[$i]."='".$_POST[$keys[$i]]."') ";

}
$testabfrage .= " GROUP by '$_POST[bla]'"
$testresult = mysql_query($testbfrage) or die("Anfrage fehlgeschlagen: " . mysql_error());
[/PHP]

krass, das ging ja schnell ! :eek

Danke !!

Mit dem Code von Diemah geht es jetzt am schnellsten !

Habe aus $i =0 nur $i=2 machen müssen (damit er nach blubb beginnt in die Abfrage zu schreiben).

Das Problem dabei ist jetzt, das er die ganzen Sachen mit den 2en und 3en dahinter auch in die erste Abfrage packt dabei sind das die Werte für die nächsten beiden Abfragen die genauso aussehen wie die erste aber anstatt den Werten ohne Zahl dahinter die Werte mit Zahl dahinter haben (also eine Abfrage für Werte ohne Zahl, eine für Werete mit 2 dahinter und eine für Werte mit 3 dahinter.

Werde mich jetzt da dran setzen und hoffe ich krieg's gebacken.

Nochmal vielen Dank und ich wünsche euch allen einen guten Rutsch !! :)

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.