Hello,
ich hatte Dir in Deinem letzen Posting schon geschrieben, dass das hier nach Normalisierung schreit. Ich bin auch kein unbedingter Freund von Normalisierung um jeden Preis, aber hier handelt es sich ja eindeutig um Felder mit gleichem Typ. Da sehe ich nur Vorteile in der Normalisierung.
Noch ein paar Worte zu Abfragen mit logischen Werten. Der Browser überträgt nur ausgewählte Logische Felder. Dazu gehören:
- Radio-Elemente
- Checkbox-Elemente
- Buttons (z.B. Submit)
Da in den heute gebräuchlichen Datenbanken die (logischen) Felder immer drei Zustände haben, sollte man auch das berücksichtigen.
logisch | Als Wert | Beispiele
--------+------------------------------------+------------------------
- TRUE | Feld enthält Wert | "Müller" 10
- FALSE | Feld enthält neutrales Element | "" 0
- NULL | Feldinhalt wurde nicht festgelegt| (NULL) (NULL)
Man sollte also beim Design der Abfragen immer darauf achten, ob NULL auch für FALSE stehen darf, da ja der Browser bei leeren logischen Feldern eigentlich nur NULL (nämlich nichts) übertragt und nicht definiert FALSE.
Wenn man eine sichere Ausscheidung zwischen FALSE und TRUE benötigt, muss man auf Checkboxen verzichten und stattdessen eine Radio-Gruppe einsetzen. Die kann dann auch drei Zustände kennzeichen: JA - NEIN - WEISSNICHT
Und da sind wir an Deiner Frage angekommen:
Wie kann man die übertragenen Daten in eine Abfrage umwandeln?
Man bastelt sich eine Funktion, die je nach JA,NEIN,WEISSSNICHT ein Stückchen WHERE-Klausel zurückliefert.
Wenn man die Radios per Namen geschickt Bindet, kann man diese Funktion dann anschließend in einer Schleife aufrufen und hat für 90 Abfragewerte nur wenige Zeilen Schreibarbeit.
<input type="radio" name="rad[Wert1][JA]" value="1">
<input type="radio" name="rad[Wert1][NEIN]" value="1">
<input type="radio" name="rad[Wert1][EGAL]" value="1">
<input type="radio" name="rad[Wert2][JA]" value="1">
<input type="radio" name="rad[Wert2][NEIN]" value="1">
<input type="radio" name="rad[Wert2][EGAL]" value="1">
wobei Wert1, Wert2, ... für die Spaltennamen der tabelle steht.
Im PHP-Script baut man sich ein Array mit den Namen aller zu berücksichtigenden Spalten, damit man sich nicht irgendwas hässliches von außen einfangen kann:
$_radlist = array("Wert1","Wert2","Wert3",...);
Wenn der Post dann im Script ankommt, kann man das Where-Statement aufbauen:
$where = "" ; # oder was eben schon drinsteht...
$op = "and"; # Der Verknüpfungsoperator
foreach($_radlist as $spalte)
{
if (isset($_POST["rad"][$spalte]["JA"]))
{
$where .= " $op $spalte = true";
}
elseif(isset($_POST["rad"][$spalte]["NEIN"]))
{
$where .= " $op $spalte = false";
}
}
Wenn Du willst, kannst Du auch noch auf Fake prüfen vorher. $_POST["rad"] muss ja genausoviele Werte haben, wie $_radlist und jeder $_POST["rad"][$spalte] darf nur genau ein Element haben und als Value muss immer 1 drinstehen...
Und dann lässt Du Dir mal $where ausgeben zur Kontrolle.
Aus der $_radlist lass sich auch die <input>s per Schleife erzeugen, sodass Bu nur alles einmal und 90Mal scheiben musst.
Habe ich nun alle Klarheiten endgültig beseitigt?
Liebe Grüße aus http://www.braunschweig.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen