从变量

时间:2016-03-09 10:54:43

标签: php html html-select

我希望下拉列表的选定值由查询结果决定。但无论我尝试什么,它的选择值都保持在第一选择。

我在同一个问题上浏览了多个问题,但没有一个能解决我的问题。

我试过这个:

<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]);

2 个答案:

答案 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()函数检查变量包含的内容。我希望它能让你更接近解决方案。如果您需要更多帮助,则必须发布更多代码,因为现在并不是所有内容都清晰。