发布具有相同名称的多个字段

时间:2015-04-17 14:13:33

标签: php mysql form-submit

我有一个多个字段的表单。在这种形式,我可以通过javascript预先添加一个按钮来添加多个组字段。要明白我的意思,请看小提琴: https://jsfiddle.net/alihesari/060ym890/2/

如何通过php获取所有添加的字段并在提交后在mysql中插入主题?

<fomr action="">
<button type="button" id="add_hotel" class="btn btn-primary">
    Add Hotel</button>
<button type="button" id="remove_hotel" class="btn btn-warning">Remove Hotel</button>

    <ul class="hotels_ul">
    <li class="hotel_li">
    <div class="row">
    <div class="col-md-10">
    <div class="form-group">
    <label for="hotel_name[]">Hotel Name:</label>
    <input type="text" name="hotel_name[]" id="hotel_name[]" class="form-control" placeholder="Hotel Name">
    </div>
    </div>
    <div class="col-md-10">
    <div class="form-group">
    <label for="hotelRate[]">Hotel Rate: </label>
    <select name="hotelRate[]" id="hotelRate[]" class="form-control">
    <option value=""></option>
    <option value="متل">متل</option>
    <option value="یک ستاره">یک ستاره</option>
    <option value="دو ستاره">دو ستاره</option>
    <option value="سه ستاره">سه ستاره</option>
     <option value="سه ستاره تاپ">سه ستاره تاپ</option>
    <option value="چهار ستاره">چهار ستاره</option>
    <option value="چهار ستاره تاپ">چهار ستاره تاپ</option>
    <option value="پنج ستاره">پنج ستاره</option>
    <option value="پنج ستاره تاپ">پنج ستاره تاپ</option>
    <option value="هفت ستاره">هفت ستاره</option>
    <option value="هتل آپارتمان">هتل آپارتمان</option>
    </select>
     </div>
    </div>
    <div class="col-md-10">
    <div class="form-group">
    <label for="room1[]">Room 1</label>
    <input name="room1[]" id="room1[]" value="" class="form-control" placeholder="Price">
    </div>  
    </div>
    <div class="col-md-10">
    <div class="form-group">
    <label for="room2[]">Room 2</label>
    <input name="room2[]" id="room2[]" value="" class="form-control" placeholder="Price">
    </div>  
    </div>
    <div class="col-md-10">
    <div class="form-group">
    <label for="room3[]">Room 3</label>
    <input name="room3[]" id="room3[]" value="" class="form-control" placeholder="Price">
     </div>  
    </div>
    <div class="col-md-10">
    <div class="form-group">
    <label for="room4[]">Room 4</label>
    <input name="room4[]" id="room4[]" value="" class="form-control" placeholder="Price">
    </div>  
    </div>
    <div class="col-md-20">
    <div class="form-group">
    <label for="desc[]">Description</label>
    <textarea class="form-control" name="desc[]" id="desc[]" placeholder="Description"></textarea>
    </div>  
    </div>
    </div>
    </li>
    </ul>
        <input type="submit" value="submit">
        </form>

1 个答案:

答案 0 :(得分:0)

以下是如何使用JS和PHP处理表单的示例。

(如果这里的JS示例不起作用,请参阅https://jsfiddle.net/n6kzxj4m/

&#13;
&#13;
$(function() {
    $(".add").on('click', function(e) {
        $($(".hotel").last().clone(true, true)).insertAfter($(".hotel").last());
        
        // reset new items
        $(".hotel").last().find(':input:not(select)').not(':button, :submit, :reset, :hidden, :checkbox, :radio').val('');
        $(".hotel").last().find('[select]').prop('selectedIndex', 0);
        $(".hotel").last().find(':checkbox, :radio').prop('checked', false);
    });
    
    $(".remove").on('click', function(e) {
        $(this).parents(".hotel").remove();
    });
    
    $("form").on('submit', function(e) {
        e.preventDefault();
        var $form = $(this);
        $("#output").html($form.serializeJSON());
    });
});


// plugin below only for debug on jsfiddle

/**
 * jQuery serializeObject
 * @copyright 2014, macek <paulmacek@gmail.com>
 * @link https://github.com/macek/jquery-serialize-object
 * @license BSD
 * @version 2.4.5
 */
!function(e,r){if("function"==typeof define&&define.amd)define(["exports","jquery"],function(e,i){return r(e,i)});else if("undefined"!=typeof exports){var i=require("jquery");r(exports,i)}else r(e,e.jQuery||e.Zepto||e.ender||e.$)}(this,function(e,r){function i(e,i){function n(e,r,i){return e[r]=i,e}function a(e,r){for(var i,a=e.match(t.key);void 0!==(i=a.pop());)if(t.push.test(i)){var o=s(e.replace(/\[\]$/,""));r=n([],o,r)}else t.fixed.test(i)?r=n([],i,r):t.named.test(i)&&(r=n({},i,r));return r}function s(e){return void 0===h[e]&&(h[e]=0),h[e]++}function o(e){switch(r('[name="'+e.name+'"]',i).attr("type")){case"checkbox":return"on"===e.value?!0:e.value;default:return e.value}}function u(r){if(!t.validate.test(r.name))return this;var i=a(r.name,o(r));return c=e.extend(!0,c,i),this}function f(r){if(!e.isArray(r))throw new Error("formSerializer.addPairs expects an Array");for(var i=0,t=r.length;t>i;i++)this.addPair(r[i]);return this}function d(){return c}function l(){return JSON.stringify(d())}var c={},h={};this.addPair=u,this.addPairs=f,this.serialize=d,this.serializeJSON=l}var t={validate:/^[a-z_][a-z0-9_]*(?:\[(?:\d*|[a-z0-9_]+)\])*$/i,key:/[a-z0-9_]+|(?=\[\])/gi,push:/^$/,fixed:/^\d+$/,named:/^[a-z0-9_]+$/i};return i.patterns=t,i.serializeObject=function(){return this.length>1?new Error("jquery-serialize-object can only serialize one form at a time"):new i(r,this).addPairs(this.serializeArray()).serialize()},i.serializeJSON=function(){return this.length>1?new Error("jquery-serialize-object can only serialize one form at a time"):new i(r,this).addPairs(this.serializeArray()).serializeJSON()},"undefined"!=typeof r.fn&&(r.fn.serializeObject=i.serializeObject,r.fn.serializeJSON=i.serializeJSON),e.FormSerializer=i,i});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form method="post" action="#">
<fieldset class="hotel">
    <legend>Add a hotel</legend>
    <p><label>Hotel: <input type="text" name="hotel[name][]" /></label></p>
    <p><label>Rate: <select name="hotel[rate][]"><option>123</option><option>456</option></select></label></p>
    <p><input type="button" class="add" value="Add hotel" /> <input type="button" class="remove" value="Remove this hotel" /></p>
</fieldset>

<p><input type="submit" value="Search!" /></p>
</form>

<pre id="output"></pre>
&#13;
&#13;
&#13;

然后,对于PHP处理,你可以这样做:

<?php
if(!empty($_POST)) {
    // handle items. $key is the index.
    foreach($_POST['hotel']['name'] as $key => $hotel) {
        $name = $hotel;
        $rate = $_POST['hotel']['rate'][$key];
        echo "Name: $name<br>Rate: $rate<hr>";
    }
}

注意:您可能需要检查以确保$_POST['hotel']['name']中的项目数与$_POST['hotel']['rate']中的项目数相匹配。此方法可能不太理想,您可能希望通过JS为每个酒店行项目分配一个ID。但这是解决问题的基本方法。