Checkbox: Werte aus DB auslesen
Patrick
- php
0 Horst0 Andreas Cloos
Hallo zusammen,
ich versuche gerade einen Datensatz aus einer Datenbank auszulesen und in ein Formular zu schreiben, d.h. der Benutzer kann sich einloggen und seinen Eintrag den er gemacht hat verändern. Ich setze die Werte der
Texte mit value=$row['eintrag1'] usw.
Folgendes Problem:
Ich habe bei dem Formular jede Menge Checkboxen ("Häkchen"), die als
Felder, wenn Sie aktiviert wurden mit J in die Datenbank geschrieben werden. Wie schaffe ich es, dass diese Häkchen wieder aktiviert werden,
wenn das Änderungsformular aufgerufen wird?
Muss ich wirklich jedes Feld einzeln auslesen, oder geht das per select?
Danke für Eure Hilfe!
Gruß
Patrick
Hi,
wo liegt Dein Problem? Im auslesen der Datenbank?
Im if else schreiben?
if($haeckchen == 1)
echo "checked";
Oder wie man das Häckchen setzte?
<input type="checkbox" name="Kenntnisse_in" value="HTML" checked>
Gruß vom Horst
Hallo Horst,
danke für Deine schnelle Antwort!
Mit dem Auslesen habe ich kein Problem, dass mit dem checked ist
mir auch klar. Mir geht es um folgendes:
In den SEHR vielen Variablen in der DB steht, falls es aktiviert
wurde "J". Wie kann ich das jetzt schnell auslesen, oder muss
ich jede einzelne Variable so abfragen:
if ($row['Eintrag1DB' == "J")
{
$status=checked;
};
Und das für 60 Variablen!
Kann ich das automatisieren?
Danke!
Gruß
Patrick
Hi,
In den SEHR vielen Variablen in der DB steht, falls es aktiviert
wurde "J". Wie kann ich das jetzt schnell auslesen, oder muss
ich jede einzelne Variable so abfragen:if ($row['Eintrag1DB' == "J")
{
$status=checked;
};
funktion checked($fieldvalue,$truevalue)
{
if($fieldvalue == $truevalue)
{
return " checked";
}
else
{
return "";
}
}
Oder schmutzig programmmiert:
funktion checked($fieldvalue,$truevalue)
{
if($fieldvalue == $truevalue)
{
return " checked";
}
}
Man achte auf das führende Leerzeichen im Rückgabestring.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hallo Patrick,
ich hoffe ich verstehe Deine Frage richtig. Wollen mal sehen.
Du hast einen SELECT, a la "SELECT * FROM tabelle where user='meier'". Ich denk mir mal, das einige Felder zB Text oder Zahlen enthalten, andere ein J oder N (oder nix, statt des N). Blöderweise sind nicht alle J/N-Felder nebeneinander am Anfang oder Ende der Tabelle angelegt?
Du willst das Ergebnis Deines SELECTS (eine Zeile) darstellen, zB in einer HTML-Tabelle.
Das könntest Du eigentlich in eine (for-) Schleife packen, nur willst Du ja kein J oder N in der Tabelle stehen haben, sondern eine Checkbox, die - je nachdem - angekreuzt ist oder eben nicht. Also mußt Du Deine for-Schleifen bei den relevanten Feldern unterbrechen, für das eine Feld eine if-Abfrage durchführen, um dann mit for-Schleife weiterzumachen. Es würde also die Sache leichter machen, wenn alle Checkboxen hintereinander am Anfang oder am Ende ausgegeben werden.
if ($row['eintrag1'] == "J") {
echo "<input type='checkbox' name='blubb' value='J' checked> Ja<br>
<input type='checkbox' name='blubb' value='N'> Nein";
}
else {
echo "<input type='checkbox' name='blubb' value='J'> Ja<br>
<input type='checkbox' name='blubb' value='N' checked> Nein";
}
Wenn die Felder in der DB direkt nebeneinander liegen bzw. so hintereinander abgefragt und ausgegeben werden, dann könntest Du das ganze if-else-Geraffel wohl noch in eine Schleife packen.
Ach so: wenn die Chekcboxen nicht ausgwählt werden - was wird dann in die DB geschrieben? Nichts? Ein "N"? Das hört sich danach an, als sollte das DB-Feld ENUM sein und es eigentlich keine Chekcboxen, sondern Radiobuttons werden, oder?
Hallo Andreas,
du verstehst das ganz richtig!
Wenn das Häkchen dran ist steht J in der Datenbank, wenn nicht,
gar nichts! Die Felder sind enum-Felder und es sollen schon
Checkboxen sein.
Die Felder sind leider nicht hintereinander und ich kann die
Felder auch nicht umbenennen, da andere Dateien auf die DB
zugreifen. Kann ich das überhaupt automatisieren?
Hallo Zusammen,
Wenn das Häkchen dran ist steht J in der Datenbank, wenn nicht,
gar nichts! Die Felder sind enum-Felder und es sollen schon
Checkboxen sein.
Und wenn der User beide ankreuzt? Ja-Nein-Fälle sind eigentlich was für Radiobuttons, aber bitte...
Die Felder sind leider nicht hintereinander und ich kann die
Felder auch nicht umbenennen, da andere Dateien auf die DB
zugreifen.
Aber kannst Du sie hintereinander abfragen und ausgeben? Also nicht mittels SELECT *, sondern SELECT Feld1, Feld3, Feld5, Feld2, Feld4, Feld6 - wenn 2, 4 und 6 besagte Enum-Felder sind?
Dann könntest Du _eine_ Schleife für die ersten drei Felder machen und danach eine für die anderen drei, denen Du nur bei jedem Schleifendurchlauf den Namen(*) zuweisen mußt. Ein Include könnte da hilfreich sein.
(*) Wenn es nicht nur ein Anguck-, sondern auch Ändern-Formular sein soll, bei einem reinem Ausgabeformular kannst Du Dir die Namen schenken, solltest dafür dann aber alles auf readonly setzen, weil es sonst verwirrt.
Kann ich das überhaupt automatisieren?
Du willst genau _was_ automatisieren?
Hallo,
in PHP gibt es den Befehl gettype(), mit dem man sich den Typ des Feldes beschaffen kann. Mit dem SQL-Statement describe kann man dann auch den Untertyp abfragen. Das ist besonders für die MySQL-String-Subtypen enum und set praktisch.
Häkchenfelder (Checkbox = Optionen) sind ein klassischer Fall für set und Punktfelder (Radio = Alternativen) für enum.
in Set können 64 verschiedene Werte gespeichert werden und in emum 256.
Ich habe mir dafür eine Funktion geschrieben, die nur mit dem Feldnamen aufgerufen (und ein paar Wünschen, wie Sortierung, ob Select/Select multiple oder Radio/Checkbox) werden muss und dann steht der HTML-Text fix und fertig im Ausgabescript...
Ob es Radio oder Checkbox wird entscheidet die Funktion aufgrund des MySQL-String-Subtypes selbständig.
Das nur so als Anregung für Dich.
Liebe Grüße aus http://www.braunschweig.de
Tom