【问题标题】:how to pick a country dropdown selection form item without using database?如何在不使用数据库的情况下选择国家下拉选择表单项?
【发布时间】:2009-07-24 19:07:45
【问题描述】:

我有这个 PHP 代码,我用它来选择国家/地区的下拉表单 我想消除这个额外的mysql查询,只是将输出像代码一样存储到页面上 但是,如果我不使用查询来获取数据,我将如何选择用户国家/地区 请指教

<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>

关于页面输出的代码,我已经为这篇文章减少了国家的数量

<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>

【问题讨论】:

  • 这不像下面的一些答案那么优雅,但您可以先添加动态“选定”值,然后从静态内容(文件、缓存、数组等)加载所有内容。 .)。结果是您在列表中的第一个值始终是“选定的”当前值。将复制所选值,因为所选值也将位于静态内容中的其他位置...再次,只是另一个选项。

标签: php country


【解决方案1】:

这样的事情怎么样?

<?
$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>

编辑:我没有对此进行测试,但您应该明白了

【讨论】:

  • 太棒了,我会试试这个!除了性能之外,我想消除 DB 调用的另一个原因是我想让美国加拿大和英国出现在所有国家/地区的列表顶部,以便大多数用户轻松选择,你知道我可以如何添加那在
  • 我试过了,但我无法用任何数据填充表单,我对数组不是很好,所以我无法让它工作
  • 它们在数组中出现的顺序就是它们在下拉列表中出现的顺序,因此在声明数组时需要对数组中的值重新排序。而且我已经在我发布的内容中看到了错误 - 在我的 foreach 语句中 $county 应该是 $countries。我无权访问网络服务器,否则我会对其进行测试。
【解决方案2】:

你可以:

  • 使用 var_export() 将国家/地区数组打印为 PHP 代码,然后在某处进行硬编码。
  • 使用类似Pear Cache_Lite 的方式缓存数据库中的值 - 这使用起来非常简单,这意味着如果您修改数据库中的值,您所要做的就是删除缓存文件以使其重新生成。

通过以上两个选项,您将拥有一个数组,您可以以与您现在所做的类似的方式循环该数组以生成 html。

【讨论】:

    【解决方案3】:

    您可以缓冲静态 html 并对所选值进行简单的字符串替换。

    1) 将国家HTML列表保存到countries.html

    2) 在加载时,将countries.html 读入变量并进行字符串替换:

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

    总体而言内存效率不是很高,但它确实节省了数据库命中和处理时间。

    【讨论】:

    • 为什么需要输出缓冲? file_get_contents() 不应该输出任何东西
    • 哈,你当然是对的。我在混淆我的代码片段!我会解决的。
    猜你喜欢
    • 2013-02-27
    • 2014-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-23
    • 1970-01-01
    • 1970-01-01
    • 2013-10-15
    相关资源
    最近更新 更多