Meddelande

Minska
No announcement yet.

Formulär, POST och array

Minska
X
 
  • Filter
  • Klockan
  • Show
Clear All
new posts

  • Formulär, POST och array

    Har ett formulär där jag har olika grupper med radio knappar. Har sedan en grupp med checkbox. Radioknapparna är det ett val som skall kunna göras medan checkboxarna ska man kunna välja hur många som helst. Vill nu kunna skriva ut alla dessa på en sida via POST. Men vete tusan hur jag skall skriva. Har testat denna kod

    Kod:
    foreach ($_POST as $key => $val){
      echo "$key : $val <br/>";
    }
    Men den skriver bara ut det sista valet av de valen man gör i checkboxarna. Måste få in en till loop på nå vis i den.
    Jag bara ÄR ...... hur ska man annars vara?!?

  • #2
    Du kan skicka flera värden till en array med att sätta name med [], dvs:

    Kod:
    <pre>
    <?php
    
    print_r($_POST);
    
    ?>
    </pre>
    
    <form method="post">
    <input type="checkbox" name="values[]" value="a">
    <input type="checkbox" name="values[]" value="b">
    <input type="submit">
    </form>
    Johan Norberg, webbutvecklare.

    @GitHub

    Läs min blogg

    Kommentera


    • #3
      Så här ser mitt formulär ut typ:

      Kod:
          <form action="" method="post">
            <fieldset>
              <legend id="caption_tillval_malning">MÅLNING &amp; FÄRGVAL</legend>
              <ol>
                <li>
                  <label>
                    <input type="radio" name="tillval_malning" value="Måla själv;0" checked data-info="Måla själv" data-price="0" />
                    Jag kommer måla själv.
                  </label>
                </li>
                <li>
                  <label>
                    <input type="radio" name="tillval_malning" value="Färdigmålad;3900" checked data-info="Färdigmålad" data-price="3900" />
                    Färdigmålad utsida i önskad kulör (Grundfärg och täckfärg eller slamfärg) 
                  </label>
                </li>
              </ol>
            </fieldset>
      
            <fieldset>
              <legend id="caption_ovriga_tillval">ÖVRIGA TILLVAL</legend>
              <ol>
                <li>
                  <label>
                    <input type="checkbox" name="ovriga_tillval" value="Loft;0" checked data-info="Loft med räcke och stege" data-price="1500" />
                    Loft med räcke och stege, 120 cm högt
                  </label>
                </li>
                <li>
                  <label>
                    <input type="checkbox" name="ovriga_tillval" value="Dörrtrycke;3900" checked data-info="Färdigmålad" data-price="900" />
                    Riktigt dörrtrycke med låskista för standard Assa-lås eller motsvarande (Standard är ett kulknäppe i mässing)
                  </label>
                </li>
              </ol>
            </fieldset>
      Jag bara ÄR ...... hur ska man annars vara?!?

      Kommentera


      • #4
        Ändra alltså value="ovriga_tillval" till value="ovriga_tillval[]" på dina checkboxar.
        Johan Norberg, webbutvecklare.

        @GitHub

        Läs min blogg

        Kommentera


        • #5
          Okej, tack
          Jag bara ÄR ...... hur ska man annars vara?!?

          Kommentera


          • #6
            Hm, finns det något annat sätt då jag använder value namnet till en annan sak och kan inte vara med [] då :/
            Jag bara ÄR ...... hur ska man annars vara?!?

            Kommentera


            • #7
              Här är all min kod och kan ej få till det på nåt vis. Nån som kan hjälpa med min kod så det funkar att hämta ut alla värdena om man kör submit.

              Kod:
              <!DOCTYPE html>
              <html>
                <head>
              <script src="//code.jquery.com/jquery-1.9.1.min.js"></script>
                  <meta charset="utf-8">
              <!--
              Created using JS Bin
              http://jsbin.com
              
              Copyright (c) 2014 by voigtan (http://jsbin.com/xowiq/1/edit)
              
              Released under the MIT license: http://jsbin.mit-license.org
              -->
                  <title>JS Bin</title>
                
              <style id="jsbin-css">
              
              </style>
              </head>
                <body>
                  <form action="" method="post">
                    <fieldset>
                      <legend id="caption_tillval_malning">MÅLNING &amp; FÄRGVAL</legend>
                      <ol>
                        <li>
                          <label>
                            <input type="radio" name="tillval_malning" value="Måla själv;0" checked data-info="Måla själv" data-price="0" />
                            Jag kommer måla själv.
                          </label>
                        </li>
                        <li>
                          <label>
                            <input type="radio" name="tillval_malning" value="Färdigmålad;3900" checked data-info="Färdigmålad" data-price="3900" />
                            Färdigmålad utsida i önskad kulör (Grundfärg och täckfärg eller slamfärg) 
                          </label>
                        </li>
                      </ol>
                    </fieldset>
              
                    <fieldset>
                      <legend id="caption_ovriga_tillval">ÖVRIGA TILLVAL</legend>
                      <ol>
                        <li>
                          <label>
                            <input type="checkbox" name="ovriga_tillval" value="Loft;0" checked data-info="Loft med räcke och stege" data-price="1500" />
                            Loft med räcke och stege, 120 cm högt
                          </label>
                        </li>
                        <li>
                          <label>
                            <input type="checkbox" name="ovriga_tillval" value="Dörrtrycke;3900" checked data-info="Färdigmålad" data-price="900" />
                            Riktigt dörrtrycke med låskista för standard Assa-lås eller motsvarande (Standard är ett kulknäppe i mässing)
                          </label>
                        </li>
                      </ol>
                    </fieldset>
              
                    <span class="pris" style="font:30px helvetica"></span>
              
                  </form>
              
                  <div id="summary"></div>
                <script>
              $(document).ready(function() {
                var inputs = $("input:checkbox, input:radio");
              
              
                var createList = function(group) {
                  var markup = [];
                  $.each(group, function(a,b) {
                    var header = $("#caption_" + a).text();
              
                    markup.push('<div class="header">' + header + '</div>');
              
                    $.each(this, function(){
                      markup.push('<div class="item">');
                      markup.push(this.info);
                      markup.push('<div class="price">');
                      markup.push(this.price);
                      markup.push('</div>');
                      markup.push('</div>');
                    });
                  });
              
                  return markup.join('');
                };
              
              function calcTotal() {
                var totalPris = 0;
                var obj = {};
              
                inputs.filter(':checked').each(function() {
                  var $this = $(this);
                  var price  = parseInt($this.data('price'), 10);
                  var info = $this.data('info');
              
                  if(info && info.length) {
                    if(!obj[this.name]) {
                      obj[this.name] = [];
                    }
              
                    obj[this.name].push({
                      info: info,
                      price: price
                    });
                  }
              
                  totalPris  += price;
                });
              
              
                $("#summary").html(createList(obj));
              
                $("span.pris").html(totalPris + ":-");
              }
              
                calcTotal();
              
                inputs
                .on('change', calcTotal);
              
              });
              </script>
              
              </body>
              Jag bara ÄR ...... hur ska man annars vara?!?

              Kommentera


              • #8
                eftersom koden letar efter:
                [kod] var header = $("#caption_" + a).text();[/kod] dvs det var innan "caption_ovriga_tillval" men nu bli det "caption_ovriga_tillval[]" och det finns inget element med det ID, så du behöver ändra detta:
                [kod] inputs.filter(':checked').each(function() {
                var $this = $(this);
                var price = parseInt($this.data('price'), 10);
                var name = this.name.replace(/\[\]$/, "");
                var info = $this.data('info');

                if(!obj[name]) {
                obj[name] = [];
                }

                obj[name].push({
                info: info,
                price: price
                });

                totalPris += price;
                });[/kod]
                "det går inte att lära en gammal norrlänning byta namn på irc" - gammalt kinesiskt uttryck

                Kommentera

                Working...
                X