2010-06-13 6 views
3

En utilisant l'exemple à l'adresse suivante: http://www.kavoir.com/2009/02/php-drop-down-list.htmlPHP - drop Présélectionne vers le bas l'option

Comment puis-je avoir ce menu déroulant pré-sélectionner l'une des options telles que « Apple »?

EDIT: Ajout d'info

function showForm() 

{ 
global $sProduct, $name, $product, $header_file, $footer_file, $form_width, $form_background, $form_border_color, $form_border_width, $form_border_style, $cell_padding, $left_col_width, $font_size; 
include $header_file; 
echo <<<EOD 

<form method="post" class="cForm"> 
<table style="width:{$form_width}; padding:20px 7px 0px 7px; font-size:{$font_size}; background-color:{$form_background};" class="contactForm"> 
<tr> 
<td style="width:{$left_col_width}; text-align:left; vertical-align:center; padding:{$cell_padding}; font-weight:bold; {$name[3]}">{$name[0]}</td> 
<td style="text-align:left; vertical-align:top; padding:{$cell_padding};"><input type="text" name="{$name[1]}" value="{$name[2]}" size="25"/></td> 
</tr> 
<tr> 
<td style="width:{$left_col_width}; text-align:left; vertical-align:center; padding:{$cell_padding}; font-weight:bold;">{$product[0]}</td> 
<!--<td style="text-align:left; vertical-align:top; padding:{$cell_padding};"><select name="{$product[1]}">--> 
<td style="text-align:left; vertical-align:top; padding:{$cell_padding};"> 
<select name="{$product[1]}"> 
    <option value="1"></option> 
    <option value="2">item 2</option> 
    <option value="3">item 3</option> 
    <option value="4">item 4</option> 
    <option value="5">item 5</option> 
    <option value="6">item 6</option> 
</select> 
</td> 
</tr> 
<td style="width:{$left_col_width}; text-align:left; vertical-align:center; padding:{$cell_padding}; font-weight:bold; {$code[3]}">{$code[0]}</td> 
<td style="text-align:left; vertical-align:top; padding:{$cell_padding};"><input type="submit" name="submit" value="Submit" style="border:1px solid #999;background:#E4E4E4;" /></td> 
</tr> 
<tr> 
<td colspan="2" style="font-size:10px; text-align:left; vertical-align:middle; padding:{$cell_padding};"> 
0:(var_product[0] = ({$product[0]})) <br/> 
1:(var_product[1] = ({$product[1]})) <br/> 
2:(var_product[2] = ({$product[2]}))<br/> 
3:(var_product[3] = ({$product[3]}))<br/> 
4:(var_sProduct = ({$sProduct}))<br/> 
</td> 
</tr> 
</table> 
</form> 

EOD; 
+1

Ohh, qui est en désordre. Vous ne devriez pas avoir de déclaration de style à l'intérieur de la balise, sauf si c'est absolument nécessaire. –

+2

:-) oui je sais. J'essaie d'obtenir la fonctionnalité maintenant. Je vais le nettoyer dès que je pourrai travailler. Je vais essayer les suggestions et voir ce qui se passe. – Phil

Répondre

7

Je voudrais jeter un autre paramètre dans la fonction generateSelect qui définit ce qu'est la valeur par défaut. Vous pouvez le faire avec le id de l'option ou par le name. Pour ce qui suit, je vais utiliser name pour le rendre plus clair.

function generateSelect($name = '', $options = array(), $default = '') { 
    $html = '<select name="'.$name.'">'; 
    foreach ($options as $option => $value) { 
     if ($option == $default) { 
      $html .= '<option value='.$value.' selected="selected">'.$option.'</option>'; 
     } else { 
      $html .= '<option value='.$value.'>'.$option.'</option>'; 
     } 
    } 

    $html .= '</select>'; 
    return $html; 
} 

/* And then call it like */ 
$html = generateSelect('company', $companies, 'Apple'); 
+0

gotit. Mon problème était que je n'utilisais pas "html" dans ma table. Au lieu de cela, je tapais: en plaçant $ html dans son placer et utiliser votre code, cela fonctionne parfaitement maintenant. Merci beaucoup – Phil

+0

Excellent. C'est là que PHP (et tout langage dynamique d'ailleurs) brille vraiment, en automatisant les tâches répétitives. Gardez rockin ' –

2

Lorsque vous l'écho de votre option, l'écho comme suit:

<option value="apple" selected="selected">Apple</option> 

Ou vous pouvez utiliser js comme suit:

var dropDownList = document.getElementById('dropDownListId'); 
dropDownList.options[optionIndex].selected = true; 

Je peaufiné cette fonction un peu mais vous pouvez l'utiliser:

function generateSelect($name, $options, $optionToSelect) { 
    $html = '<select name="'.$name.'">'; 
    foreach ($options as $option => $value) { 
     if($value == $optionToSelect) 
      $html .= '<option value="'.$value.'" selected="selected">'.$value.'</option>'; 
     else 
      $html .= '<option value="'.$value.'">'.$value.'</option>'; 
    } 
    $html .= '</select>'; 
    return $html; 
} 
+0

Je ne sais pas comment le formater correctement. J'aime la simplicité de votre réponse et j'espère pouvoir le faire fonctionner. J'ai mon menu déroulant dans une table. J'ai édité mon post original pour montrer le code de mon écho. Pourriez-vous y jeter un coup d'œil? Je l'ai grandement simplifié. – Phil

+0

Cette ligne: function generateSelect ($ name, $ options, $ optionToSelect) { m'a aidé à mieux comprendre ce qui se passait dans cette fonction Merci beaucoup! – Phil

+1

FYI, en ajoutant $ name = '', tout ce qu'il fait est juste de définir une valeur par défaut de sorte que si une valeur spécifique n'est pas entrée, elle vaut par défaut ce qui est là. Les options $ name et $ sont obligatoires mais je ferais de $ optionToSelect optionnel en faisant $ optionToSelect = '' –

0
<?php 
$selected_fruit= 2; 

$opt_txt=function($opt_val){   
    $selected=($selected_fruit==$opt_val)?"selected=selected":""; 
    $opt_txt= "value= \"".$opt_val."\" ".$selected; 
    echo $opt_txt; 
    } 
?> 

<select name="{$product[1]}"> 
    <option <?php $opt_txt(0) ?> ></option> 
    <option <?php $opt_txt(2) ?> >apple</option> 
    <option <?php $opt_txt(3) ?> >banana</option> 
    <option <?php $opt_txt(4) ?> >pear</option> 
    <option <?php $opt_txt(5) ?> >peach</option> 
    <option <?php $opt_txt(6) ?> >apricot</option> 
</select>