Mehrfachauswahl
Nick
- datenbank
Hi,
Bei manchen Formularen gibt es ja verschiedene Auswahlsysteme. Man kann
z.B. mehrere Auswahlen treffen.
Deine Hobbies:
[x] Sport
[x] Musik
[x] Sonstiges
oder nur eine Auswahl treffen:
In welchem Monat bist du geboren
( ) Januar
( ) Februar
(x) März
( ) Mai
...
Nun 2 Fragen:
Wie schreibt man so ein Formular in HTML/PHP, dass man nur eins auswählt, etc...
Und welchen Feldtyp muss man bei MySQL nehmen, damit man über das HTML/PHP Formular in das Feld schreiben kann.
Muss man bei einer Mehrfachauswahl mehrere Felder erstellen, die alle nur "JA" und "NEIN" enthalten können, genauso wie auch bei der Einzelauswahl.
Wie schreibt man es also dort in HTML/PHP, dass nur ein Feld ausgewählt werden kann.
Schon jetzt vielen Dank und frohe Weihnachten ich hoffe jemand versteht mein Problem
Mahlzeit Nick,
Wie schreibt man so ein Formular in HTML/PHP, dass man nur eins auswählt, etc...
Mehrfachauswahl: <http://de.selfhtml.org/html/formulare/auswahl.htm#checkboxen@title=<input type="checkbox">>
"Einzelauswal": <http://de.selfhtml.org/html/formulare/auswahl.htm#radiobuttons@title=<input type="radio">>
(Beides sinnvollerweise mit entsprechendem <http://de.selfhtml.org/html/formulare/strukturieren.htm#label@title=<label>> und durch <http://de.selfhtml.org/html/formulare/strukturieren.htm#gruppieren@title=<fieldset>> gruppiert!)
Und welchen Feldtyp muss man bei MySQL nehmen, damit man über das HTML/PHP Formular in das Feld schreiben kann.
Wie Dir beliebt. Sinnvollerweise würde ich jedoch Beziehungen zwischen Tabellen (und um nichts anderes handelt es sich) immer per Foreign-Key-Felder auf die jeweiligen Primärschlüsselspalten der "Wertetabellen" darstellen - und dann mit dem jeweiligen Feldtyp. Informiere Dich zu den Themen "Normalisierung" und "n:m-Beziehung".
Muss man bei einer Mehrfachauswahl mehrere Felder erstellen, die alle nur "JA" und "NEIN" enthalten können, genauso wie auch bei der Einzelauswahl.
Nein - bloß nicht!
Wie schreibt man es also dort in HTML/PHP, dass nur ein Feld ausgewählt werden kann.
s.o.
MfG,
EKKi
Ok
vielen Dank
Werde gleich schreiben wies funktioniert...
Grüße
Nick
yo,
Wie Dir beliebt. Sinnvollerweise würde ich jedoch Beziehungen zwischen Tabellen (und um nichts anderes handelt es sich) immer per Foreign-Key-Felder auf die jeweiligen Primärschlüsselspalten der "Wertetabellen" darstellen - und dann mit dem jeweiligen Feldtyp. Informiere Dich zu den Themen "Normalisierung" und "n:m-Beziehung".
ein ähnliches thema hatten wir vor kurzen, ich persönlich halte das für einen design-fehler, auf tabellen zu referenzieren, die letztlich nur als "lookup" tabellen dienen. bei der modellierung geht es aber vielmehr um kontrolle und abhängigkeiten und die auswahl einer person ist nicht von dieser look-up tabelle abhängig.
Ilja
Mahlzeit Ilja,
ein ähnliches thema hatten wir vor kurzen, ich persönlich halte das für einen design-fehler, auf tabellen zu referenzieren, die letztlich nur als "lookup" tabellen dienen.
Wo hattet "Ihr" das Thema? Also ich kann aus der Praxis sagen, dass es sinnvoller ist, entsprechende Foreign-Tabellen zu erstellen und einzubinden - auch wenn sie nur eine Handvoll Einträge enthalten. Dann muss man nämlich, wenn zusätzliche Auswahlmöglichkeiten hinzukommen oder bestehende geändert oder entfernt werden sollen, nicht jedesmal den Code (der die Auswahllisten, Checkboxen oder Radiobuttons erzeugt und auswertet) anpassen, sondern es reicht, die jeweiligen Einträge in der Foreign-Tabelle über geeignete Pflegemasken zu manipulieren ... eine Sache von zwei, drei Mausklicks.
MfG,
EKKi
moin Ekki,
Dann muss man nämlich, wenn zusätzliche Auswahlmöglichkeiten hinzukommen oder bestehende geändert oder entfernt werden sollen, nicht jedesmal den Code (der die Auswahllisten, Checkboxen oder Radiobuttons erzeugt und auswertet) anpassen
da hast du mich falsch verstanden, die Lookup tabellen bleiben bestehen, um eben diese auswahlisten aufzubauen. aber auf diese werte wird dann nicht mehr über einen fremdschlüssel referenziert, sondern die ausgewählten werte hart eingetragen. es sidn eben nur lookup tabellen, nicht mehr, nicht weniger.
Ilja
Mahlzeit Ilja,
aber auf diese werte wird dann nicht mehr über einen fremdschlüssel referenziert, sondern die ausgewählten werte hart eingetragen.
Das heißt, Du hast dann z.B. folgende "Haupttabelle"
ID | Name | Irgendwas | Kundenart
----+------+-----------+-----------
42 | Foo | 457345 | Privat
23 | Bar | 49839 | Firma
123 | Baz | | Privat
wobei die Werte für die Spalte "Kundenart" aus der folgenden "Lookuptabelle"
ID | Kundenart
----+-----------
1 | Privat
2 | Firma
3 | Konzern
4 | Wasweißich
kommen? Habe ich Dich richtig verstanden? Das ist IMHO extrem unsinnig ... wenn sich nun die Bezeichnung für die Kundenarten ändert - willst Du dann durch die Haupttabelle durchgehen und die Kundenart überall ändern?
Oder habe ich Dich immer noch falsch verstanden?
MfG,
EKKi
yo,
Oder habe ich Dich immer noch falsch verstanden?
nein, du hast mich richtig verstanden. am besten erklärt man es an dem beispiel, das ich auch in der vorherigen diskusion benutzt hatte.
stell dir vor, du hast eine tabelle für rechnungen und du hast eine tabelle für die mehrwertssteursätze, die es aktuell auszuwählen gibt.
wie würdest du das problem nun angehen, auf die tabelle mit den mehrwertssteeursätze referenzieren oder den satz fest in den rechnungsdatensatz schreiben ?
Ilja
Mahlzeit Ilja,
stell dir vor, du hast eine tabelle für rechnungen und du hast eine tabelle für die mehrwertssteursätze, die es aktuell auszuwählen gibt.
wie würdest du das problem nun angehen, auf die tabelle mit den mehrwertssteeursätze referenzieren oder den satz fest in den rechnungsdatensatz schreiben ?
Die Mehrwertsteuersätze historisieren bzw. mit einem Gültigkeitszeitraum versehen ... :-)
Tabelle MWSt:
ID | Bezeichnung | Satz | gueltigVon | gueltigBis
---+-------------+------+------------+-----------
...
15 | Regelsatz | 16% | 01.04.1998 | 31.12.2006
23 | ermäßigt | 7% | 01.07.1983 | NULL
42 | Regelsatz | 19% | 01.01.2007 | NULL
Ggf. kann man die natürlich noch um Länderzugehörigkeit usw. erweitern.
Wenn man durch entsprechende Indizes und Trigger die Konsistenz garantiert, kann man so jederzeit den zu einem gegebenen Zeitpunkt X gültigen Mehrwertsteuersatz ermitteln.
MfG,
EKKi
yo,
Die Mehrwertsteuersätze historisieren bzw. mit einem Gültigkeitszeitraum versehen ... :-)
und damit würdest du die normalformen verletzen und es könnten anomalien auftreten. oder mit anderen worten, ich könnte keinen datensatz aus der mehrwertstabelle tabelle löschen, auf die noch rechnungsdatensätze referenezieren. oder noch viel schlimmer, ich ändere einfach den wert von 19% auf 21% und schwupp, haben alte rechnungen auf einmal den neuen mehrwertssteuersatz, sehr, sehr unschön.
natürlich kann man anfagen zu tricksen und sagen, man darf eben keine datensätze mehr in der mehrwertssteuertabelle anfassen, aber das geht meistens nach hinten los. der prozentwert gehört meiner meinung nach fest persistiert in die rechnungsdatensätze rein. tut man das, lösen sich dies bezüglich alle möglichen anomalien von alleine auf und ich muss nicht das faule ei versuchen zu jonglieren. ich kann dann in der mehrwertstabelle, die als vorlage dient, tun und lassen was ich will, die alten rechnungen sind davon nicht betroffen und das nennt sich dann nach funktionalen abhängikeiten modellieren.
meine entwickler wollten den gleichen weg wie du gehen , bzw. ich konnte sie davon nicht mehr abhalten. da treten hinten rum einige problem auf. zum beispiel musst du prüfen, ob der mehrwertssteuersatz nock aktuell gültig ist und benutzt werden darf, obwohl er in der lookup tabelle steht. wie gehe ich dann vor, wenn eine alte rechung, wo ich vielleicht die rechnungsadresse korregieren will, noch einen alten mehrwertssteuersatz hat, der ja nicht mehr gültig ist, ich ihn in diesem fall beim update trotzdem bestehen lassen will.
was geich aussieht, muss nicht gleich sein, der mehrwertssteuersatz gehört fest persitiert zu den jeweiligen rechnungs-dokument rein.
Ilja
Wie schreibt man so ein Formular in HTML/PHP, dass man nur eins auswählt, etc...
nur so ein gedanke: warum nimmst du bei "nur eines auswählen" keine radiobuttons?
nur so ein gedanke: warum nimmst du bei "nur eines auswählen" keine radiobuttons?
Das ist ja das was ich suche.
Danke jetzt weiß ich ja, wie ich es machen muss ;)
Nick
Guten Tag,
Und welchen Feldtyp muss man bei MySQL nehmen, damit man über das
HTML/PHP Formular in das Feld schreiben kann.
Sollte nur ein Feld einer Gruppe selektiert werden können, z.B. bei einer Gruppe aus Radiobuttons, solltest du ENUM verwenden. Sollten mehrere Felder der Gruppe ausgewählt werden können, z.B. mit Checkboxen, solltest du SET verwenden.
Gruß
Christoph Jeschke
Danke
Ich werds sobald wie möglich ausprobieren
Grüße
Nick
Sollte nur ein Feld einer Gruppe selektiert werden können, z.B. bei einer Gruppe aus Radiobuttons, solltest du ENUM verwenden.
Also bei phpMyAdmin muss ich ja das Formular ausfüllen um ein neues Feld in einer Tabelle zu erstellen:
bei
FELD:testname
TYP: ENUM
LÄNGE/SET:'möglichkeit1','möglichkeit2'; [oder?]
KOLLATION:UTF8_Bin
...
NULL:NOTNULL/NULL
...
Wenn ich das so eingebe kommt die Fehlermeldung:
_______________
Fehler
SQL-Befehl:
ALTER TABLE gospel\_formular\_
ADD stimme
ENUM( 'möglichkeit1', 'möglichkeit2';
) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT NULL
MySQL meldet: Dokumentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ';) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT NULL' at line 1
_______________
»»Sollten mehrere Felder der Gruppe ausgewählt werden können, z.B. mit Checkboxen, solltest du SET verwenden.
Die gleiche Fehlermeldung kommt auch wenn ich SET anstatt ENUM angebe...
Vielen Dank
Nick
Guten Tag,
Also bei phpMyAdmin muss ich ja das Formular ausfüllen um ein neues Feld in
einer Tabelle zu erstellen:
Du willst phpMyAdmin nicht verwenden. Denn PMA ist nur eine weitere Schicht, die Fehler produziert. Der MySQL-Kommandozeilenclient ist sehr gut.
MySQL meldet: Dokumentation
#1064 - You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near ';)
CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT NULL' at line
1
Und was hast du daraufhin getan? MySQL meldet ja den Fehler.
Gruß
Christoph Jeschke
Und was hast du daraufhin getan? MySQL meldet ja den Fehler.
Sorry aber ich hab daraufhin hier geschrieben. Ich hab es auch anders ausprobiert. Halt alles in PMA.
Ich bin da einfach sehr ungeübt (Datenbanken, MySql, etc...)
Deswegen dachte ich du könntest mir vielleicht helfen, da ich es nicht weiß wie es ohne PMA geht.
Vielen Dank
Nick