CheckBoxen Auswerten

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • CheckBoxen Auswerten

    Ich habe 2 Fragen zum Thema Auswerten von Checkbox. Ist etwas schwer zu erklären aber ich versuchs ^^.

    Ich habe eine Bibliothek Datenbank-System erstellt mit den Tabellen "Buch", "Kunde", und "Ausleihe".

    Es gibt eine Seite mit einem Formular, wo Kunden sich "anmelden" sollen. Neben Persönliche Daten, wie Vorname, Name, ..., soll der Kunde auch (optional) seine lieblings BuchKategorie wählen können(wie z.B. Komödie, Drama, Thriller...)

    Das Formular verweist auf action=kunde_speichern.php, methode=post,
    wo die eingegebenen Daten überprüft werden und anschliessen, nach dem sie in die DB hinzugefügt worden sind, in eine Tabelle dem neu angemeldeten Kunden gezeigt werden.
    Diese Tabelle hat 2 Spalten. In der 1. Spalte stehen die Attribute wie Vorname, Name, Strasse, HausNr etc... und in der 2. Spalte stehen die Daten die eingegeben wurden bzw. nich eingegeben wurden (wenn nicht dann steht da "nicht angegeben").

    Jetzt hat man als letztes 3 Kategorien gewählt (zB. Action, Thriller, Krimi). Nach der erfolgreichen Überprüfung des Formulars, werden die Daten wieder aufgelistet.

    Nun komm ich zum Problem:
    in der 2. Spalte der letzten Zeile, wo die angeklickten Kategorien angezeigt werden müssen, entsteht plötzlich für jede gewählte Kategorie eine Spalte. Also für die das Beispiel oben 3 Spalten. SOmit erstreckt sich auch die Tabelle und sieht nicht schön aus.
    Wie kann ich das verhindern und diese so gestalten dass er zB. 3 neben einander hat dann Zeilenumbruch macht und wieder 3 dann nochmal Zeilenumbruch und wieder 3...

    Hier ist der Teil von kunde_speichern.php:
    PHP-Code:
    <?php  

    $notgiven 
    "nicht angegeben"
    ...                
                       echo 
    "<tr>"

                        echo 
    "<td width=99 height=25 align=right bgcolor=#FFFF99><font face=tahoma size=2><b>Favoriten:</b></font></td>"
                        if (
    $_POST[buchkat] == FALSE
                        { 
                        echo 
    "<td width=320 height=25 align=left bgcolor=#00FFFF><font face=tahoma size=2>$notgiven<br></font></td>"
                         
                        } 
                        else { 

                        foreach (
    $buchkat as $elem) { 

                        echo 
    "<td width=320 height=25 align=left bgcolor=#00FFFF><font face=tahoma size=2>$elem<br></font></td>"
                                                    } 
                             } 
                    echo 
    "</tr>"

                echo 
    "</table>"


    mysql_close($conn); 

    ?>
    Die 2. Frage ist wie realisiere ich, dass er in der Datenban, also phpMyAdmin, diese anzeigt. Weil da in der Spalte Favoriten steht das Wort Array und nicht die gewählten Buchkategorien...


    VIELEN DANK für eure antworten...

  • #2
    Hallo nochmal.

    Also ich habe es rausgekrigt, dass er mir die Sachen nur in eine Spalte ausgibt. Jetzt habe ich habe das Problem, dass er, wenn ich z.B. 3 Checkboxen angeklikt habe, diese 3mal hintereinander ausgibt: also stehen da 9 Elemente.

    Wie kann ich das realisieren dass er mir die angeklickten checkboxen nur einmal aus gibt?

    jetzt sieht der Code so aus:

    PHP-Code:

                    
    echo "<tr>";

                        echo 
    "<td width=99 height=25 align=right bgcolor=#FFFF99><font face=tahoma size=2><b>Favoriten:</b></font></td>";
                        if (
    $_POST[buchkat] == FALSE)
                        {
                        echo 
    "<td width=320 height=25 align=left bgcolor=#00FFFF><font face=tahoma size=2 color=#FF0000>$notgiven<br></font></td>";
                        
                        }
                        else {

                        echo 
    "<td width=320 height=25 align=left bgcolor=#00FFFF><font face=tahoma size=2>";

                        foreach (
    $buchkat as $elem) {

                        
    $trennung implode(","$buchkat);
                        
                        echo 
    "$trennung";

                          }
                        echo 
    "<br></font></td>";


                        }
                    echo 
    "</tr>";

                echo 
    "</table>"

    Kommentar


    • #3
      Original geschrieben von Flash Blaster


      [PHP]

      foreach ($buchkat as $elem) {

      $trennung = implode(",", $buchkat);

      echo "$trennung";

      }
      Entweder foreach, oder implode. Eins reicht. Implode ist praktischer.
      ich glaube

      Kommentar


      • #4
        @ ministry: DANKE hat natürlich geklappt

        Jetzt ist zum Thema ein weiteres Problem folgende:

        Wie kann ich es realisieren, dass er die angeklickten Checkboxen im phpMyAdmin Datenbank, in der Tabelle "Kunde" anzeigt?

        Weil da in der Spalte "Favoriten" steht immer das Wort "Array" statt die gewählten werte der buchkat...

        Kommentar


        • #5
          Im PMA steht "Array" drin? Dann machst du grundlegend was verkehrt - du darfst natürlich nicht das Array auf einmal, sondern musst jeden Wert einzeln abspeichern.

          Und hinzu kommt, dass du versuchst, mehrere Werte in eine Spalte abzuspeichern, was schlechtes Datenbankdesign bedeutet.

          Kurz erklärt: Du brauchst noch zwei weitere Tabellen. Eine für die "Kategorien", und eine "lookup"-Tabelle zum Nachschlagen, wo die Benutzer-id und die Kategorie-ID drinsteht.
          ich glaube

          Kommentar


          • #6
            Achso...

            Ich hab ja erst seit kurzem mit PHP angefangen ^^

            Danke aber für den Tipp, ich werde es versuchen. Ich hoffe ich krieg das hin.

            Also du meinst ich soll eine Tabelle Kategorie erstellen mit eine ID und die Kategorien und eine Tabelle lookup wo die KategorieID und BenutzerID drin sin?

            also soll die lookup ID nur die 2 attribute haben ?

            Und nochwas:

            in der kunde_eingeben.php steht INSERT INTO Kunde...

            Wo müssen also die Auswertung der checkboxen hin, wenn ich dafür eine eigene Tabelle mache?
            Zuletzt geändert von Flash Blaster; 13.05.2007, 21:50.

            Kommentar


            • #7
              So ich habe jetzt 2 neue Tabellen erstellt:

              Kategorie mit 16 Felder:

              1. CID Typ=INT, Länge=5, Primärschlüssel, auto_increment

              2. Abenteuer, VARCHAR, 60

              3. Action, VARCHAR, 60
              ...
              16. Thriller, VARCHAR, 60
              _________________

              Lookup mit 3 Felder:

              1. KID, INT, 5, Primärschlüssel (KID für KundenID)

              2. CID, INT, 5 (CID für KategorieID)

              3. Kategorien, VARCHAR, 150
              ____________________

              ist das so wie du es meinest?
              wenn ja wie muss ich denn jetzt fortfahren? (die Fragen von vorherige Antwort^^)

              Kommentar


              • #8
                ähm, nicht ganz...

                ich meinte es ungefähr so:

                Code:
                Tabelle Kategorien 
                (2 Felder, int primary key auto increment und varchar)
                
                kat_id     kat_name
                1           Thriller
                2           Liebesroman
                3           Sachbuch
                ...
                
                Tabelle Buch
                
                buch_id    name    kategorie   (... weitere Spalten)
                1          xyz      1
                1          abc      2
                
                Tabelle Benutzer 
                
                benutzer_id   name   
                1               hans
                2               klaus
                
                tabelle Favoriten
                
                benutzer_id    kategorie_id
                1                3
                2                1
                2                2
                Das bedeutet dann, dass Hans nur Sachbücher mag, während Klaus auf Thriller und Liebesromane steht. Außerdem kann man die Bücher so viel einfacher zuordnen.

                Selbes Prinzip übrigens natürlich mit Autoren usw - wenn du in die Buchtabelle jedesmal den Namen eines Autors reinschreibst, kriegst du sehr schnell Probleme, weil es mal so mal so geschrieben ist.

                Also eine Tabelle Autoren, und in die Buchtabelle gehört dann nur die ID des Autoren.
                ich glaube

                Kommentar


                • #9
                  Ja , aber wie mache ich dass, wenn ein Kunde 2 oder 3 Kategorien wählt, wie muss das dann in der Tabelle Favoriten aussehen?

                  Hab jetzt folgendes:

                  Code:
                  Kategorie: Kat_ID: INT(5), auto_increment,Primary key; Kategorie: VARCHAR(20)
                  
                  Kat_ID    Kategorie
                  1             Abenteuer
                  2             Action
                  3             Biographie
                  ...            ...
                  ------------------------------
                  
                  Favoriten: KID: INT(5), Primary Key; Kat_ID: INT(5)
                  
                  KID         Kat_ID
                  
                  -----------------------------
                  Ist das Korrekt so?

                  Außerdem, ich will nich dass in Buch Tabelle auch eine Spalte für Kategorie ist. Der Kunde soll nur wählen welche Kategorien seine Favoriten sind.

                  Und dies soll dann ausgegeben werden können. ZB. soll man wählen können Welche Kunde welche Favoriten hat...
                  Also ich meine so mit namen und nich mit Nummern...

                  Kommentar


                  • #10
                    Zuordnungen, was zu wem gehört, macht man immer über die ids, nicht über die namen.

                    In der Tabelle Kategorien stehen doch die Namen, da kannst du sie ja abholen bei bedarf.

                    Wenn ein Kunde mehrere Favoriten hat, dann steht er da mehrmals drin - siehe mein Beispiel mit "Klaus".

                    Wenn die Bücher keine Kategorie haben sollen, dann versteh ich allerdings nicht ganz was das mit den Favoriten soll.
                    ich glaube

                    Kommentar


                    • #11
                      hehe...Ja das ist einfach nur für InfoKurs. Das ist nicht so wichtig...

                      Das ist so wie in Physik: Da lässt man manchmal bei der Berechnung auch einige Faktoren raus wie Luftreibung, oder Luftwiderstand...^^

                      OK... Soweit geschafft...und DANKE³

                      Wie bringe ich das Ganze in dem Script?

                      Wenn der Kunde auf der AnmeldeSeite ist dann trägt er seine Daten ein...
                      und als letztes ist plötzlich noch so ein Auswahlsystem, wo er eine oder mehrere Sachen wählen kann.

                      Jedoch klappt das ja nicht mit dem INSERT INTO Kunde (...) VALUES (...);
                      Weil ja die Kategorien eine eigene Tabelle haben...

                      muss man 2 scripts schreiben und de irgendwie verknüpfen... oder ein INSERT INTO Favoriten... direkt nach INSERT INTO Kunde einbauen...
                      oder wie muss man da vorgehen???

                      Kommentar


                      • #12
                        Original geschrieben von Flash Blaster
                        hehe...Ja das ist einfach nur für InfoKurs. Das ist nicht so wichtig...

                        Das ist so wie in Physik: Da lässt man manchmal bei der Berechnung auch einige Faktoren raus wie Luftreibung, oder Luftwiderstand...^^
                        äh, aha, na wenns denn trotzdem nachher noch alles stimmt...
                        muss man 2 scripts schreiben und de irgendwie verknüpfen... oder ein INSERT INTO Favoriten... direkt nach INSERT INTO Kunde einbauen...
                        oder wie muss man da vorgehen???
                        Letzteres
                        ich glaube

                        Kommentar


                        • #13
                          also muss ich das so machen?

                          PHP-Code:

                          $kunden_daten 
                          "INSERT INTO `Kunde`(
                          Vorname,
                          Name,
                          Strasse,
                          HausNr,
                          PLZ,
                          Ort,
                          TelefonNr,
                          Geburtsdatum,
                          Geschlecht,
                          Email
                          )
                          VALUES(
                          '
                          $_POST[vname]',
                          '
                          $_POST[nname]',
                          '
                          $_POST[str]',
                          '
                          $_POST[hausnum]',
                          '
                          $_POST[plzahl]',
                          '
                          $_POST[ort]',
                          '
                          $_POST[tel]',
                          '
                          $_POST[geb]',
                          '
                          $_POST[geschlecht]',
                          '
                          $_POST[mail]'
                          );"
                          ;

                          $fav_auswahl "INSERT INTO `Favoriten`(
                          Kat_ID,
                          )
                          VALUES(
                          '
                          $_POST[buchkat]'
                          );"
                          ;

                          $k_res mysql_query($kunden_daten) OR die(mysql_error());
                          $f_res mysql_query($fav_auswahl) OR die(mysql_error()); 
                          ach ja und der HTML-Code für Checkboxen sieht so aus:

                          Code:
                                <td>
                                <font face="Tahoma" size="2">
                                <input type="checkbox" name="buchkat[]" value="Abenteuer">Abenteuer<br>
                                <input type="checkbox" name="buchkat[]" value="Action">Action<br>
                                <input type="checkbox" name="buchkat[]" value="Biografie">Biografie<br>
                                <input type="checkbox" name="buchkat[]" value="Drama">Drama<br>
                                <input type="checkbox" name="buchkat[]" value="Erotik">Erotik</td>
                                </font>
                          
                                <td>
                                <font face="Tahoma" size="2">
                                <input type="checkbox" name="buchkat[]" value="Fantasy">Fantasy<br>
                                <input type="checkbox" name="buchkat[]" value="Kinderbuch">Kinderbuch<br>
                                <input type="checkbox" name="buchkat[]" value="Kochbuch">Kochbuch<br>
                                <input type="checkbox" name="buchkat[]" value="Komödie">Komödie<br>
                                <input type="checkbox" name="buchkat[]" value="Krimi">Krimi</td>
                                </font>
                          
                          
                                <td>
                                <font face="Tahoma" size="2">
                                <input type="checkbox" name="buchkat[]" value="Novelle">Novelle<br>
                                <input type="checkbox" name="buchkat[]" value="Roman">Roman<br>
                                <input type="checkbox" name="buchkat[]" value="Sachbuch">Sachbuch<br>
                                <input type="checkbox" name="buchkat[]" value="Science-Fiction">Science-Fiction<br>
                                <input type="checkbox" name="buchkat[]" value="Thriller">Thriller</td>
                                </font>
                          Wenn das falsch ist, wie müsste es denn aussehen

                          Kommentar


                          • #14
                            das ist falsch. und warum das falsch ist, findest du heraus, indem du dir die query mal vor dem ausführen ausgeben lässt.

                            Kommentar


                            • #15
                              da steht Query was empty

                              wie muss ich das denn richtig machen??

                              was muss ich denn ändern ???
                              Zuletzt geändert von Flash Blaster; 14.05.2007, 00:57.

                              Kommentar

                              Lädt...
                              X