我对PHP(以及一般的编程)非常陌生,我试图让我的表单字段变粘,因此每次用户点击提交时,他们的选择都会在下拉列表中保持选中状态。代码正在正确地改变字体,颜色等,但它会继续回到下拉列表顶部的值。
<!DOCTYPE html>
<html>
<head><title>Example</title></head>
<body>
<form name="FontFamilyForm" method="post">
<select name="fontFamily">
<option value="serif">Serif</option>
<option value="sans-serif">Sans-serif</option>
<option value="fantasy">Fantasy</option>
<option value="monospace">Monospace</option>
</select>
<input type="submit" />
</form>
<form name="FontSizeForm" method="post">
<select name="fontSize">
<option value="100">Normal</option>
<option value="60">Tiny</option>
<option value="80">Small</option>
<option value="120">Medium</option>
<option value="150">Large</option>
<option value="200">Extra Large</option>
</select>
<input type="submit" />
</form>
<form name="BackgroundColorForm" method="post">
<select name="backgroundColor">
<option value="#ffffff">Normal</option>
<option name='beetch' value="#dddddd">Light Grey</option>
<option value="#aaaaaa">Medium Grey</option>
<option value="#888888">Grey</option>
<option value="#333333">Dark Grey</option>
<option value="#000000">Black</option>
</select>
<input type="submit" />
</form>
<?php
if (isset($_POST['fontFamily']))
{
$fontFamilyVar = $_POST['fontFamily'];
}
if (isset($_POST['fontSize']))
{
$fontSizeVar = $_POST['fontSize'];
}
if (isset($_POST['backgroundColor']))
{
$backgroundColor = $_POST['backgroundColor'];
}
?>
<style type="text/css">
body {
line-height:1.5;
width:640px;
margin:0 auto;
font-family: <?echo $fontFamilyVar?>;
font-size: <?echo $fontSizeVar?>%;
background-color: <?echo $backgroundColor?>;
color: #dddddd;
}
label {width:12em;float:left;}
</style>
<p>Test string blah blah blah blah blah</p>
</body>
<html>
答案 0 :(得分:5)
您需要按以下方式更新代码:
<select name="fontFamily">
<option <?php if($fontFamilyVar=="serif") echo 'selected="selected"'; ?> value="serif">Serif</option>
<option <?php if($fontFamilyVar=="Sans-serif") echo 'selected="selected"'; ?> value="sans-serif">Sans-serif</option>
<option <?php if($fontFamilyVar=="Fantasy") echo 'selected="selected"'; ?> value="fantasy">Fantasy</option>
<option <?php if($fontFamilyVar=="Monospace") echo 'selected="selected"'; ?> value="monospace">Monospace</option>
</select>
还将您的PHP代码放在页面顶部,而不是底部:
<?php
if (isset($_POST['fontFamily']))
{
$fontFamilyVar = $_POST['fontFamily'];
}
if (isset($_POST['fontSize']))
{
$fontSizeVar = $_POST['fontSize'];
}
if (isset($_POST['backgroundColor']))
{
$backgroundColor = $_POST['backgroundColor'];
}
?>
答案 1 :(得分:0)
这是因为在回复后,您的选择会丢失。您可以使用会话更改下拉列表的选定值。
<select name="fontFamily">
<option value="serif"<?=$_SESSION['fontFamily'] == "Serif" ? ' selected="selected"' : ''?>>Serif</option>
<option value="fantasy"<?=$_SESSION['fontFamily'] == "Fantasy" ? ' selected="selected"' : ''?>>Fantasy</option>
</select>
即使用户刷新页面使用会话(F5),下拉列表中的值也不会更改为默认值。
不要忘记启动会话并在回发时为其分配值。
希望这有帮助
答案 2 :(得分:0)
我这样做的主要方法是简单地使用“selected”标签将先前选择的选项粘贴在列表顶部。这适用于订单不特定的列表。
另一种方法是创建一个选项值数组,然后遍历数组并将先前选择的值与数组中的每个选项进行比较。
$option_value = "two";
$array = array('one', 'two', 'three', 'four');
$array_count = count($array);
echo "<select name=\"numbers\">";
for ($i=0; $i<$array_count; $i++){
echo "<option value=\"$array[$i]\"";
if ($array[$i] == $option_value){
echo " selected";
}
echo ">$array[$i]</option>"
}
echo "</select>";
如果你正在为一小时内的分钟构建一个选项列表,你可以做同样的事情,只有你不必提前声明一个数组,你只需要使用$ i的值。循环来构建。