让我的下降粘性?

时间:2013-10-10 05:31:05

标签: php html forms sticky

我对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>

3 个答案:

答案 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的值。循环来构建。