Gute Idee für grosse Anzahl von Checkboxen?

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

  • Gute Idee für grosse Anzahl von Checkboxen?

    Hallo, freue mich, dieses Forum gefunden zu haben. Vielleicht kann mir jemand helfen:

    Ich hole aus einer DB eine Anzahl an Stichworten, bei denen vom User eine Auswahl getroffen werden kann. Diese Stichworte waren ursprünglich mal so viele, dass sie alphabetisch sortiert wurden. Jetzt habe ich gerade die Anzahl der Stichworte so stark verringert, das einige Buchstaben des Alphabets nicht mehr benötigt wurden, und habe folglich die Ausgabe verkleinert auf :

    PHP-Code:
    function keywordauswahl(){
    // Sammle aus der DB alle Stichworte, sortiert
                
    $allekeywordssql "SELECT * FROM keywords ORDER BY keyword";
    // Weise der var keywordsid das Ergebnis-Array der SQL-Abfrage zu
                
    $keywordsid mysql_query($allekeywordssql);
                while (
    $keyword mysql_fetch_row($keywordsid)){
                    
    $fieldname "keyword";
                    echo 
    "<input type='checkbox' name='$fieldname' value='$keyword[1]' class='input'> $keyword[0]<br>";
                }
                echo 
    "<input type='submit' name='senden'>"
    Aber die Liste ist doch immer noch so lang, dass es unmöglich aussieht. Sowas kann man einfach nicht auf der Seite haben... Jetzt brauche ich nur eine Idee, wie ich die Checkboxen irgendwie einigermassen nett anordnen kann...

    Weiß da jemand was?
    Danke schon mal, Miriam
    Zuletzt geändert von DiePicknickerin; 11.01.2006, 15:23.

  • #2
    Regeln lesen und umsetzen bitte, danke:
    http://www.php-resource.de/forum/sho...threadid=50454
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      OK, so besser?

      Kommentar


      • #4
        Entweder eine Blätterfunktion - was allerdings noch unschöner wäre - oder du überlegst dir eine andere Methode. Dazu kann ich leider nichts weiter sagen, weil ich nicht weiß, wie die Keywords so aussehen und was semantisch dahinter steckt.
        Vielleicht beginnen einige davon aber mit dem/den gleichen Buchstaben, dann könntest du "Prefix-Gruppen" bilden.

        Kommentar


        • #5
          Danke für deine Antwort!

          Es geht um Tätigkeiten, also so etwas wie "Anleitung", "Betreung", "Pflege", "Bedürftige", "Blindheit", "Fortbildung", und so weiter. Ich habe sonst kein weiteres Kriterium, da der Index einfach nur durchnummeriert ist und ausser den Stichworten nichts weiter in der Tabelle ist. Es kommt also eigentlich nur eine Menge (was weiss ich, sagen wir 10 pro Abschnitt oder so) oder eben so ein Prefix-Group in Frage, was Du meintest. Dann bliebe wieder nur ein Anfangsbuchstabe.

          Wie könnte man denn das ganze Alphabet rauslassen? Da würden nämlich so etwa 10 Buchstaben nicht besetzt sein...

          Eine Menge fände ich auch ganz schick, dann müsste ich einmal durchzählen lassen und dann je 10 davon ziehen, wie macht man sowas?

          Gruß, Miriam

          Kommentar


          • #6
            Nein, in diesem Fall würde ich keine Präfixgruppen bilden. Das geht eher bei Suchformularen, dein "Bedürftige" hat mit "Blindheit" zwar das B gemeinsam, aber eine völlig andere Bedeutung im Kontext der Anwendung.

            Wenn du wirklich so viele Begriffe hast, dann fasse sie wenn möglich zu Kategorien zusammen. Auf der Seite zeigst du nun erstmal nur die Kategorien, auf der nächsten die Begriffe der Kategorien, die der User ausgewählt hat. Wenn es dir schwerfällt, die Begriffe zu kategorisieren, dann lass es lieber, denn dann wird der User nämlich nicht ahnen, was sich hinter den einzelnen Kategorietiteln verbirgt.

            Wie lang ist die Liste denn, wieviele Keywords?

            Kommentar


            • #7
              hmm... mit mehreren Spalten kann man ja auch arbeiten..
              Hochachtungsvoll
              pingzaong

              Kommentar


              • #8
                Zur Zeit sind es 57 Stichwörter, aber das bleibt wohl nicht bis in alle Ewigkeit so...

                Und Kategorien habe ich eben auch nicht, da das nicht so einfach ist...

                Am einfachsten fände ich ja das durchzählen...

                Also etwa so:

                PHP-Code:
                $count count($rows);
                $count--;
                $i 10;
                while (
                $i <= $count) {
                 echo 
                "$row[$i] <br>";
                $i 10//Zähler nach Durchlauf erhöhen

                Oder doch was anderes? Und außerdem:
                Welche html-elemente könnte ich denn so schachteln, dass sie nebeneinander gesetzt werden ?

                Danke schon mal, dass ihr euch damit beschäftigt habt!

                Kommentar


                • #9
                  Original geschrieben von DiePicknickerin
                  Welche html-elemente könnte ich denn so schachteln, dass sie nebeneinander gesetzt werden ?
                  Lass mal einfach das <br> weg ... bzw. schreib es nur alle modulo x Iterationen.

                  Kommentar


                  • #10
                    jetzt schlagt mich nicht, aber hier für bietet sich eine tabelle an....
                    2 meiner pages:

                    Kommentar


                    • #11
                      Danke erstmal, das sind wohl schon genug Anregungen für diesen Abend

                      Da muss ich wohl etwas rumprobieren, um das rauszukriegen. Schönen Abend noch!

                      Gruß, Miriam

                      Kommentar


                      • #12
                        Ich checks einfach nicht. Das kommt davon, wenn man mal eben schnell was machen will, aber das nie so richtig von Grund auf gelernt hat...

                        Also mein obiges Problem mit den Checkboxen...

                        Sorry für den länglichen Code nochmal, aber es ist glaube ich ein Schreibfehler...

                        PHP-Code:
                        $allekeywordssql "SELECT * FROM keywords ORDER BY keyword";
                        $keywordsid mysql_query($allekeywordssql); //Ergebnis aus DB
                        echo "<p><table><tr>";
                        while (
                        $keyword mysql_fetch_row($keywordsid)) //Anzahl der Datensätze
                            
                        {
                            
                        $fieldname "keyword"//Einfach benennen für die Übergabe ans Form
                            
                        $y count($keyword); //zählen
                                
                        for ($x=0;$x<$y;$x+=5) {
                        //echo "<input type='checkbox' name='$fieldname' value='$keyword[1]' class='input'> $keyword[0]"; 
                        Ausgabe klapptaber nur in langer Liste...
                        //Der Versuch, das nun in die Table zu packen:
                        echo "<tr><td><input type='checkbox' name='$fieldname
                        value='
                        $keyword[1][$x]' class='input'>$keyword[0][$x]</td>
                        <td><input type='checkbox' name='
                        $fieldname' value='$keyword[1][$x+1]' class='input'>$keyword[0][$x+1]</td>
                        <td><input type='checkbox' name='
                        $fieldname' value='$keyword[1][$x+2]' class='input'>$keyword[0][$x+2]</td>
                        <td><input type='checkbox' name='
                        $fieldname' value='$keyword[1][$x+3]' class='input'>$keyword[0][$x+3]</td>
                        <td><input type='checkbox' name='
                        $fieldname' value='$keyword[1][$x+4]' class='input'>$keyword[0][$x+4]</td>";
                                  echo 
                        "</tr></table>"
                        Die DB ist supereinfach mit keyword (Text Stichwort), keywordID, mehr nicht. Feld 0 ist das Stichwort, Feld 1 ist die ID.

                        Tja, irgendwie wird es nicht richtig übergeben, was ich da zähle. In der Ausgabe habe ich immer mein Stichwort aus der Tabelle mit angehängtem [0+4], etc... anstatt der korrekt hochgezählten keyword-Id und dem passenden Eintrag aus der keyword-Spalte der DB. Wie macht mans richtig? Soweit entfernt kann ich ja gar nicht sein, oder? - Die Geschweiften Klammern sind übrigens korrekt zu. Das nur dazu.
                        Das $keyword[0]zählt sich jedenfalls nicht hoch mit dem $x+4 (oder n), das bleibt einfach, wie es ist und schreibt mir die Var $x einfach daneben raus, als ob die nicht dazugehört...

                        Kann bitte jemand noch mal helfen?
                        Gruß, Miriam

                        Kommentar


                        • #13
                          Entweder gibst du den Checkboxen verschiedene Namen oder (besser!):

                          echo "<input type='checkbox' name='{$fieldname}[]' ...>";

                          Kommentar


                          • #14
                            Danke, Du Nerd, dass du bei mir geblieben bist... Wir kommen der Sache schon noch näher...

                            Nochmal etwas Code: So sieht es jetzt aus:
                            PHP-Code:
                            while ($keyword mysql_fetch_row($keywordsid)) //Anzahl der Datensätze
                                
                            {
                                
                            $fieldname "keyword";
                                
                            $y count($keyword);
                                    for (
                            $x=0;$x<$y;$x+=5) {

                                  echo 
                            "<tr><td><input type='radio' name='{$fieldname}[]' value='$keyword[1][$x]' class='input'>$keyword[0]<td>
                            <td><input type='radio' name='
                            {$fieldname}[]' value='$keyword[1][$x+1]' class='input'>$keyword[0]</td>
                            <td><input type='radio' name='
                            {$fieldname}[]' value='$keyword[1][$x+2]' class='input'>$keyword[0]</td>
                            <td><input type='radio' name='
                            {$fieldname}[]' value='$keyword[1][$x+3]' class='input'>$keyword[0]</td>
                            <td><input type='radio' name='
                            {$fieldname}[]' value='$keyword[1][$x+4]' class='input'>$keyword[0]</td>";}
                                      echo 
                            "</tr></table>";}                        
                                    echo 
                            "<a name='bottom'></a><input type='submit' name='senden'>"
                            Und dann sieht die Ausgabe so aus:
                            Anleitung Anleitung Anleitung Anleitung Anleitung AusbildungAusbildungAusbildungAusbildungAusbildung
                            AuslandshilfeAuslandshilfeAuslandshilfeAuslandshilfeAuslandshilfe

                            Jeweils mit dem Radio-Button davor. Das habe ich zwischendurch geändert, als mir klar wurde, dass ich teilweise massig Ergebnisse untereinander schachteln muss und das genauso ekelig wird wie das hier... Jetzt soll also nur eine Auswahl getroffen werden. Aber wieso macht er brav jedes Keyword 5 x und zählt nicht hoch???

                            Kommentar


                            • #15
                              Überleg mal, was du da machst, Testausgaben helfen dabei!

                              Mit mysql_fetch_row() holst du dir eine Zeile aus der Tabelle in einen Array.
                              Nun setzt du $y auf die Anzahl Elemente des Arrays. Das sind immer gleich viele, nämlich die Anzahl der Spalten der Tabelle.
                              Jetzt läuft die for-Schleife von 0 bis $y, gibt dabei $keyword[1][$i] aus (value der Checkboxen), obwohl $keyword nur ein eindimensionales Array ist. Ferner werden bei jeder Iteration 5 Checkboxen ausgegeben, aber zu allen der Wert von $keyword[0].

                              So und diesmal servier ich keine Lösung!
                              Zuletzt geändert von onemorenerd; 12.01.2006, 08:18.

                              Kommentar

                              Lädt...
                              X