"Now i want to either add that param to the list of existing params or edit the param if its already there"
I'd go with parse_str() / parse_url() functions to split the URL into associative array, then you can add/update array element with your new value and combine it back to valid URL with http_build_url(). Please have a look at examples in php manual, it's easier to code it than to write about it ;)
"then refresh the page"
The answers about hidden form elements aren't bad but I wonder if user will understand what happens (he will have no visible confirmation that his previous choice is remembered, yet you'll somehow save it). Because of that I'd go a bit different path: assuming that forms are generated with php and aren't static HTML, why won't you just make sure that the options chosen in first form submit are highlighted when you show the form for subsequent submits?
<select name="b">
<option value="1" <?php if(isset($params['b']) && $params['b'] == 1) echo 'selected="selected"'; ?>>1</option>
</select>
It looks a bit messy but if you'll make habit of re-displaying user's input you save them typing (they'll hate your page if they'll have to fill an emptied form 3 times because of some validation).
For option tags the proper atribute is "selected", for checkboxes/radio buttons it's "checked", text inputs have attribute "value" where you can enter whatever you want etc. Not sure if I'm not talking about something obvious to you...