开发者

alter $_POST data of radio select option

开发者 https://www.devze.com 2023-02-21 04:18 出处:网络
So I have a Radio button group, like so: <div data-role=\"fieldcontain\"> <fieldset data-role=\"controlgroup\">

So I have a Radio button group, like so:

<div data-role="fieldcontain">
    <fieldset data-role="controlgroup">
        <legend>Choose a pet:</legend>
            <input type="radio" name="radio-choice-1" id="radio-choice-1" value="choice-1" checked="checked" />
            <label for="radio-choi开发者_高级运维ce-1">Cat</label>

            <input type="radio" name="radio-choice-1" id="radio-choice-2" value="choice-2"  />
            <label for="radio-choice-2">Dog</label>

            <input type="radio" name="radio-choice-1" id="radio-choice-3" value="choice-3"  />
            <label for="radio-choice-3">Hamster</label>

            <input type="radio" name="radio-choice-1" id="radio-choice-4" value="choice-4"  />
            <label for="radio-choice-4">Lizard</label>
    </fieldset>
</div>

Now if I just submit the for I get this $_POST (Note I have multiple Radio group questions)

Array
(
    [radio-choice-1] => choice-1
    [radio-choice-2] => choice-4
    [radio-choice-3] => choice-2
    [submit] => submit
    [PHPSESSID] => 11111111111111111
)

How Can I restructure the HTML or $_POST data before submission to make it look like this:

Array
(
    [type-1] => radio-choice-1
    [answer-1] => choice-1
    [type-2] => radio-choice-2
    [answer-2] => choice-4
    [type-3] => radio-choice-3
    [answer-3] => choice-2
    [submit] => submit
    [PHPSESSID] => 11111111111111111
)

Maybe jQuery as an option?


You can do it post submission, the code below should work if you keep your original naming conventions.

$postValues = $_POST;
$altered = Array();
$unaltered = Array();

foreach ($postValues as $key => $val) {

  if ( FALSE !== stripos($key, 'radio-choice-') ) {

    $num = explode('-', $key);
    $num = $num[2];
    $altered['type-'.$num] = $key;
    $altered['answer-'.$num] = $value;

  } else {

    $unAltered[$key] = $value;

  }  

}

$manipulatedPOSTData = array_merge($altered, $unAltered);

// Keep doing what you intended


I assume you are talking about a form that you are submitting?

If you want to add finer control over what gets posted, you can do one of two things:

1) add hidden variables

or

2) use jQuery .post() (http://api.jquery.com/jQuery.post/) instead of doing a normal form submission.

Personally, I think the first of the two is simplest:

<div data-role="fieldcontain">
    <input type="hidden" name="type-1" value="radio-choice-1" />
    <fieldset data-role="controlgroup">
        <legend>Choose a pet:</legend>
            <input type="radio" name="answer-1" id="radio-choice-1" value="choice-1" checked="checked" />
            <label for="radio-choice-1">Cat</label>

            <input type="radio" name="answer-1" id="radio-choice-2" value="choice-2"  />
            <label for="radio-choice-2">Dog</label>

            <input type="radio" name="answer-1" id="radio-choice-3" value="choice-3"  />
            <label for="radio-choice-3">Hamster</label>

            <input type="radio" name="answer-1" id="radio-choice-4" value="choice-4"  />
            <label for="radio-choice-4">Lizard</label>
    </fieldset>
</div>

By changing the name of the radio ground to answer-1 and adding a hidden variable, that should meet your requirements (do the same for your other radio elements).


Avoid client side elaboration if you can.

Otherwise use .submit() and hand code what you need. but it's harder.

0

精彩评论

暂无评论...
验证码 换一张
取 消