Checkbox Auswahl auflisten

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

  • Checkbox Auswahl auflisten

    Hallo,

    vorerst eine Grundsatzfrage zu php und mysql:

    Ich möchte auf einer Seite mittels Checkboxen
    mehrere Möglichkeiten auswählen können, z.B.

    X Auswahl 1 X Auswahl 2 X Auswahl 3
    X Auswahl 4 X Auswahl 5 X Auswahl 6

    Danach sollen die angekreuzten Auswahlmöglichkeiten
    lückenlos, untereinander auf einer anderen Seite angezeigt werden, z.B.

    Auswahl 2
    Auswahl 4
    Auswahl 5

    Muß ich für jede Auswahlmöglichkeit in der MySql Tabelle
    eine Spalte anlegen oder kann man das irgendwie mit
    einem Array machen?

  • #2
    Mein Vorschlag:

    HTML Formular:
    Code:
    <form method="post" action="script.php">
    Checkbox0: <input type="checkbox" name="checkbox[0]" value="Ja"><br>
    Checkbox1: <input type="checkbox" name="checkbox[1]" value="Ja"><br>
    Checkbox2: <input type="checkbox" name="checkbox[2]" value="Ja"><br>
    Checkbox3: <input type="checkbox" name="checkbox[3]" value="Ja"><br>
    <input type="submit" value="absenden">
    </form>
    script.php
    PHP-Code:
    if(is_array($_POST['checkbox']))
    {
    while(list(
    $key,$val)=each($_POST['checkbox'])) echo "Checkbox $key$val<br>";
    }
    else echo 
    "Keine Checkbox markiert"
    [color="#334D7B"]"Los, lass uns loslegen! Hm ? Quatschen können wir hinterher immer noch!"[/color]
    [color="#9C5245"]"Aber Bommel, wir können jetzt nicht bumsen. Wir müssen doch erst den Kindern - ... "[/color]
    [color="#334D7B"]"Ja ja ja. Du willst immer nur das Eine. Buchstabenzeigen, Buchstabenzeigen - meine Gefühle sind dir wohl scheißegal."[/color]

    © Harald Schmidt

    Kommentar


    • #3
      Meine Lösung setzt voraus, das es nur darum geht, die Auswahl zu speichern und wieder anzuzeigen. Die folgende Lösung ist nicht zu empfehlen wenn die Daten bei einer späteren Abfrage mit Werten verglichen werden müssen ! (z.B.: hole alle Einträge wo Auswahl auf 2 gesetzt)

      Speichere die Auswahl als String in nur ein DB-Feld. Damit bist Du von der Anzahl der Auswahlmöglichkeiten unabhängig und musst nicht die Tabelle erweitern oder kürzen.
      PHP-Code:
      // per POST gesendete vars aus checkboxen
      // $check2=2;
      // $check4=4;
      // $check5=5;

      $auswahl=$check2."_".$check4."_".$check5;

      // String ist dann vom Format: "2_4_5";

      UPDATE options SET auswahl '$auswahl';

      Wenn die Auswahl aus der DB gelesen wurdesteht wieder der String "2_4_5" zur Verfügung.

      // auseinander nehmen

      $auswahl_array=explode("_"$db_auswahl); 
      Naja, der Rest wird sicher klar sein ?!

      taratus

      Kommentar


      • #4
        Vielen Dank für die Antworten,
        bevor ich jetzt damit anfange:

        Es handelt sich um ein Eingabeformular für das
        Profil von Usern in einem Forum. Die Listenfelder
        die ich habe (immer nur eine Auswahlmöglichkeit)
        werden in die Datenbank abgespeichert, damit man
        beim Aufruf später diese wieder abrufen kann.

        Die mehreren Auswahlmöglichkeiten müssten somit
        doch auch per 'UPDATE xxx SET' irgendwie in die
        Datenbank.

        Bei dem 1. Beispiel ist das doch nicht der Fall??
        Ist da für jede Auswahl eine Spalte angelegt?

        Bei dem 2. Beispiel ist der Rest doch nicht so klar.

        Heiner

        Kommentar


        • #5
          Wenn Deine Anwendung so aussieht, ist mein Vorschlag sehr praktikabel.
          Du hast ja eine Tabelle User, in der der Name und das Passwort des Users steht. In einer weiteren Spalte (einstellungen/optionen/auswahl o.ä.) kannst Du nun den o.a. String schreiben.

          Wenn der String wie o.a. ausgelesen wurde und in das Array $auswahl_array aufgespalten wurde, kannst Du in einer Schleife die Auswahlmöglichkeiten listen:
          PHP-Code:
          for ($i=0$i<count($auswahl_array); $i++) {
              echo 
          auswahl_array[$i]."<br />"

          Jetzt wird aber aus Auswahl nur angezeigt:

          2
          4
          5

          Um die Auswahl zu "übersetzen" müssen die Integers mit einem "Übersetzungsarray" verglichen werden.
          (Um diese Prozedur zu vermeiden, könnte man in die DB statt "2_4_5" auch gleich "auswahl2_auswahl4_auswahl5" schreiben. Musste selbst entscheiden!)
          Dieses Auswahlarray kannst Du im Script definieren oder auch aus der DB lesen (wenn Du dafür eine Tabelle angelegt hast).
          Bei nur wenigen Auswahlmöglichkeiten, die sich auch vorausichtlich nicht ändern werden / wenig ändern werden, genügt es, wenn Du ein Array im Script definierst.
          PHP-Code:
          $trans_auswahl = array ("auswahl1""auswahl2""auswahl3""auswahl4""auswahl5", );

          Dieses Array müsst Du nun noch in die Schleife basteln:

          for (
          $i=0$i<count($auswahl_array); $i++) {
              echo 
          $trans_auswahl[$auswahl_array[$i]-1]."<br />";

          Jetzt sollte das angezeigt werden:

          auswahl2
          auswahl4
          auswahl5


          taratus

          Kommentar


          • #6
            Schlag mich gerade mit nem ähnlichen Thema rum...ist ein Kreuz.

            Also, falls die Auswahl von Checkboxen für jedes Mitglied gleich ist, würd ich eine Tabelle machen in der in der einen Spalte die Usernr und in der anderen die Checkboxnr gespeichert wird. Checkbox allerdings nicht als String sondern als einzelne Position. Daduch steht dann die Usernr immer vor den einzelnen Checkboxnr in der Tabelle.

            Somit kriegst du schnell über eine DB Abfrage alle Checkboxen mit den gecheckten raus.

            Habs auch schon mit Strings probiert, die direkt in der Tabelle User hängen. War aber umständlicher. Zumindest für mich als PHP-Beginner

            Grüße
            alex
            na lecker...
            alex

            Kommentar


            • #7
              Hallo,

              es ist schon nicht einfach.

              Habe das mit array und string nicht hinbekommen und
              mich deshalb entschieden für jede Checkbox eine extra
              Spalte zu machen.

              Jetzt schaffe ich es beim 1. Versuch den angeklickten Wert
              in die Datenbank zu schreiben, wenn ich das Userprofil
              jedoch wieder aufrufe dann ist die Box nicht mehr markiert.
              Irgendwie muß jetzt 'selected' oder ähnlich wieder definiert
              werden.

              Kann da noch mal jemand helfen?
              Vielleicht ein 1:1 Beispiel des HTML und PHP Codes?
              Komme da nämlich leider gar nicht weiter.

              Gruß
              Heiner

              EDIT

              Habe das mit dem Select hinbekommen, jedoch muß
              ja im script dann für jede Spalte eine Abfrage gemacht werden.

              Eine Spalte heißt dann z.B. 'Auswahl1'


              <td><input type="checkbox" name="user[auswahl1]" value="1" $test>auswahl1</td>

              if( $user['auswahl1'] == 1 )
              {
              $test = " checked";
              }


              Und dann müssten die Werte der Spalten noch in
              ein Array gepackt werden, damit sie lückenlos
              untereinander aufgeführt werden??

              Ich würde auf insgesamt ca. 50 Auswahlmöglichkeiten kommen,
              belastet das nicht die Geschwindigkeit?

              Lieber wäre mir ja eine Spalte mit ARRAY, aber
              da habe ich Probleme.
              Zuletzt geändert von Heiner; 16.09.2002, 11:44.

              Kommentar


              • #8
                Hi Heiner,

                meine Checkbox Geschichte hat ein Ende gefunden....
                Das array beinhaltet alle gecheckten Eigenschaften der User, falls ich dein Thema richtig versteh. Die Spalte Eigenschaften würd ich direkt in die Tabelle user einfügen.

                Stop the FRUST!!!


                Tät Checkboxen so abfragen:


                while($dswzg=mysql_fetch_array($datensätze))
                {
                foreach($array as $w)
                {
                if ($w == $ds[user])
                {
                $ok = 'checked';
                }
                }
                echo "<tr>
                <td align=center>$ds[user1]</td><td><input type=checkbox name=user[] value=$ds[user2] $ok></td></tr>";
                $ok='';
                }
                na lecker...
                alex

                Kommentar


                • #9
                  Hallo,

                  bin da jetzt ziemlich umständlich hingekommen,
                  für jede Auswahl eine Datenbankspalte mit 0 oder 1
                  die dann so ausgegeben werden:

                  if( $user['auswahl1'] == 1 )
                  {
                  $user['auswahl1'] = "auswahl1";
                  }
                  else
                  {
                  $user['auswahl1'] = "";
                  }

                  Das Problem:

                  Wenn einige Boxen nicht aktiviert sind werden die
                  Auswahlmöglichkeiten nicht lückenlos aneinandergereiht.

                  z.B.

                  Auswahl1

                  Auswahl3
                  Auswahl4

                  Auswahl6

                  Wie könnte man das jetzt noch lösen?

                  Kommentar


                  • #10
                    ich gebe auch wieder alle checkboxen aus, deshalb ist der input-tag auch außerhalb der Schleife und er if Bedingung.

                    Die while Schleife umfasst alle Checkboxen, bei mir 7 Stück. werden auch problemlos wieder ausgegeben.
                    gruß
                    na lecker...
                    alex

                    Kommentar

                    Lädt...
                    X