Ankündigung

Einklappen
Keine Ankündigung bisher.

denkfehler? kontrollkästchen in datenbank

Einklappen

Neue Werbung 2019

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

  • denkfehler? kontrollkästchen in datenbank

    Hallo Leute,

    ich habe glaube ich einen denkfehler... bzw. ich weiss nicht, wie ich es genau realisieren soll.

    Also arbeite gerade an der Ausstattungsseite meiner firma, und möchte gerne untereinander alle in der Datenbank eingetragenen Programme auflisten, das auch super funktioniert.

    Hinter jedem Programm ist dann ein Kontrollkästchen, welches man anhacken kann, wenn in dem Raum, den man gerade bearbeitet, das Programm ist.

    Also so etwa:

    Adobe Photoshop [Kontrollkästchen]
    Adobe Dreamweaver [Kontrollkästchen]
    ...

    usw.

    Nun möchte ich in meiner Tabelle
    "woistwas" gerne in follgenden Feldern das eintragen:

    id - raum_id und soft_id !

    natürlich gibs dann noch ne tabelle mit den räumen und mit der software..

    nur ich weiss nicht, wie ich die kontrollkästchen Felder bennensoll, und mit welchen Inhalt, und wie ich die, sofern ein Raum sagen wir etwa 30 Programme hat, die dann untereinander weg in die Tabelle eintrage..

    erst hab ich gedacht, ich bennene jedes kästchen nach der id der software, aber dann müsste ich ja immer if(1..2..3...4...5.=1 dann mach insert, wisst ihr was ich meine?

    Ich weiss nicht wie ich daran gehen kann, was das best eund einfachste wäre...

    wäre super wenn da jemand Vorschläge hat.

    Viele Grüße,
    saNz


  • #2
    Hallo und Willkommen im Forum!

    Etwas kompliziert beschrieben aber ich denke ich weis was du willst!

    Du liest die Progrmme sicher mit einer while Schleife aus richtig? Du willst also in eine Tabelle die Programme eintragen die du dann Rämen zuordnest?
    Gut du musst den Konrollkästchen einen Namen als arry geben zum Beispiel so

    <input type="checkbox" name="programm[]">

    Dann mache aus dem Array mit implode einen String und trage den so als string ein.
    Das könnte dann in der DB so aussehen

    dreamwaver|photoshop|homesite
    Der Befehl das zu wäre so

    PHP-Code:
    $programm $_POST['programm'];
     
    $eintrag_prog implode("|"$programm); 
    Eintragen tust dann $eintrag_prog! So kannst alle Programme in ein Tebellenfeld schreiben. Spart platz in der DB

    Beim auslesen wandelst du mit explode den String wieder in ein Array um und behandelst es im weiteren Code weiter! So mache ich das in einer anderen Anwendung!

    mfg der Litter
    Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
    http://www.lit-web.de

    Kommentar


    • #3
      Zitat von litterauspirna Beitrag anzeigen
      Dann mache aus dem Array mit implode einen String und trage den so als string ein. Beim auslesen wandelst du mit explode den String wieder in ein Array um und behandelst es im weiteren Code weiter!
      Wenigstens als Beispiel, wie man es nicht machen sollte, mag das dienen. Und als Beleg für schlechtes DB-Design.

      @sanz
      Leider verstehe ich nicht genau, was du willst. Aber vielleicht zeigst du uns mal was du schon hast.
      Gruss
      L

      Kommentar


      • #4
        Schreib Dir mal eine test.html mit dem Inhalt
        Code:
        <html>
          <head><title>.</title></head>
          <body>
            <form method="post" action="test.php">
              <div>
                <input type="checkbox" name="installed[315][1]" /> Adobe Photoshop<br />
                <input type="checkbox" name="installed[315][2]" /> Adobe Dreamweaver<br />
                <input type="checkbox" name="installed[315][8]" /> Zend Studio<br />
                <input type="submit" />
              </div>
            </form>
          </body>
        </html>
        und eine test.php mit
        PHP-Code:
        <pre><?php print_r($_POST); ?></pre>
        315 ist die id des Raums, den Du bearbeitest und 1,2,3 die Ids für die Software.

        Kommentar


        • #5
          Von lazydog

          Wenigstens als Beispiel, wie man es nicht machen sollte, mag das dienen. Und als Beleg für schlechtes DB-Design.
          Warum bitte sollte man das nicht so machen,was spricht denn dagegen? Und mit schlechten DB Design hat das ja nun weis Got nichts zu tun!!! Ich zwinge ihn doch nicht dazu das so zu machen,es war nur eine Möglichkeit nicht mehr und nicht weniger! Gut ich nutze das für eine andere Sache bei mir und funktioniert das einwandfrei! Also warum ist das ein Beispiel warum man das nicht so machen sollte? Es beeinflusst keine performance etc.

          mfg der Litter
          Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
          http://www.lit-web.de

          Kommentar


          • #6
            ok nochmal bisschen anders erklärt!


            [] Adobe
            [] Flash
            [x] Nero [softwaretabellen id = 3]
            [] Office
            [x] IE [softwaretabellen id = 5]
            [x] Firefox [softwaretabellen id = 6]

            so!

            da habe ich 3 Felder angeklickt, nur weiss ich nicht, wie ich die Felder benennen soll und welches value?

            Sollte ich das kästchen 1, 1 nennen? Oder wie?
            Die liste ist noch viel Länger, und im Prinzip möchte ich nur das es meinet wegen auch mehrere inserts gibt, hauptsache nach diesem prinzip steht es in der datenbank:

            ID ------- raum_id --------- soft_id
            1 ---------- 115 -------------- 3
            2---------- 115 -------------- 5
            3---------- 115 -------------- 6

            wisst ihr nun wie ich das gerne möchte? kanns leider nichtmal ansatzweise realisieren...

            Kommentar


            • #7
              Zitat von litterauspirna Beitrag anzeigen
              Also warum ist das ein Beispiel warum man das nicht so machen sollte?
              Weil so ein Eintrag nie atomar ist, und damit die DB nicht normalisiert. Einem Anfänger Tipps zu nicht normalisierten DB's zu geben, finde ich nicht eben fein.
              Spätestens wenn du in so einem Feld etwas bestimmtes suchst oder Relationen herstellen willst, ist Ende der Vorstellung.
              Gruss
              L

              Kommentar


              • #8
                Zitat von sanz Beitrag anzeigen
                nur weiss ich nicht, wie ich die Felder benennen soll und welches value?
                Wie du die Felder benennst ist eigentlich egal, wichtig ist, dass alle gleich heissen, und der Name ein Array ist, als z.B. name='softId[]' (dieser Teil von Litter ist völlig korrekt). Und als Value sollst du direkt die ID angeben. Von allen selektierten Boxen wird dann die ID in einem Array übertragen.
                Für jede von diesen ID's gibts dann den entsprechenden Eintrag.
                Gruss
                L

                Kommentar


                • #9
                  Zum Beispiel bei der Abfrage: Liste alle Rechner, auf denen Photoshop installiert ist.
                  Wenn die Daten als dreamwaver|photoshop|homesite speicherst, musst Du alle Datensätze durchgehen, das Feld auftrennen und dann nochmal suchen. Nicht optimal.

                  Zitat von sanz
                  Sollte ich das kästchen 1, 1 nennen? Oder wie?
                  Nein.
                  Code:
                  <input type="checkbox name="installed[1]" />Adobe<br />
                  <input type="checkbox name="installed[115][2]" />Flash<br />
                  <input type="checkbox name="installed[115][3]" />Nero<br />
                  <input type="checkbox name="installed[115][4]" />Office<br />
                  <input type="checkbox name="installed[115][5]" />IE<br />
                  <input type="checkbox name="installed[115][6]" />Firefox<br />
                  auch möglich
                  Code:
                  <input type="checkbox name="installed[115][]" value="1" />Adobe<br />
                  <input type="checkbox name="installed[115][]" value="2" />Flash<br />
                  <input type="checkbox name="installed[115][]" value="3" />Nero<br />
                  <input type="checkbox name="installed[115][]" value="4" />Office<br />
                  <input type="checkbox name="installed[115][]" value="5" />IE<br />
                  <input type="checkbox name="installed[115][]" value="6" />Firefox<br />
                  Und dann schau Dir mit
                  PHP-Code:
                  <?php print_r($_POST); ?>
                  an, was Dir PHP liefert.

                  Oder
                  Code:
                  <input type="hidden" name="room" value="115" />
                  <input type="checkbox name="installed[115][]" value="1" />Adobe<br />
                  <input type="checkbox name="installed[]" value="2" />Flash<br />
                  <input type="checkbox name="installed[]" value="3" />Nero<br />
                  <input type="checkbox name="installed[]" value="4" />Office<br />
                  <input type="checkbox name="installed[]" value="5" />IE<br />
                  <input type="checkbox name="installed[]" value="6" />Firefox<br />
                  Aber dann bist Du auf einen Raum pro Formular festgelegt - kann Dir natürlich reichen.

                  Kommentar


                  • #10
                    Ok lazydog da gebe ich dir recht. Wie gesagt kommt auf den Einsatzzweck an. Für das was ich grad schreibe ist das so ok aber für das Beispiel hier gebe ich zu wahrscheinlich nicht! Entschuldigung!
                    Aber ich habe mir deine Worte mal durchdacht und werde das auch anders machen! Du hast recht!
                    Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                    http://www.lit-web.de

                    Kommentar


                    • #11
                      Zitat von David Beitrag anzeigen
                      Zum Beispiel bei der Abfrage: Liste alle Rechner, auf denen Photoshop installiert ist.
                      Wenn die Daten als dreamwaver|photoshop|homesite speicherst, musst Du alle Datensätze durchgehen, das Feld auftrennen und dann nochmal suchen. Nicht optimal.

                      Nein.
                      Code:
                      <input type="checkbox name="installed[1]" />Adobe<br />
                      <input type="checkbox name="installed[115][2]" />Flash<br />
                      <input type="checkbox name="installed[115][3]" />Nero<br />
                      <input type="checkbox name="installed[115][4]" />Office<br />
                      <input type="checkbox name="installed[115][5]" />IE<br />
                      <input type="checkbox name="installed[115][6]" />Firefox<br />
                      auch möglich
                      Code:
                      <input type="checkbox name="installed[115][]" value="1" />Adobe<br />
                      <input type="checkbox name="installed[115][]" value="2" />Flash<br />
                      <input type="checkbox name="installed[115][]" value="3" />Nero<br />
                      <input type="checkbox name="installed[115][]" value="4" />Office<br />
                      <input type="checkbox name="installed[115][]" value="5" />IE<br />
                      <input type="checkbox name="installed[115][]" value="6" />Firefox<br />
                      Und dann schau Dir mit
                      PHP-Code:
                      <?php print_r($_POST); ?>
                      an, was Dir PHP liefert.

                      Oder
                      Code:
                      <input type="hidden" name="room" value="115" />
                      <input type="checkbox name="installed[115][]" value="1" />Adobe<br />
                      <input type="checkbox name="installed[]" value="2" />Flash<br />
                      <input type="checkbox name="installed[]" value="3" />Nero<br />
                      <input type="checkbox name="installed[]" value="4" />Office<br />
                      <input type="checkbox name="installed[]" value="5" />IE<br />
                      <input type="checkbox name="installed[]" value="6" />Firefox<br />
                      Aber dann bist Du auf einen Raum pro Formular festgelegt - kann Dir natürlich reichen.

                      Habs so gemacht, hier sourcecode:

                      Code:
                      <form action="neuerraum_3.php" method="get" name="eintragen">
                      <input name="raumnr" type="hidden" value="114">
                      <table>
                      <tr><td><input name="installed[114][1]" type="checkbox"> </td><td>Internet Explorer</td></tr>
                      
                      
                      
                      <tr><td><input name="installed[114][2]" type="checkbox"> </td><td>Word2002</td></tr>
                      
                      
                      <tr><td><input name="installed[114][3]" type="checkbox"> </td><td>Excel2002</td></tr>
                      
                      
                      
                      <tr><td><input name="installed[114][4]" type="checkbox"> </td><td>PowerPoint2002</td></tr>
                      
                      
                      
                      <tr><td><input name="installed[114][5]" type="checkbox"> </td><td>Acrobat 5</td></t
                      dann hab ich

                      print_r($_GET);

                      gemacht und dann kam:

                      Array ( [raumnr] => 114 [submit] => Abfeuern )

                      ist das so richtig? oder müsste da noch iwie installed auftaucheN?

                      Kommentar


                      • #12
                        <input type="checkbox name="installed[1]" />Adobe<br />
                        Oh, da sind ein paar copy&paste Fehler von mir drin.

                        Also
                        • entweder das hidden Feld mit der Raumnummer und und dann nur die Produktnummer übertragen.
                        • oder Raum- und Produktnummer in den Namen desr Checkbox packen
                        Beides zu vermischen bringt nichts - eher im Gegenteil.
                        Ich schlage auch
                        Code:
                        <form action="neuerraum_3.php" method="get" name="eintragen">
                         <input type="hidden" name="room" value="114" />
                          <table>
                          <tr><td><input name="installed[]" value="1" type="checkbox"> </td><td>Internet Explorer</td></tr>
                          <tr><td><input name="installed[]" value="2" type="checkbox"> </td><td>Word2002</td></tr>
                          <tr><td><input name="installed[]" value="3" type="checkbox"> </td><td>Excel2002</td></tr>
                        vor. Also die Version von litterauspirna mit hidden Feld für die Raumnummer. Dann hast Du es später beim Update leichter, wenn Software gelöscht wird.

                        Kommentar


                        • #13
                          Das klappt soweit denke ich ganz gut, also es sieht richtig aus:

                          Array ( [raumnr] => 114 [installed] => Array ( [114] => Array ( [11] => on [12] => on [13] => on [14] => on ) ) [submit] => Abfeuern )

                          hab es nun so gelöst, wie du gesagt hast:

                          <form action="neuerraum_3.php" method="get" name="eintragen">
                          <input type="hidden" name="room" value="114" />
                          <table>
                          <tr><td><input name="installed[]" value="1" type="checkbox"> </td><td>Internet Explorer</td></tr>
                          <tr><td><input name="installed[]" value="2" type="checkbox"> </td><td>Word2002</td></tr>
                          <tr><td><input name="installed[]" value="3" type="checkbox"> </td><td>Excel2002</td></tr>
                          So, und nun, wie mache ich das in ein Insert , mit Arrays hab ich leider noch nicht viel gearbeitet, nur das installed[0]..[1] usw die namen für die einträge sind. aber wie bekomme ich das nun so in die tabelle?

                          ID ------- raum_id --------- soft_id
                          1 ---------- 115 -------------- 3
                          2---------- 115 -------------- 5
                          3---------- 115 -------------- 6

                          oder einfach nun

                          "INSERT INTO $table VALUES ('','$_GET[raumnr]','$installed[0]')";
                          "INSERT INTO $table VALUES ('','$_GET[raumnr]','$installed[1]')";
                          "INSERT INTO $table VALUES ('','$_GET[raumnr]','$installed[2]')";

                          ? oder gibs da vllt auch noch ne vereinfachung?

                          Gruß, & schonmal ultravielen dank für alles !

                          Kommentar


                          • #14
                            ein kompletter raum

                            PHP-Code:
                            for ( $i=$i<= $letzte_SoftwareID $i++ )
                            "INSERT INTO $table VALUES ('','$_GET[raumnr]','$installed[".$i."]')"; } 
                            deinen INSERT-Befehl musste noch anpassen, speziell " und '

                            Kommentar


                            • #15
                              ich versuche grad herrauszufinden, wieviele Werte im Array sind, aber irgendwie wird mir die das richtige Ergebnis angezeigt...

                              echo count($114);

                              klappt nicht

                              echo count($installed);

                              bringt ergebnis 0

                              und echo count($raumnr);

                              bringt ergebnis 1


                              aber ich hab ja 4 sachen angeklickt, wisst ihr das ich da noch falsch mache?

                              Gruß,
                              saNz

                              ps ich weiss iwie gar nicht wo die werte nun drin stehen bei installed nicht und in raumnr auch nicht?

                              Kommentar

                              Lädt...
                              X