0

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

3 回答 3

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'];  
    }
?>
于 2013-10-10T05:36:06.540 回答
0

This is because after the post back, your selection is getting lost. You can change the dropdown's selected value using Sessions.

<select name="fontFamily"> 
    <option value="serif"<?=$_SESSION['fontFamily'] == "Serif" ? ' selected="selected"' : ''?>>Serif</option> 
    <option value="fantasy"<?=$_SESSION['fontFamily'] == "Fantasy" ? ' selected="selected"' : ''?>>Fantasy</option> 
</select> 

Using Sessions even if the user refreshes the page (F5) the values in the dropdown will not change to the default ones.

Don't forget to Start the Sessions and assign the values to them on post back.

Hope this helps

于 2013-10-10T05:39:16.100 回答
0

我这样做的主要方法是简单地将先前选择的选项与“选定”标签粘贴在列表顶部。这适用于顺序不特定的列表。

另一种方法是创建一个选项值数组,然后遍历数组并将先前选择的值与数组中的每个选项进行比较。

$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 值来构建从。

于 2017-08-26T01:33:38.260 回答