下拉菜单和单选按钮不粘

Posted

技术标签:

【中文标题】下拉菜单和单选按钮不粘【英文标题】:Drop-down menu and radio buttons not sticking 【发布时间】:2021-11-07 10:59:23 【问题描述】:

我正在创建一个包含 phphtml 表单,以便从最终用户那里获取信息。用户提交信息后,顶部会发布一条消息。如果用户在点击提交后没有在任何字段中输入值,则会在顶部显示一条错误消息,并且已经输入的值应该仍然存在于输入中。

我遇到的问题是勾选复选框。

我首先发布了我的 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"](和其他)永远不会被设置,那些是你的&lt;select&gt;values。您的&lt;select&gt; 被命名为closestCenter,因此请检查$_POST['closestCenter']isset($_POST["Y"] 也一样,你需要检查输入元素的name,而不是它的值 请edit您的问题并在现有代码之外发布新代码。一件事:... == "Charleston" 从来都不是Charlestonyou 输入的值是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>

希望对你有帮助

【讨论】:

以上是关于下拉菜单和单选按钮不粘的主要内容,如果未能解决你的问题,请参考以下文章

php 重力Wiz //重力形式//显示下拉和单选按钮产品字段的价格

启用/禁用单选按钮选择下拉菜单

启用/禁用选择/下拉菜单和下拉单选按钮?

如何使 Bootstrap 单选按钮继续进入下拉菜单

根据正确选择的单选按钮显示下拉菜单

选择下拉菜单上的启用/禁用单选按钮?