获取与PHP
问题描述:
选项的值和文本比方说,我有一个HTML表单: 美国 CDN 我选择选项1(美国) 然后PHP页面 好,真不错,做工精细和回声的“1” 我怎样才能显示“USA”?所以实质上,我想传递选项的TEXT。我怎么能这样做?获取与PHP
答
我建议你有一份你用来打印表格的相同数据结构。
例如,如果你做这一切在一个PHP页面...
<?php
$countries=array('USA','CDN');
?>
<form action='?' method='post'>
<select name='country'><?php
foreach($countries as $key=>$country){?>
<option value='<?php echo $key;?>'><?php echo $country;?></option>
<?php
} ?>
</select>
<input type='submit'>
</form>
<?php
if(isset($_POST['country'])){
$chosen=(int)$_POST['country'];
if(!isset($countries[$chosen])){?>Unknown country selection, wtf<?php exit; }?>
<div style='margin-top:20px;'>You selected <?php echo $countries[$chosen];?></div>
<?php }
另一种选择是完全抛弃了数值,只需使用国名作为选项的值。但是,为了验证,您仍然需要值的列表。检查的差异在这个例子...
<?php
$countries=array('USA','CDN');
?>
<form action='?' method='post'>
<select name='country'><?php
foreach($countries as $country){?>
<option value='<?php echo $country;?>'><?php echo $country;?></option>
<?php
} ?>
</select>
<input type='submit'>
</form>
<?php
if(isset($_POST['country'])){
$chosen=preg_replace('/[^\w]/','',$_POST['country']);//this isn't strictly necessary, since the next line checks if the value is in your original array - but filtering input is a good habit!
if(!in_array($_POST['country'],$countries)){?>Unknown country selection, wtf<?php exit; }?>
<div style='margin-top:20px;'>You selected <?php echo $chosen;?></div>
<?php }
答
客户端的浏览器will not post back anything beyond the form element's name and value - 你必须把附加的表单字段和Javascript(或更改元素的值),以发布“USA”。
答
您需要将HTML页面上的选项值更改为要显示的文本(引起XSS安全隐患),或者在显示文本的页面上,您需要一个数组,其中包含所有值与论坛输入相匹配。
例: $names[1] = "USA"; $names[2] = "CDN";
然后,当你想要显示它,你会打电话给$names[$selection]
输出的文本。
您可以考虑的另一种选择是在用户进行选择(使用onUpdate)时使用javascript更新提交页面上隐藏的HTML元素。这些信息将与提交的表单数据一起传递。不是最安全或可靠的选择,但是是一种选择。
打多宝宝格式化 – 2010-10-23 05:17:28
@bemace唉,格式化似乎不是我的强项! – JAL 2010-10-23 05:20:10
我的选择下拉列表是从一个数据库动态填充的,该数据库已经预填充了数千行数据,全部使用数字ID。该表单有5个与用户输入相关的选择元素,因此select 1会获得一个新选项,select 2将重新填充ajax调用。所以这5个选择都是基于数据库中的数字ID。我只需要一种方法在表单发布后在echo语句中显示选项文本,以便用户可以看到他们选择的内容,并且此时我无法重新格式化所有内容。 – 2010-10-23 05:27:54