2010-03-30 14 views
2

je les 3 urls suivantes:garder params et ajouter un autre d'une forme

http://www.test.com?a=1 
http://www.test.com?a=1&b=3 
http://www.test.com?a=1&b=2&c=99 

maintenant sous une forme i un menu déroulant comme ceci:

<select name="b"> 
    <option value="1">1</option> 
    ... 
</select> 

Maintenant, je veux soit ajoutez ce paramètre à la liste des paramètres existants ou modifiez le param si c'est déjà là, puis actualisez la page. Des idées? Merci

+0

envoyer le formulaire? – Alsciende

+0

Comment le HTML est-il généré? c'est-à-dire des fichiers HTML, ou utilisez-vous PHP, JSP, etc? –

Répondre

1

Vous pouvez le faire de la façon regexp:

var myNewValue = 1; // the new value of input named b 
var url = window.location.href; 
if(url.match(/\Wb=/)) url = url.replace(/(\Wb=)[^&]*/, "$1"+myNewValue); 
else url = url+"&b="+myNewValue; 
window.location.href = url; 
+0

Ce code a besoin d'un cas comme 'if (! Url.match ('^. * [?]')) Url = url +"? B = "+ myNewValue;' pour ajouter un param si aucun autre paramètre n'existe. – James

0

Vous devriez écrire les paramètres que vous souhaitez conserver comme entrées cachées dans la nouvelle forme Mon PHP est rouillé, mais va ici:

<input type="hidden" name="a" value="<?php echo (int)$_GET['a']; ?>" /> 

JavaScript ne dispose pas d'un accès direct aux paramètres de demande de la page, sauf si vous utilisez regex pour analyser la liste de paramètres. Cependant, la technologie côté serveur, dans votre cas PHP, a un accès lors de la génération de la page. En créant des entrées cachées dans le formulaire, l'utilisateur n'aura pas la possibilité de changer les valeurs, mais elles seront incluses lorsque le formulaire sera soumis à nouveau.

1

Je ne suis pas sûr si vous utilisez PHP ou javascript pour ce problème, puisque vous avez étiqueté la question avec les deux.

Avec PHP vos autres paramètres disparaîtront lorsque vous soumettez le formulaire, sauf si vous incluez les anciens paramètres sous la forme aussi, donc pour vous par exemple:

<select name="b"> 
    <option value="1">1</option> 
    ... 
</select> 
<input type="hidden" name="a" value="<?php echo htmlentities(@$_GET['a']); ?>" /> 
<input type="hidden" name="c" value="<?php echo htmlentities(@$_GET['c']); ?>" /> 

Cependant, si vous utilisez Javascript, Comme les autres gars l'ont mentionné, vous devrez analyser la chaîne de requête, mais faites essentiellement la même chose: Ajoutez les autres paramètres à votre emplacement.

+0

l'ordre des paramètres changera mais corrigera toujours +1 –

0

« Maintenant, je veux ajouter que ce soit à la liste param des params existants ou modifier le si ses param déjà là »

je partirais avec parse_str()/fonctions parse_url() pour diviser l'URL en tableau associatif, vous pouvez ajouter/mettre à jour l'élément de tableau avec votre nouvelle valeur et le combiner à URL valide avec http_build_url(). S'il vous plaît jeter un oeil à des exemples dans le manuel php, il est plus facile de coder que d'écrire à ce sujet;)


« puis actualisez la page »

Les réponses sur les éléments de formulaire cachés ne sont pas mauvais mais je me demande si l'utilisateur comprendra ce qui se passe (il n'aura aucune confirmation visible que son choix précédent est mémorisé, mais vous le garderez d'une manière ou d'une autre). Pour cette raison, j'irais un chemin un peu différent: en supposant que les formes soient générées avec php et ne soient pas statiques HTML, pourquoi ne vous assurez-vous pas que les options choisies dans le premier formulaire sont mises en surbrillance lorsque vous affichez le formulaire? soumissions ultérieures?

<select name="b"> 
    <option value="1" <?php if(isset($params['b']) && $params['b'] == 1) echo 'selected="selected"'; ?>>1</option> 
</select> 

Il semble un peu compliqué, mais si vous allez faire l'habitude de l'entrée de l'utilisateur réafficher les enregistrer en tapant (ils haïra votre page s'ils doivent remplir un formulaire vide 3 fois à cause de une certaine validation).Pour les balises d'option, l'attribut correct est "sélectionné", pour les cases à cocher/cases d'option, il est "coché", les entrées de texte ont un attribut "valeur" où vous pouvez entrer ce que vous voulez, etc. Pas sûr que je ne parle pas quelque chose d'évident pour vous ...