下拉菜单和单选按钮不粘
Posted
技术标签:
【中文标题】下拉菜单和单选按钮不粘【英文标题】:Drop-down menu and radio buttons not sticking 【发布时间】:2021-11-07 10:59:23 【问题描述】:我正在创建一个包含 php 的 html 表单,以便从最终用户那里获取信息。用户提交信息后,顶部会发布一条消息。如果用户在点击提交后没有在任何字段中输入值,则会在顶部显示一条错误消息,并且已经输入的值应该仍然存在于输入中。
我遇到的问题是勾选复选框。
我首先发布了我的 html:
<label><input type="checkbox" name="interests[]" id="rainGauge" value="Make a Rain Gauge" <?php if(in_array("rainGauge", $_POST['interests'])) echo 'checked'; ?>> Make a Rain Gauge </label>
<br><label><input type="checkbox" name="interests[]" id="thermometer" value="Make a Thermometer"<?php if(in_array("thermometer", $_POST['interests'])) echo 'checked'; ?>> Make a Thermometer </label>
<br><label><input type="checkbox" name="interests[]" id="windsock" value="Make a Windsock"<?php if(in_array("windsock", $_POST['interests'])) echo 'checked'; ?>> Make a Windsock</label>
<br><label><input type="checkbox" name="interests[]" id="lightningMouth" value="Make Lightning In Your Mouth"<?php if(in_array("lightningMouth", $_POST['interests'])) echo 'checked'; ?>> Make Lightning In Your Mouth</label>
<br><label><input type="checkbox" name="interests[]" id="hygrometer" value="Make a Hygrometer"<?php if(in_array("hygrometer", $_POST['interests'])) echo 'checked'; ?>> Make a Hygrometer </label><br>
这是我的 php
//foreach loop to show selected Interests
if ((!empty($_POST["interests"])) && ($stopPost !="Y"))
echo "You have chosen the following workshops:";
foreach($_POST["interests"] as $checked => $interests)
echo "<p><em>" . $interests ."</em></p>";
我不确定为什么我正在使用的东西不起作用。我在网上搜索了解决方案,这似乎对大多数人都有效,所以我不确定我做错了什么。
【问题讨论】:
$_POST["charleston"]
(和其他)永远不会被设置,那些是你的<select>
的values
。您的<select>
被命名为closestCenter
,因此请检查$_POST['closestCenter']
。 isset($_POST["Y"]
也一样,你需要检查输入元素的name
,而不是它的值
请edit您的问题并在现有代码之外发布新代码。一件事:... == "Charleston"
从来都不是Charleston
,you 输入的值是charleston
。并在您的 value=...
属性之前添加一个空格
我修复了您提到的问题,现在单选按钮和下拉菜单运行良好!关于如何修复复选框的任何想法?由于数组,我一直在努力解决这个问题
@Christineh - 查看我在下面发布的setstate
函数,了解如何处理复选框数组...
【参考方案1】:
您选择的方法可能会变得笨拙 - 所有的内联条件和 echo 语句都使它很难遵循并且非常臃肿。您可以轻松地使用 PHP 动态生成内容 - 从静态声明的数组、数据库查找或从源文件读取。这样做的好处是,您只需更改源值即可非常快速地修改内容。
例如,使用静态声明的数组:
<?php
/*
Simple function that does the POST lookup and determines if the supplied value is equal to the POST value.
If it is then the default checked/selected string will be returned.
*/
function setstate( $name, $type, $value )
if( isset( $_POST[ $name ] ) )
switch( $type )
case 'checkbox':
if( is_array( $_POST[ $name ] ) && in_array( $value, $_POST[ $name ] ) ) return 'checked';
if( $_POST[ $name ]==$value )return ' checked';
break;
case 'radio': if( $_POST[ $name ]==$value )return ' checked';
case 'select': if( $_POST[ $name ]==$value )return ' selected';
return '';
/* easily extensible arrays to govern displayed content */
$centres=array(
'charleston' => 'Charleston',
'summerville' => 'Summerville',
'mtPleasant' => 'Mt. Pleasant',
'burton' => 'Burton',
'orangeburg' => 'Orangeburg'
);
$membership=array(
'Y' => 'Yes',
'N' => 'No',
'signUp' => 'Sign me up.',
'nfi' => 'Do not remember'
);
$interests=array(
'rainGauge' => 'Make a Rain Gauge',
'thermometer' => 'Make a Thermometer',
'windsock' => 'Make a Windsock',
'lightningMouth' => 'Make Lightning In Your Mouth',
'hygrometer' => 'Make a Hygrometer',
'hydro' => 'Make a Hydroponoic grow system',
'gokart' => 'Make a motorised Go-Kart'
);
?>
然后是 HTML
<form method='post'>
<section data-id='Centers'>
<label>Your closest center:
<select name='closestCenter'>
<option selected hidden disabled>Please select Center
<?php
foreach( $centres as $key => $centre )
printf('<option value="%s"%s>%s', $key, setstate('closestCenter', 'select', $key ), $centre );
?>
</select>
</label>
</section>
<section data-id='Membership'>
<label for="member">Are you a member?
<?php
foreach( $membership as $key => $value )
printf('<input type="radio" name="member" value="%s" %s/> %s',$key, setstate('member', 'radio', $key ), $value );
?>
</label>
</section>
<section data-id='Workshops'>
<?php
foreach( $interests as $key => $interest )
printf('<label><input type="checkbox" name="interests[]" value="%s" %s/>%s</label>', $key, setstate('interests', 'checkbox', $key ), $interest );
?>
</section>
<input type='submit' />
</form>
希望对你有帮助
【讨论】:
以上是关于下拉菜单和单选按钮不粘的主要内容,如果未能解决你的问题,请参考以下文章