我怎样才能使 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的dbgrideh中有个区域选中数据的功能。怎样才能知道 选中区域的最上面的行和最下面的行?