我怎样才能使 PHP 只写入一次被选中的列表?

Posted

技术标签:

【中文标题】我怎样才能使 PHP 只写入一次被选中的列表?【英文标题】:How can I make to PHP write only once selected to the list? 【发布时间】:2021-12-23 05:19:53 【问题描述】:

我将用 php 制作一个 html 列表,默认值是当前日期、月份或年份。

像这样:

代码如下:

while ($start <= $end) 
    if ($start == date("Y") || $start == date("d")  || $start == date("m")) 
        echo "<option selected value='$name'>$start</option> <br>";
     else 
        echo "<option value='$name'>$start</option> <br>";
    
    $start++;

    
echo "</select>";

问题是逻辑不能正常工作,因为在日或月不能分开,它总是在 HTML 中选择 2 个项目,并且总是应用最后一个。

【问题讨论】:

所以你显然需要让你的支票仔细看看它是在一天还是一个月内使用 当您创建day 下拉列表时,您不应与date('m') 比较,只能与date('d') 比较 为什么要将值全部设置为Day?应该是value='$start' 显示所有相关逻辑,你显然走了一条不该走的捷径 抱歉,所有这些下拉菜单都是由一个函数完成的 【参考方案1】:

根据您正在创建的下拉列表设置一个变量进行比较,这显然在$name 变量中。这样您就不会错误地选择与当前月份匹配的 Day 值,反之亦然。

if ($name == 'Year') 
    $selected = date('Y');
 elseif ($name == 'Month') 
    $selected = date('m');
 elseif ($name == 'Day') 
    $selected = date('d');


while ($start <= $end) 
    if ($start == $selected) 
        echo "<option selected value='$start'>$start</option> <br>";
     else 
        echo "<option value='$start'>$start</option> <br>";
    
    $start++;

    
echo "</select>";

【讨论】:

您可以使用match 代替if 以使代码更简单。 @Dharman 这是 PHP,所以我假设您的意思是 switch/case。当操作只有一行时,我经常犹豫是否使用它——在每种情况下都必须break; 会使代码更长。 不,我的意思是php.net/match 这个问题是用 PHP 8 标记的,所以使用它是安全的 哦,这对我来说是新的。我还没有使用 PHP 8(遗憾的是,我们的基础架构是 5.x 和 7.2 的混合体,甚至在我们的一台关键服务器上也是 5.4,这让我痛苦不已)。 很遗憾听到这个消息。我建议至少阅读 PHP 8 更改的概述,以便从高层次上熟悉它们。 php.net/releases/8.0/en.php

以上是关于我怎样才能使 PHP 只写入一次被选中的列表?的主要内容,如果未能解决你的问题,请参考以下文章

怎样才能 使dbgrideh 拖动滚动条时不改变当前选中记录

delphi dbgrid 怎么才能只选中第一列

delphi的dbgrideh中有个区域选中数据的功能。怎样才能知道 选中区域的最上面的行和最下面的行?

在 Listview 中检索选中 CheckBoxes 的项目

我怎样才能实现对主题的消息处理一次?

vuejs 下拉列表怎样默认选中