2011-07-04 8 views
0

I pour pré-sélectionner un article dans une liste en fonction de la valeur de $_GET.Pré-sélectionner un article basé sur GET

Ex: Selectbox avec options 1,2,3. de l'url je reçois la valeur 2. Comment présélectionner cette valeur? Le chemin avec <option ...selected>...</> est beaucoup trop compliqué. Je veux juste déclarer quelle option est présélectionnée, comme <select selected="2">.

+0

Pouvez-vous nous montrer comment les listbox est en cours de sortie? Est-il sorti en PHP? – EdoDodo

Répondre

3

La solution avec le nombre le moins élevé d'instructions if dans ma réponse est la dernière.

Malheureusement, il n'y a aucun moyen de le faire ainsi <select selected="2">. Vous aurez à faire quelque chose comme ceci:

<select name="select"> 
    <option value="1"<?php if ($_GET['select'] == '1'): ?> selected="selected"<?php endif; ?>>Option 1</option> 
    <option value="2"<?php if ($_GET['select'] == '2'): ?> selected="selected"<?php endif; ?>>Option 2</option> 
    <option value="3"<?php if ($_GET['select'] == '3'): ?> selected="selected"<?php endif; ?>>Option 3</option> 
</select> 

Si vous permettez mutliples, j'utiliser in_array et assurez-vous que le nom de l'élément select précise que c'est un tableau (en utilisant les crochets).

<select multiple="multiple" name="multi_select[]"> 
    <option value="1"<?php if (in_array('1', $_GET['multi_select'])): ?> selected="selected"<?php endif; ?>>Option 1</option> 
    <option value="2"<?php if (in_array('2', $_GET['multi_select'])): ?> selected="selected"<?php endif; ?>>Option 2</option> 
    <option value="3"<?php if (in_array('3', $_GET['multi_select'])): ?> selected="selected"<?php endif; ?>>Option 3</option> 
</select> 

Comme alternative, vous pouvez utiliser un PHP array pour créer les options et une boucle foreach pour créer le option.

<select name="select"> 
<?php 

$options = array(
    1 => 'Option 1', 
    2 => 'Option 2', 
    3 => 'Option 3' 
); 

foreach ($options as $value => $name) 
{ 
    echo '<option value="' . $value . '"' . ($_GET['select'] == $value ? ' selected="selected"' : '') . '>' . $name . '</option>'; 
} 

?> 
</select> 
+1

Il y a tellement de 'if's! –

+0

@Michael Mior - Ma dernière option n'a pas autant d'instructions 'if'. Mais avec cela dit, si le plan est d'utiliser du HTML standard, comment pourriez-vous suggérer de le faire afin qu'il fonctionne avec les clients qui ont désactivé JavaScript? Je suis tout pour jQuery mais certaines personnes désactivent toujours JavaScript et je pense qu'une option tout-HTML est bien mieux adaptée pour quelque chose d'aussi simple. –

+0

Je n'ai pas suggéré que Javascript était une bonne idée. Je ne le pense pas. J'ai aussi raté votre dernière option dans la réponse. Regarde beaucoup plus joli :) –

2

Il est impossible d'avoir une étiquette sélectionnée pour indiquer laquelle est sélectionnée. Cela doit être fait via l'étiquette d'option.

Avez-vous pensé à faire défiler les options?

$desiredSelect = $_GET['desired']; 

foreach(array('option-value' => 'option-text', 
       'option-value2' =>'option-text2') as $val => $test) 
{ 
    echo "<option value=\"$val\" "; 
    if($val == $desiredSelect) echo "selected = \"selected\""; 
    echo ">$text</option>"; 
} 
+0

+! pour ne pas avoir une instruction if pour chaque option. –

1

Une des options pourrait consister à injecter un simple script JavaScript/jQuery pour être tiré sur DOM prêt si la demande était un get:

si la demande est d'obtenir, puis injecter ce code dans le code HTML de réponse:

$(function(){ 
    $('#selectBox').val(selectedItemValue); 
}); 

C'est aussi simple que cela. :)

+0

Si vous ne vous souciez pas des personnes sans Javascript et si vous utilisez jQuery. Et si 'selectedItemValue' est réglé magiquement. –

+0

selectedItemValue a pu être créé sur le serveur (en ligne PHP), et si vous voulez définir la valeur sélectionnée de la boîte de sélection sur le serveur, alors il est déjà défini au préalable par le client, donc vous le savez. Mais tu as raison. J'ai besoin d'un peu de familiarité JavaScript/jQuery :) –

+0

Ce que je voulais dire, c'est que ce n'est pas si simple puisque vous avez oublié le code qui est nécessaire pour que cela fonctionne et qui pourrait ne pas être évident pour quelqu'un qui ne connaît pas Javascript. La solution marcherait certainement bien :) –

0

En fait, vous avez deux façons: la première est de comparer chaque élément à sélectionné (comme l'ont fait @Francois Deschenes et @cwallenpoole); le second est une solution de rechange et à cause de cela pas très bon, mais plus facile à mettre en œuvre. Vous pouvez utiliser javascript pour définir l'élément sélectionné à nécessaire après la liste est formée:

<script type="text/javascript"> 
$(function() { 
    $('select[selected]').val(function() { 
     return $(this).attr('selected') 
    }) 
}); 
</script> 
<select selected="7"> 
    <option value="1">1</option> 
    <!-- ... --> 
    <option value="10">10</option> 
</select> 
+0

Oh, @Seed Neamati a posté la même chose pendant que j'écrivais :) – RReverser

0

Une autre non si la version non-js pourrait être quelque chose comme ça

<? 
$res = array($_GET["selected"] => " selected='selected'");  
?> 


<select name="select"> 
    <option value="1"<? echo $res['1']; ?>>Option 1</option> 
    <option value="2"<? echo $res['2']; ?>>Option 2</option> 
    <option value="3"<? echo $res['3']; ?>>Option 3</option> 
</select> 
Questions connexes