我希望下拉列表的选定值由查询结果决定。但无论我尝试什么,它的选择值都保持在第一选择。
我在同一个问题上浏览了多个问题,但没有一个能解决我的问题。
我试过这个:
<select name="Period">
<option value="Day" <?php if($PeriodTXT == "Day") echo "selected"?>>Day</option>
<option value="Week" <?php if($PeriodTXT == "Week") echo "selected"?>>Week</option>
<option value="Month" <?php if($PeriodTXT == "Month") echo "selected"?>>Month</option>
<option value="Year" <?php if($PeriodTXT == "Year") echo "selected"?>>Year</option>
</select>
而且:
<select name="Period">
<option <?php echo ($PeriodTXT == 'Day')?"selected":"" ?> >Day</option>
<option <?php echo ($PeriodTXT == 'Week')?"selected":"" ?> >Week</option>
<option <?php echo ($PeriodTXT == 'Month')?"selected":"" ?> >Month</option>
<option <?php echo ($PeriodTXT == 'Year')?"selected":"" ?> >Year</option>
</select>
但它不起作用。此外,当我使用echo "$PeriodTXT";
时,它回显“周”(完全按照下拉列表的选项中所写),因此它应该选择“周”,但它不会。
编辑:$PeriodTXT
应该显示带有数字计数的选定间隔(例如“3天”它只会保留“日”部分)
$usersdata = array();
while($row = mysqli_fetch_array($result))
{
$usersdata = $row;
}
$PeriodTXT = preg_replace("/\d+/u", "", $usersdata[4]);
答案 0 :(得分:1)
当您使用正则表达式删除 count 时,您的问题是文本周围有额外的空白,因此隐藏的额外空白会导致条件为false,
$PeriodTXT = '3 Week';
$PeriodTXT = preg_replace("/\d+/u", "", $usersdata[4]); //without trim()
var_dump($PeriodTXT); // outputs string ' Week' (length=5)
但是当我们trim
时
$PeriodTXT = trim(preg_replace("/\d+/u", "", $usersdata[4])); //with trim()
var_dump($PeriodTXT); // outputs string 'Week' (length=4)
所以使用trim()
来解决这个问题,例如,
<?php
$usersdata = array();
$usersdata[4] = '3 Week';
$PeriodTXT = trim(preg_replace("/\d+/u", "", $usersdata[4]));
?>
<select name="Period">
<option <?php echo ($PeriodTXT === 'Day')?"selected ='selected'":"" ?> >Day</option>
<option <?php echo ($PeriodTXT === 'Week')?"selected ='selected'":"" ?> >Week</option>
<option <?php echo ($PeriodTXT === 'Month')?"selected ='selected'":"" ?> >Month</option>
<option <?php echo ($PeriodTXT === 'Year')?"selected ='selected'":"" ?> >Year</option>
</select>
另请注意,我已将HTML部分从"selected":""
更改为"selected ='selected'":""
答案 1 :(得分:0)
我了解您使用POST方法发送表单,发送后,您希望尝试使用所选选项显示它。
请描述$PeriodTXT
变量是什么以及如何设置它。
这是一个让它变得简单的解决方案,希望它能帮到你。
$sent = $_POST['Period'];
$options = aray("Day", "Week", "Month", "Year");
echo '<form method="post" action="">
<select name="Period">';
foreach ($options as $v)
{
$selected = ($sent == $v) ? ' selected' : null;
echo '<option value="'.$v.'"'.$selected.'>'.$v.'</option>';
}
echo '</select>
<input type="submit" value="send">
</form>';
编辑:
您发布的“while”代码似乎有误。
每次while()进行时,您都在创建$userdata
变量。事实上,它并不像你想要的那样是一个真正的阵列。仅当您从数据库中选择一条记录时(mysql_num_rows($result) == 1
),它才有效。否则就错了。
应该这样做:
$usersdata = array();
while($row = mysqli_fetch_array($result))
{
$usersdata[] = $row;
}
$PeriodTXT = preg_replace("/\d+/u", "", $usersdata[$index][4]);
请注意,您必须知道您正在更改哪一行($index
变量)。
$usersdata
成为Associative array。
使用var_dump()
函数检查变量包含的内容。我希望它能让你更接近解决方案。如果您需要更多帮助,则必须发布更多代码,因为现在并不是所有内容都清晰。