Verständnisfrage:PHP-FAQ: 11.10. Wie kann man Checkboxen verarbeiten? in Verbindung mit MySQL

Verständnisfrage:PHP-FAQ: 11.10. Wie kann man Checkboxen verarbeiten? in Verbindung mit MySQL

am 27.08.2005 13:51:26 von Sascha Blum

Hallo Leute,

hätte da mal eine Frage zur PHP-FAQ: 11.10. Wie kann man Checkboxen
verarbeiten? in Verbindung mit MySQL.

Gibts da zufällig noch eine andere und kürzere Methode an die Werte dran
zukommen was in einem Formular mit Checkbox ausgestattet ist?

Würde gerne den Inhalt einer Checkbox in ein DB-Feld übertragen.

Also z.B. es gibt ein Formular mit Checkbox wo es 3 Auswahlwerte gibt zum
auswählen - wobei eigentlich in der Regel dann davon mind. 1 in der Praxis
hinterher ausgewählt wird oder auch mehr ...

Nehmen wir doch mal als Beispiel das von SELFHTML da:

http://de.selfhtml.org/html/formulare/auswahl.htm#checkboxen

"http://www.w3.org/TR/html4/strict.dtd">


Text des Titels



Pizzabelag nach Wahl!




Kreuzen Sie die gewünschten Zutaten an:



Salami

Pilze

Sardellen







das praktisch die Werte salami, pilze und sardellen in ein DB-Feld überträgt
- wenn alle ausgewählt wären oder wenn weniger ausgewählt dann weniger ...

Aber da ist gerade noch eine weitere Frage bei mir aufgekommen, was mir die
PHP-FAQ http://www.php-faq.de/q/q-formular-checkbox.html nicht beantwortet
- zumindest erkenne die da nicht die Antwort.

Wie könnte ich das hinterher oder beim übertragen in die DB erreichen, die
einzelnen values da etwas zu formatieren - z.B.

wenn hinterher bei der Ausgabe die Werte so ausgegeben werden sollen:

salami

pilze

sardellen


oder so ähnlich oder mit anderen HTML-Formatierung ...

Wenn da mal angenommen alle 3 ausgewählt wären und "zutat" dann an die DB
übertragen wird, dann müste dann doch im DB-Feld folgendes drin stehen:

salamipilzesardellen

oder seh ich das da gerade falsch? Doch wie trennt man das dann per Script
hinterher in die 3 Werte da? Irgendwie blicke ich da gerade nicht so ganz
durch ...

Kann mir da vielleicht jemand mal freundlicherweise weiterhelfen und mir das
mal erklären bzw. sagen ...

Oder ein Tipp auf ein deutsches Tutorial oder dergleichen zu dem obrigen da
nennen ...

Besten Dank vorab.

Viele Grüße

Sascha

Re: Verständnisfrage: PHP-FAQ: 11.10. Wie kann man Checkboxen verarbeiten? in Verbindung mit MySQ

am 27.08.2005 15:58:15 von Martin Kurz

Sascha Blum schrieb:
> Hallo Leute,
>
> hätte da mal eine Frage zur PHP-FAQ: 11.10. Wie kann man Checkboxen
> verarbeiten? in Verbindung mit MySQL.
>
> Gibts da zufällig noch eine andere und kürzere Methode an die Werte dran
> zukommen was in einem Formular mit Checkbox ausgestattet ist?
>
> Würde gerne den Inhalt einer Checkbox in ein DB-Feld übertragen.
>
> Also z.B. es gibt ein Formular mit Checkbox wo es 3 Auswahlwerte gibt zum
> auswählen - wobei eigentlich in der Regel dann davon mind. 1 in der Praxis
> hinterher ausgewählt wird oder auch mehr ...
>
> Nehmen wir doch mal als Beispiel das von SELFHTML da:
>
> http://de.selfhtml.org/html/formulare/auswahl.htm#checkboxen
>
> > "http://www.w3.org/TR/html4/strict.dtd">
>
>
> Text des Titels
>
>
>
>

Pizzabelag nach Wahl!


>
>

>

Kreuzen Sie die gewünschten Zutaten an:


>


> Salami

> Pilze

> Sardellen
>


>

>
>
>
>
> das praktisch die Werte salami, pilze und sardellen in ein DB-Feld überträgt
> - wenn alle ausgewählt wären oder wenn weniger ausgewählt dann weniger ...
>
> Aber da ist gerade noch eine weitere Frage bei mir aufgekommen, was mir die
> PHP-FAQ http://www.php-faq.de/q/q-formular-checkbox.html nicht beantwortet
> - zumindest erkenne die da nicht die Antwort.
>
> Wie könnte ich das hinterher oder beim übertragen in die DB erreichen, die
> einzelnen values da etwas zu formatieren - z.B.
>
> wenn hinterher bei der Ausgabe die Werte so ausgegeben werden sollen:
>
> salami

> pilze

> sardellen

>
> oder so ähnlich oder mit anderen HTML-Formatierung ...
>
> Wenn da mal angenommen alle 3 ausgewählt wären und "zutat" dann an die DB
> übertragen wird, dann müste dann doch im DB-Feld folgendes drin stehen:
>
> salamipilzesardellen
>
> oder seh ich das da gerade falsch? Doch wie trennt man das dann per Script
> hinterher in die 3 Werte da? Irgendwie blicke ich da gerade nicht so ganz
> durch ...
>
> Kann mir da vielleicht jemand mal freundlicherweise weiterhelfen und mir das
> mal erklären bzw. sagen ...
>
> Oder ein Tipp auf ein deutsches Tutorial oder dergleichen zu dem obrigen da
> nennen ...
>
> Besten Dank vorab.
>
> Viele Grüße
>
> Sascha

Hallo Sascha,

im Prinzip sind eigentlich auf der genannten Seite alle nötigen Infos genannt.
Bei den Checkboxen gibst Du (statt wie im geposteten Beispielcode) folgendes als
name: name="zutat[]", dann landen die values der aktivierten Checkboxen in dem
Array $_REQUEST['zutat']. Damit kannst Du dann tun und lassen was immer Du
willst, bspw:

$zutaten = '';
if (isset($_REQUEST['zutat'])) {
$zutaten = implode('
', $_REQUEST['zutat']);
}

Damit erhälst Du einen String mit den Zutaten, jeweils durch
getrennt, also
wie in Deinem obigen Beispiel, ist keine Zutat gewählt, ist der String leer.

Verwendest Du mehrere Checkboxen mit name="zutat" wie in obigem Quelltext hast
Du in $_REQUEST['zutat'] nur den Wert einer Zutat, also salami, pilze oder
sardellen, da sich die Werte gegenseitig überschreiben, der letzte gewinnt. Mit
dem [] hinter dem Namen werden halt einfach alle Values als Array übermittelt.

Alle Klarheiten beseitigt? Gut :)

Martin

Re: Verständnisfrage:PHP-FAQ: 11.10. Wie kann man Checkboxen verarbeiten? in Verbindung mit MySQL

am 27.08.2005 19:09:03 von Sascha Blum

Hallo Martin, Hallo Leute,

Martin Kurz wrote:

erstmal vielen Dank für deine Antwort und Erklärung ...

[...]
>>


>>

Kreuzen Sie die gewünschten Zutaten an:


>>


>> Salami

>> Pilze

>> Sardellen
>>


>>


[...]

> im Prinzip sind eigentlich auf der genannten Seite alle nötigen Infos
> genannt. Bei den Checkboxen gibst Du (statt wie im geposteten
> Beispielcode) folgendes als name: name="zutat[]", dann landen die values
> der aktivierten Checkboxen in dem Array $_REQUEST['zutat']. Damit kannst
> Du dann tun und lassen was immer Du willst, bspw:
>
> $zutaten = '';
> if (isset($_REQUEST['zutat'])) {
> $zutaten = implode('
', $_REQUEST['zutat']);
> }
>
> Damit erhälst Du einen String mit den Zutaten, jeweils durch

> getrennt, also wie in Deinem obigen Beispiel, ist keine Zutat gewählt, ist
> der String leer.
>
> Verwendest Du mehrere Checkboxen mit name="zutat" wie in obigem Quelltext
> hast Du in $_REQUEST['zutat'] nur den Wert einer Zutat, also salami, pilze
> oder sardellen, da sich die Werte gegenseitig überschreiben, der letzte
> gewinnt. Mit dem [] hinter dem Namen werden halt einfach alle Values als
> Array übermittelt.


dann hieße das dann doch zugleich auch, das ich das [] dann bei bei meinem
insert dann beibehalten muss oder seh ich das jetzt falsch?

Also müste beispielsweise dann doch das so sein:


$DatabasePointer=mysql_connect("mein_host", "user", "pw");
mysql_select_db("meine_db", $DatabasePointer);

$SQL = "INSERT INTO rezepte (zutat) VALUES ('".$_REQUEST['zutat[]']."')";
mysql_query($SQL, $DatabasePointer);


oder hab ich da jetzt was falsch gemacht und falsch verstanden?


Und bei Daten auslesen aus der DB könnte ich dann das:

also erst halt zur DB Kontakt herstellen und das select und danach das:

$zutaten = '';
if (isset($_REQUEST['zutat'])) {
$zutaten = implode('
', $_REQUEST['zutat']);
}

einsetzen oder hab ich das falsch verstanden?

Viele Grüße

Sascha

Re: Verständnisfrage:PHP-FAQ: 11.10. Wie kann man Checkboxen verarbeiten? in Verbindung mit MySQL

am 27.08.2005 19:22:40 von Sascha Blum

Hallo,

Sascha Blum wrote:

noch eine kleine Rückfrage ...


> Und bei Daten auslesen aus der DB könnte ich dann das:
>
> also erst halt zur DB Kontakt herstellen und das select und danach das:
>
> $zutaten = '';
> if (isset($_REQUEST['zutat'])) {
> $zutaten = implode('
', $_REQUEST['zutat']);
> }
>
> einsetzen oder hab ich das falsch verstanden?

müste ich dann nach dem select da vor dem $zutaten da eigentlich dann auch
noch dann array() verwenden oder merkt sich die MySQL-Tabelle das es ein
array ist der eingetragene Wert da?

Also ich meine dann eben:

also erst halt zur DB Kontakt herstellen und das select und danach das:

hmm vielleicht sowas?

$array = array($_REQUEST['zutat']);

und zu guter letzt:

$zutaten = '';
if (isset($_REQUEST['zutat'])) {
$zutaten = implode('
', $_REQUEST['zutat']);
}

Oder wäre das jetzt totaller Mist? Ich wills ja lernen und verstehen und
nach Möglichkeit auch richtig machen ... - und zum Erlernen brauch ich halt
auch verständliche Beispiele ums zu verstehen.

Viele Grüße

Sascha

Re: Verständnisfrage:PHP-FAQ: 11.10. Wie kann man Checkboxen verarbeiten? in Verbindung mit MySQL

am 27.08.2005 19:43:24 von Sascha Blum

Hallo Martin, Hallo Leute,

Martin Kurz wrote:

> im Prinzip sind eigentlich auf der genannten Seite alle nötigen Infos
> genannt. Bei den Checkboxen gibst Du (statt wie im geposteten
> Beispielcode) folgendes als name: name="zutat[]", dann landen die values
> der aktivierten Checkboxen in dem Array $_REQUEST['zutat']. Damit kannst
> Du dann tun und lassen was immer Du willst, bspw:
>
> $zutaten = '';
> if (isset($_REQUEST['zutat'])) {
> $zutaten = implode('
', $_REQUEST['zutat']);
> }

hätte da noch eine kleine Zusatz-Rückfrage ...

OK da bekomme ich schon mal die einzelnen Werte z.B. so ausgegeben:

salami

pilze

sardellen


OK das
wird logischerweise so nicht ausgegeben sondern sieht ja
eigentlich so dann aus:

salami
pilze
sardellen

Vorausgesetzt alle 3 waren in den Checkboxen da ausgewählt worden. Soweit
funktioniert das ja schon mal bestens ...

Wie müste ich das dann machen, wenn ich die einzelnen Werte noch zusätzlich
irgendwie formatieren möchte (fett, kursiv oder was auch immer) oder als
Listenpunkte ausgeben möchte?

z.B. so in etwa:

  • salami


  • pilze


  • sardellen



  • dann müste die Formatierung schätze ich mal vor dem da erfolgen:


    $zutaten = '';
    if (isset($_REQUEST['zutat'])) {
    $zutaten = implode('
    ', $_REQUEST['zutat']);
    }

    oder seh ich das falsch? Also vor dem implode() oder?

    Hmm fragt sich jetzt nur noch wie ...? - wird langsam kompliziert irgendwie.

    Oder kann ich das so irgendwie machen?

    z.B.:

    $zutaten = '';
    if (isset($_REQUEST['zutat'])) {
    $zutaten = implode('
    ',
  • $_REQUEST['zutat']
  • );
    }


    Habe mir auch schon im Internet die ein oder andere Seite durchgelesen wie
    z.B. http://de.php.net/manual/de/function.implode.php aber so richtig finde
    ich nicht die Infos wo ich suche ...

    Besten Dank vorab.

    Viele Grüße

    Sascha

    Re: Verständnisfrage: PHP-FAQ: 11.10. Wie kann man Checkboxen verarbeiten? in Verbindung mit MySQ

    am 27.08.2005 20:04:13 von Martin Kurz

    Sascha Blum schrieb:
    > Hallo,
    >
    > Sascha Blum wrote:
    >
    > noch eine kleine Rückfrage ...
    >
    >
    >
    >>Und bei Daten auslesen aus der DB könnte ich dann das:
    >>
    >>also erst halt zur DB Kontakt herstellen und das select und danach das:

    Die Reihenfolge ist hier relativ egal - siehe unten.

    >> $zutaten = '';
    >> if (isset($_REQUEST['zutat'])) {
    >> $zutaten = implode('
    ', $_REQUEST['zutat']);
    >> }
    >>
    >>einsetzen oder hab ich das falsch verstanden?

    schon korrekt.

    > müste ich dann nach dem select da vor dem $zutaten da eigentlich dann auch
    > noch dann array() verwenden oder merkt sich die MySQL-Tabelle das es ein
    > array ist der eingetragene Wert da?

    Die MySQL kann mit einem Array nichts anfangen, es ist ein String und soll es
    bleiben.

    > Also ich meine dann eben:
    >
    > also erst halt zur DB Kontakt herstellen und das select und danach das:
    >
    > hmm vielleicht sowas?
    >
    > $array = array($_REQUEST['zutat']);
    >
    > und zu guter letzt:
    >
    > $zutaten = '';
    > if (isset($_REQUEST['zutat'])) {
    > $zutaten = implode('
    ', $_REQUEST['zutat']);
    > }
    >
    > Oder wäre das jetzt totaller Mist? Ich wills ja lernen und verstehen und
    > nach Möglichkeit auch richtig machen ... - und zum Erlernen brauch ich halt
    > auch verständliche Beispiele ums zu verstehen.
    >
    > Viele Grüße
    >
    > Sascha
    >

    Dann versuch ich's mal :)

    Die [] im Namen der Input-Felder in der HTML-Seite signalisieren nur, dass die
    zu übertragenden Daten in einer Form übertragen werden, die PHP auf dem Server
    dann als Array abbilden kann. Ohne diese [] hinterm Namen bekommst Du nur den
    Wert eines Feldes mit diesem Namen als String:




    Sind jetzt beide Checkboxen gesetzt, hast Du in $_REQUEST['name'] entweder eins
    oder zwei stehen, aber nicht beide Werte. Der zuletzt $_REQUEST['name']
    zugewiesene Wert überschreibt den vorheigen.




    Schreibst Du das Formular mit [] hinternem Namen, enthält $_REQUEST['name']
    nicht mehr wie im vorigen Beispiel einen String, sondern ein Array. Sind beide
    Checkboxen gesetzt, hast Du ein Array mit zwei Elementen, ist nur eine gesetzt
    ein Array mit einem Element und ist keine Checkbox gesetzt, steht
    $_REQUEST['name'] nicht zur Verfügung.

    Die [], die Du im HTML hinter den Namen setzt, benötigst Du in PHP nicht.

    Um das Array jetzt in die DB zu bekommen, musst Du es in eine Form bringen, mit
    der die DB auch was anfangen kann. Ein Array kannst Du nicht direkt in eine DB
    einfügen, du brauchst einen String. Wenn in obigem Beispiel beide Checkboxen
    gesetzt wären, bekämst Du mit

    $zutaten = '';
    if (isset($_REQUEST['zutat'])) {
    $zutaten = implode('
    ', $_REQUEST['zutat']);
    }

    in $zutaten den String eins
    zwei, den kannst Du dann in die DB einfügen.

    Die Zuweisung

    $array = array($_REQUEST['zutat']);

    brauchst Du nicht, damit würdest Du $array als neues Array anlegen und im ersten
    Element das Array $_REQUEST['zutat'] ablegen. $_REQUEST['zutat'] ist bereits das
    Array, mit dem Du arbeiten kannst.

    Deine SQL würde dann folgendermaßen aussehen (nach obigem implode):

    $SQL = "INSERT INTO rezepte (zutat) VALUES ('".$zutaten."')";

    Noch eine Kleinigkeit: Man sollte natürlich nie (und ich meine wirklich nie,
    nie, nie) Daten ungeprüft an die DB übergeben - man kann nie wissen, wass da
    alles drin steht.

    Deswegen sollte jeder String, bevor er in die Datenbank eingefügt wird, bspw mit
    mysql_escape_string behandelt werden, das Ganze sähe dann bspw so aus:

    $zutaten = '';
    if (isset($_REQUEST['zutat'])) {
    $zutaten = implode('
    ', $_REQUEST['zutat']);
    $zutaten = mysql_escape_string($zutaten);
    }

    $SQL = "INSERT INTO rezepte (zutat) VALUES ('".$zutaten."')";

    Wann Du die DB-Verbindung herstellst, ist Dir überlassen, meist macht man es zu
    Anfang des Skriptes, dann kann man gleich aussteigen, wenn's nicht geklappt hat.
    Man sollte es auf jeden Fall machen, bevor man auf die DB zugreifen will :o)

    Grüße,

    Martin

    Re: Verständnisfrage: PHP-FAQ: 11.10. Wie kann man Checkboxen verarbeiten? in Verbindung mit MySQ

    am 27.08.2005 20:19:58 von Martin Kurz

    > Wie müste ich das dann machen, wenn ich die einzelnen Werte noch zusätzlich
    > irgendwie formatieren möchte (fett, kursiv oder was auch immer) oder als
    > Listenpunkte ausgeben möchte?
    >
    > z.B. so in etwa:
    >
    >

  • salami


  • >
  • pilze


  • >
  • sardellen



  • erstmal: das
    darf nicht hinter das , die Listenelemente haben default
    schon einen Umbruch. Allerdings müssen sie noch in ein
      ...
    (für
    1./2./...) bzw (für Punkte) eingepackt werden, sollte dann also so
    bspw aussehen:



    > dann müste die Formatierung schätze ich mal vor dem da erfolgen:
    >
    >
    > $zutaten = '';
    > if (isset($_REQUEST['zutat'])) {
    > $zutaten = implode('
    ', $_REQUEST['zutat']);
    > }
    >
    > oder seh ich das falsch? Also vor dem implode() oder?

    Eher in Kombination...

    > Hmm fragt sich jetzt nur noch wie ...? - wird langsam kompliziert irgendwie.
    >
    > Oder kann ich das so irgendwie machen?
    >
    > z.B.:
    >
    > $zutaten = '';
    > if (isset($_REQUEST['zutat'])) {
    > $zutaten = implode('
    ',
  • $_REQUEST['zutat']
  • );
    > }
    >

    Das geht in die Hose...

    $zutaten = '';
    if (isset($_REQUEST['zutat'])) {
    $zutaten = '';
    }

    Damit bekämst Du das gewünschte Ergebnis.

    > Habe mir auch schon im Internet die ein oder andere Seite durchgelesen wie
    > z.B. http://de.php.net/manual/de/function.implode.php aber so richtig finde
    > ich nicht die Infos wo ich suche ...

    Implode wandelt ein Array in einen String, wobei der String, der als erster
    Parameter angegeben wird, zwischen den einzelnen Arrayelementen eingefügt wird.
    Bei drei Elementen wird also zwischen erstem und zweitem und zwischen zweitem
    und dritten Element jeweils das
  • eingefügt.

    Allerdings gibt es ein kleines Problem: Wenn Du die Daten mit HTML formatiert in
    der DB ablegst, wird es natürlich kompliziert, später mal Änderungen am Layout
    vorzunehmen. Da Du ja jetzt schon Änderungen vornimmst, würde ich empfehlen, das
    DB-Design zu überdenken.

    Wenn die Daten in einem String vorliegen, wird es schwer, diese Daten wieder
    vernünftig bearbeitbar zu machen, bspw wenn Du die Zutatenliste zum Bearbeiten
    lädst, musst Du ja auch irgendwie erkennen, welche Zutaten-Checkboxen gesetzt
    sein sollen. Das bedeutet, bei dem aktuellen Design müsstest Du immer die aus
    der DB kommenden Strings parsen und vergleichen um rauszufinden, welche Zutaten
    verwendt werden - unelegant und fehleranfällig.

    Ein besseres DB-Design wäre folgendes:

    Tabelle Zutaten mit Spalte ID und Splate Zutat (jeweils ein Eintrag für Salami,
    Pilze, Sardellen etc)

    Tabelle Rezept mit Spalte ID und den restlichen Rezeptdaten

    Tabelle Zutaten_Rezept mit der Zuordnung der Zutaten zu den Rezepten mit zwei
    Spalten, RezeptID und ZutatID

    Die Zutaten bekommst Du dann auf folgende Weise:

    SELECT Zutaten.Zutat FROM Zutaten, Zutaten_Rezept WHERE
    Zutaten.ID=Zutaten_Rezept.ZutatID AND Zutaten_Rezept.RezeptID=...

    Für ... halt die ID des Rezeptes, zu dem Du die Zutaten wissen möchtest.

    Grüße,

    Martin

  • Re: Verständnisfrage: PHP-FAQ: 11.10. Wie kann man Checkboxen verarbeiten? in Verbindung mit MySQ

    am 29.08.2005 11:29:27 von do.not.REMOVETHAT

    Sascha Blum schrieb:

    > Wie könnte ich das hinterher oder beim übertragen in die DB erreichen, die
    > einzelnen values da etwas zu formatieren - z.B.
    >
    > wenn hinterher bei der Ausgabe die Werte so ausgegeben werden sollen:
    >
    > salami

    > pilze

    > sardellen

    >
    > oder so ähnlich oder mit anderen HTML-Formatierung ...

    Das solltest Du nicht beim übertragen in die Datenbank tun, sondern in
    dem Moment, in dem Du es zur Anzeige aus der Datenbank rausholst.

    Grüße, Matthias

    --
    http://www.trullala.de

    "Dieses E-Mail ist nur für die Mitteilung.
    Damit haben Sie keine Antwort zu machen."
    (Zitat aus einer dieser neumodischen Phisching-Mails)

    Re: Verständnisfrage: PHP-FAQ: 11.10. Wie kann man Checkboxen verarbeiten? in Verbindung mit MySQ

    am 30.08.2005 01:35:38 von Helmut Chang

    Sascha Blum schrieb:

    > Salami


    oder


    > Pilze


    oder


    > Sardellen

    oder


    > Wie könnte ich das hinterher oder beim übertragen in die DB erreichen, die
    > einzelnen values da etwas zu formatieren - z.B.
    >
    > wenn hinterher bei der Ausgabe die Werte so ausgegeben werden sollen:
    >
    > salami

    > pilze

    > sardellen

    >
    > oder so ähnlich oder mit anderen HTML-Formatierung ...
    >
    > Wenn da mal angenommen alle 3 ausgewählt wären und "zutat" dann an die DB
    > übertragen wird, dann müste dann doch im DB-Feld folgendes drin stehen:
    >
    > salamipilzesardellen

    Dann ist dein DB-Design kaputt. Zwischen Pizzen und Zutat/en/ besteht ja
    eine n:m-Relation.

    Also müsste vereinfacht dein DB-Modell so aussehen:

    CREATE TABLE Zutaten (
    IDZutat...,
    Bezeichnung...
    );

    CREATE TABLE Pizzen (
    IDPizza...,
    BestelltAm...
    ...
    );

    CREATE TABLE PizzaHatZutaten (
    IDPizza...,
    IDZutat...,

    FOREIGN KEY IDPizza REFERENCES Pizzen (IDPizza),
    FOREIGN KEY IDZutat REFERENCES Zutaten (IDZutat)
    );

    Wenn jetzt eine Pizza kreiert wird, trägst du zuerst die Pizza ein und
    besorgst dir die ID. Danach trägst du für jede Zutat, die gescheckt
    wurde, einen Datensatz in `PizzaHatZutaten` ein.

    Für die Ausgabe holst du dir dann für jede gewählte Zutat die
    entsprechende Bezeichnung aus der DB. Wobei im Falle, dass das RDBMS
    MySQL heißt und die Liste der möglichen Zutaten tatsächlich immer nur
    drei ist/bleibt, ENUM evtl. auch eine Möglichkeit wäre.

    gruss, heli

    Re: Verständnisfrage:PHP-FAQ: 11.10. Wie kann man Checkboxen verarbeiten? in Verbindung mit MySQL

    am 30.08.2005 15:01:26 von Sascha Blum

    Hallo Helmut, Hallo Leute,

    Helmut Chang wrote:

    >> Salami

    >
    > oder
    >
    >
    >> Pilze

    >
    > oder
    >
    >
    >> Sardellen
    >
    > oder
    >
    >
    >> Wie könnte ich das hinterher oder beim übertragen in die DB erreichen,
    >> die einzelnen values da etwas zu formatieren - z.B.
    >>
    >> wenn hinterher bei der Ausgabe die Werte so ausgegeben werden sollen:
    >>
    >> salami

    >> pilze

    >> sardellen

    >>
    >> oder so ähnlich oder mit anderen HTML-Formatierung ...
    >>
    >> Wenn da mal angenommen alle 3 ausgewählt wären und "zutat" dann an die DB
    >> übertragen wird, dann müste dann doch im DB-Feld folgendes drin stehen:
    >>
    >> salamipilzesardellen
    >
    > Dann ist dein DB-Design kaputt. Zwischen Pizzen und Zutat/en/ besteht ja
    > eine n:m-Relation.
    >
    > Also müsste vereinfacht dein DB-Modell so aussehen:
    >
    > CREATE TABLE Zutaten (
    > IDZutat...,
    > Bezeichnung...
    > );
    >
    > CREATE TABLE Pizzen (
    > IDPizza...,
    > BestelltAm...
    > ...
    > );
    >
    > CREATE TABLE PizzaHatZutaten (
    > IDPizza...,
    > IDZutat...,
    >
    > FOREIGN KEY IDPizza REFERENCES Pizzen (IDPizza),
    > FOREIGN KEY IDZutat REFERENCES Zutaten (IDZutat)
    > );
    >
    > Wenn jetzt eine Pizza kreiert wird, trägst du zuerst die Pizza ein und
    > besorgst dir die ID. Danach trägst du für jede Zutat, die gescheckt
    > wurde, einen Datensatz in `PizzaHatZutaten` ein.
    >
    > Für die Ausgabe holst du dir dann für jede gewählte Zutat die
    > entsprechende Bezeichnung aus der DB. Wobei im Falle, dass das RDBMS
    > MySQL heißt und die Liste der möglichen Zutaten tatsächlich immer nur
    > drei ist/bleibt, ENUM evtl. auch eine Möglichkeit wäre.


    mal eine kleine Rückfrage bezzgl. des Feldtypes ...

    .... bei meiner Geschichte wo ich gerade dran bin, gehts zwar nicht um Pizza,
    aber bleiben wir mal im Übungsschritt beim Pizza-Beispiel, das kann ja dann
    hinterher umbauen auf meine Sache da ...

    bei Tabelle Pizzen was meiner einen vorhanden Tabelle gerade entspricht habe
    ich den Feldtype: `id` int(11) NOT NULL auto_increment

    Wie sieht das aus, müste ich dann bei der Tabelle Zutaten dann den gleichen
    Feldtype verwenden, nur andere Bezeichnung geben z.B.:

    `idpizza` int(11) NOT NULL auto_increment,

    oder was verwendet man da schlauerweise und im besten Fall?

    Und wie müsten dann meine Checkbox(en) dann für dieses DB-Modell aussehen?

    z.B.:





    Und die Spalte in dieser Tabelle würde dann zutat heißen ...

    Hmmm jetzt kommt aber bei mir zugleich eine weitere Frage auf: Wie bringe
    ich nun die einzelnen Zutaten in meine Zutaten Tabelle?

    übergeb ich das per:

    $DatabasePointer=mysql_connect("mein_host", "user", "pw");
    mysql_select_db("meine_db", $DatabasePointer);

    $SQL = "INSERT INTO zutaten (idpizza, zutat) VALUES ('', '"
    $_REQUEST['zutat[]'].")";
    mysql_query($SQL, $DatabasePointer);

    Oder wie bekomm ich da die einzelnen Werte rein, getrennt von ein ander?

    Besten Dank vorab.

    Viele Grüße

    Sascha