Michael: Checkboxen verarbeiten

Hallo,

es geht um die checkbox Verarbeitung in eine DB

Bsp.
...
$sql= "INSERT INTO ".$table." VALUES (NULL,'".date('Y-m-d H:m:s')."','$name','$ort','$plz','$test')";
mysql_query($sql);
...
<input type="checkbox" name="test[0]" value="Test 1">Test 1
<input type="checkbox" name="test[1]" value="Test 2">Test 2
<input type="checkbox" name="test[2]" value="Test 3">Test 3
...

Problem: In der Datenbank unter test, also wenn ich vorher im Formular einer diesen 3 Werte auswähle, bekomme ich nur "Array" (anstatt "Test 1" z. B.)

Wie schaffe ich es hier diese Werte in die DB zu schreiben ?
Test 1, Test 2,....

Danke.
Michael

  1. Hallo Michael,

    Problem: In der Datenbank unter test, also wenn ich vorher im Formular einer diesen 3 Werte auswähle, bekomme ich nur "Array" (anstatt "Test 1" z. B.)

    php sagt dir doch schon, was du da hast - ein Array :-)
    dazu vielleicht noch ein Link: http://www.php.net/manual/de/language.types.array.php.

    Wie schaffe ich es hier diese Werte in die DB zu schreiben ?
    Test 1, Test 2,....

    in test[1] steht 'Test 1' in test[2] steht 'Test 2' usw. (aber nur, wenn die Checkboxen angeklickt wurden)

    Grüße aus Nürnberg
    Tobias

    --
    sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
    (Selfcode -> http://emmanuel.dammerer.at/selfcode.html)
    1. Danke für die schnelle Antwort Tobias.

      Schöne Beschreibung für Array auf php dot net.
      Nochmal wie kann ich das realisieren dass in in meinem test in der DB: Test 1 Test 2... einfügen kann ?

      Sonst muss ich für jeden einzelnen Wert eigene Spalte anlegen, dass macht kein Spass, deshalb sollen ja diese Arrays mir diese Arbeit erleichtern, Frage war nur wie ?

      1. Hallo Michael,

        Nochmal wie kann ich das realisieren dass in in meinem test in der DB: Test 1 Test 2... einfügen kann ?

        verstehe ich das richtig, du willst die value=""s der markierten Checkboxen eintragen?
        dann verwende nicht name="test[1]" sondern überall name="test[]" (ohne Zahl), dann nimmst du den Array $test und "klebst" den mit implode()[1] zusammen, also etwa so:
        $wertfuerdb = implode(" ",$name);
        und diesen Wert schreibst du dann in die DB.

        Grüße aus Nürnberg
        Tobias

        [1] http://www.php.net/implode

        --
        sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
        (Selfcode -> http://emmanuel.dammerer.at/selfcode.html)
        1. Danke Tobias, das hat mir geholfen. Ich bekomme aber immer noch eine Fehlermeldung: "Warning: implode() [function.implode]: Bad arguments. in c:"

          1. Hallo Michael,

            Ich bekomme aber immer noch eine Fehlermeldung: "Warning: implode() [function.implode]: Bad arguments. in c:"

            mhh... kann ich so nicht sagen, wie sieht denn deine Zeile aus, in der das implode() drinsteht?

            Grüße aus Nürnberg
            Tobias

            --
            sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
            (Selfcode -> http://emmanuel.dammerer.at/selfcode.html)
            1. Tobias genau so:

              ...
              $hehe = implode(" ",$test);
              ...
              und dann anschliessend in die Zeile für die DB als $hehe eingetragen.

              Gruss,
              Michael

              1. Hallo Michael,

                $hehe = implode(" ",$test);

                mhh... das ist eingentlich richtig, was gibt denn print_r($test); aus?
                achja, vielleicht ist bei dir register_globals auf off (was auch gut so wäre) dann musst du statt $test $_POST['test'] schreiben.

                und wie sieht das Formular aus? kann man sich das evtl. irgendwo anschauen?

                und dann anschliessend in die Zeile für die DB als $hehe eingetragen.

                ich würde zwar die Variable nicht unbeding $hehe nennen, aber gut :-)

                Grüße aus Nürnberg
                Tobias

                --
                sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
                (Selfcode -> http://emmanuel.dammerer.at/selfcode.html)
                1. Hallo Tobias,

                  register globals sind bei mir auf on eingestellt :). Auf einer anderen Maschine läuft es aber. Kann sein dass die Konfiguration nicht stimmt, also der Script läuft so jetzt wie es ist.

                  Der Formular ist noch nicht online. Mein nächster Problem ist dass ich ca. 20 verschiedene Gruppen habe (alle unterschiedliche Namen) und die dann über eine Schleife (wenn es möglich ist in dem Fall) die ausgewählten Werte in die DB eintrage ? Habe schon mit for Schleife versucht hat nicht funktioniert (for ($i=0; $i<count($irgendwas); $i++)) Was schlägst du vor ?

                  PS: $hehe ist nur zum Testen!

                  Gruss
                  Michael

                  1. Hallo Michael,

                    Der Formular ist noch nicht online.

                    dann poste es doch (auszugsweise) hier rein :-)

                    Mein nächster Problem ist dass ich ca. 20 verschiedene Gruppen habe (alle unterschiedliche Namen) und die dann über eine Schleife (wenn es möglich ist in dem Fall) die ausgewählten Werte in die DB eintrage ?

                    ich würde sowas vorschlagen:
                    $gruppen = array("gruppe1","gruppe2","gruppe3","gruppe4");
                    //die Namen der Gruppen (im Formular also name="gruppe1[]", name="gruppe2[]" usw.)
                    for($i=0;!empty($gruppen[$i]);$i++){
                      $hehe = implode(" ",$gruppen[$i]);
                      //daten ($hehe) in db schreiben
                    }
                    aber alles ohne Pistole und Gewehr :-)

                    Habe schon mit for Schleife versucht hat nicht funktioniert (for ($i=0; $i<count($irgendwas); $i++))

                    was willst du mit der Schleife machen?

                    Was schlägst du vor ?

                    s.o.

                    PS: $hehe ist nur zum Testen!

                    dachte ich mir schon :-)

                    Grüße aus Nürnberg
                    Tobias

                    --
                    sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
                    (Selfcode -> http://emmanuel.dammerer.at/selfcode.html)
                    1. Hallo,

                      hier ist der script, stark abgekürzt:
                      ...
                      $gruppen = array("gruppe","gruppe1");
                      $server = "localhost";
                      $login = "root";
                      $pass = "otro";
                      $database = "gruppedb";
                      $table = "gruppetbl";
                      ...
                      for($i=0;!empty($gruppen[$i]);$i++){
                        $hehe = implode(" ,",$gruppen[$i]);
                      }
                      $conection=mysql_connect($server,$login,$pass); mysql_select_db($database,$conection);
                      $sql= "INSERT INTO ".$table." VALUES (NULL,'$hehe')";
                      mysql_query($sql);
                      ...
                      ...
                      ...
                      <input type="checkbox" name="gruppe[]" value="Chicago Bulls">
                      Chicago Bulls
                      <input type="checkbox" name="gruppe[]" value="Utah Jazz">Utah Jazz
                      <input type="checkbox" name="gruppe[]" value="Los Angeles Lakers">LA Lakers
                      ...
                      <input type="checkbox" name="gruppe1[]" value="Michael Jordan">
                      Michael Jordan
                      <input type="checkbox" name="gruppe1[]" value="Karl Melone">
                      Karl Melone....
                      ....

                      Die Schleife war wohl falsche Idee von mir. Die Werte werden auch nicht eingetragen mit deinem Vorschlag. Wieso ?
                      (habe ich was falsch gemacht, das wäre möglich, es war ohne Pistole und Gewehr ;))
                      Gruss,
                      Michael

                      1. Hallo Michael,

                        for($i=0;!empty($gruppen[$i]);$i++){
                          $hehe = implode(" ,",$gruppen[$i]);
                        }

                        du darfst die Schleife hier natürlich nicht beenden, sondern muss dein mysql-Zeugs _in_ die Schleife schreiben. (für was meinst du war der Kommentar '//daten in db schreiben'?)
                        also so:
                        mysql_connect(...);
                        for(...){
                          $hehe = ...;
                          $sql = ...;
                          mysql_query(...);
                        }

                        $conection=mysql_connect($server,$login,$pass); mysql_select_db($database,$conection);
                        $sql= "INSERT INTO ".$table." VALUES (NULL,'$hehe')";

                        nicht vergessen dir $sql ausgeben zu lassen, vielleicht steht da was ganz anderes drin, als du glaubst...

                        <input type="checkbox" name="gruppe[]" value="Chicago Bulls"> Chicago Bulls

                        du darfst durchaus deine eigenen namen verwenden, du muss die dann nur in $gruppen eintragen :-)

                        Die Schleife war wohl falsche Idee von mir. Die Werte werden auch nicht eingetragen mit deinem Vorschlag. Wieso ?

                        die letzte Gruppe müsste bei deinem Script eingetragen werden, oder?

                        Grüße aus Nürnberg
                        Tobias

                        --
                        sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
                        (Selfcode -> http://emmanuel.dammerer.at/selfcode.html)
                        1. Danke nochmal für die Erklärung der Schleife. Die habe ich also "in die db geschrieben". Ich stelle fest es hat nicht viel geholfen, also es wird nichts eingetragen. Wenn die "gruppe1" ganz entnommen wird aus dem script (auch array) dann gibt es nur ein Increment in der DB (ID 1,2....), die Spalte "gruppe" bleibt leer.

                          Bei meinem Script funktioniert das aber ohne db (mit Verwendung von arrays), nur wenn ich die Werte auf eine andere Datei übergebe.

                          gruppe[] nehme ich nur als Beispiel von dir für proof of concept :)

                          Kann es sein dass ich wieder was falsch gemacht habe ?
                          Hast du vielleicht so ein ähnliches script getestet ?

                          Michael

                          1. Hallo Michael,

                            Die habe ich also "in die db geschrieben".

                            was?

                            Ich stelle fest es hat nicht viel geholfen, also es wird nichts eingetragen.

                            Fehlermeldung? lass dir mal im Script sämtliche Variablen ausgeben. (normale variablen mit echo $var;, Arrays mit print_r($arrayname);)

                            Wenn die "gruppe1" ganz entnommen wird aus dem script (auch array) dann gibt es nur ein Increment in der DB (ID 1,2....), die Spalte "gruppe" bleibt leer.

                            hast du dir $sql ausgeben lassen? was steht da drin?
                            ach ja, welche Spalten hat denn die Tabelle? vielleicht solltest du noch angeben, in welche Spalten das Zeug geschrieben wird.

                            Bei meinem Script funktioniert das aber ohne db (mit Verwendung von arrays), nur wenn ich die Werte auf eine andere Datei übergebe.

                            mhh... was meinst du jetzt damit?

                            Kann es sein dass ich wieder was falsch gemacht habe ?

                            vermutlich, sonst würde es ja funktionieren :-)

                            Hast du vielleicht so ein ähnliches script getestet ?

                            nein, sowas habe ich soweit ich weiß noch nicht gebraucht. - alles mal eben so ausgedacht :-)

                            ansonsten musst du wohl nochmal dein Script posten (+Formular).

                            Grüße aus Nürnberg
                            Tobias

                            --
                            sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
                            (Selfcode -> http://emmanuel.dammerer.at/selfcode.html)
        2. Oder so!
          PEACE!
          TIMÖ

      2. Hallo Michael,

        Nochmal wie kann ich das realisieren dass in in meinem test in der DB: Test 1 Test 2... einfügen kann ?

        du kannst über eine while Schleife

        while(list($key, $test) = each($array))
        {
          $testwert.=$test.";";
        }

        dir einen Quasi Wert zusammen stöpseln.

        Den must du dann beim Auslesen auf ; auseinander parsen und wieder den einzelnen Werten tes1 usw zuweisen.

        Ziemlich umständlich!!

        Ich weiß allesdings nicht ob neue SQL Versionen eine Möglichkeit bieten Arrays zu speichern.

        Sonst muss ich für jeden einzelnen Wert eigene Spalte anlegen, dass macht kein Spass, deshalb sollen ja diese Arrays mir diese Arbeit erleichtern, Frage war nur wie ?

        Brauchst Du die Werte in Klartext? Sonst könntest Du es auch binär Veruchen (100,110,111,010,...).

        PEACE!
        TIMÖ

        1. Hi Timö,

          binär auch das noch, das wird zu kompliziert. Mit implode (von Tobias vorgeschlagen) funktioniert es gut, da ich in meinem script ca. 50 verschiedene Gruppen habe werde ich wohl ohne eine Schleife nicht auskommen, oder ganzen Tag die Dinger rein tippen. Listet diese Schleife aber nur die "test" Werte ?

          "while(list($key, $test) = each($array))
          {
          $testwert.=$test.";";
          }"