Como escolher um item de formulário de seleção suspensa do país sem usar o banco de dados?

StackOverflow https://stackoverflow.com/questions/1179566

  •  19-09-2019
  •  | 
  •  

Pergunta

Eu tenho esse código PHP que eu uso para fazer uma seleção de formulários suspensos do país, gostaria de eliminar essa consulta MySQL extra e apenas armazenar a saída como no código na página, mas estou perdido sobre como eu teria o país dos usuários Selecionado se eu não usar a consulta para obter os dados, por favor, conselhos

<select name="country"  style="width:180px;" onChange="do_get_rest_popup(this.value)" o>
<?PHP
$sql="SELECT * FROM  users_countries  ORDER BY country";
$result_country = executequery($sql);   
while($line_country = mysql_fetch_array($result_country)){
   $db_country_id = $line_country['id']; 
   $country_name = $line_country['country'];
?>
<option value="<?=$db_country_id?>"<? if($line_member['country']==$db_country_id){ echo " SELECTED";} ?>><?=$country_name?></option>
<?
}
?>
</select>

Código sobre as saídas na página, eu reduzi a quantidade de países para este post

<select name="country"  style="width:180px;" onChange="do_get_rest_popup(this.value)" o> 
<option value="217">Turkmenistan</option> 
<option value="218">Turks and Caicos Islands</option> 
<option value="219">Tuvalu</option> 
<option value="220">Uganda</option> 
<option value="221">Ukraine</option> 
<option value="222">United Arab Emirates</option> 
<option value="223">United Kingdom (Great Britain)</option> 
<option value="224" SELECTED>United States</option> 
</select>
Foi útil?

Solução

Que tal algo como isso?

<?
$countries = array(
"217" => "Turkenistan",
"218" => "Turks and Caicos Islands",
"219" => "Tuvalu",
"220" => "Uganda",
"221" => "Ukraine",
"222" => "United Arab Emirates",
"223" => "United Kingdom (Great Britain)"
"224" => "United States");
?>

<select name="country" style="width:180px;" onChange="do_get_rest_popup(this.value)" /> 
<?php
$countryCounter = 1;
$amtOfCountries = count($countries);
foreach ($country as $id => $c) {
    if ($countryCounter == $amtOfCountries) { 
    echo "<option value=\"$id\" SELECTED>$c</option>";
    } 
    else {
    echo "<option value=\"$id\">$c</option>";
    $countryCounter++;
        }
}
?>
</select>

Editar: eu não testei isso, mas você deve ter a ideia

Outras dicas

Você poderia:

  • Imprima uma matriz de países como código PHP usando var_export () e, em seguida, codifique isso em algum lugar.
  • Cache os valores do banco de dados usando algo como Pêra cache_lite - Isso é muito simples de usar e significa que, se você modificar os valores no banco de dados, tudo o que você precisa fazer é excluir o arquivo de cache para regenerar.

Com as duas opções acima, você tem uma matriz que pode fazer uma maneira semelhante ao que está fazendo agora para gerar o HTML.

Você pode amortecer o HTML estático e fazer uma string simples substituir pelo valor selecionado.

1) Salvar a lista HTML do país em countries.html

2) No tempo de carregamento, leia countries.html em uma variável e faça uma string substitua:

$countries = file_get_contents('countries.html');    
echo str_replace('value="'.$userCountry.'"','value="'.$userCountry.'" SELECTED',$countries);

Não é muito eficiente em memória, mas salva o tempo de acertar e processamento do banco de dados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top